1. 미분
미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로, 머신러닝에서 최적화에 가장 많이 사용되는 기법이다.
고등학교 때 미적분을 들었다면 알겠지만 다음과 같이 표기한다.
$f'(x)=lim_{h \to 0} {{f(x+h)-f(x)} \over {h}}$
미분은 함수값의 변화량이자 함수의 기울기로 이해할 수 있다.
미분값은 함숫값을 증가시키거나 감소시킬 때 활용할 수 있다.
함숫값을 증가시키고 싶다면 미분값을 더하고, 감소시키고 싶다면 미분값을 빼면 된다.
함수의 극값에 도달하면 미분값이 0이 되어서 최적화 과정이 종료되게 된다.
이때 미분값을 더하는 방법을 경사상승법(gradient ascent)이라 하며, 함수의 극대값의 위치를 구할 때 사용한다.
반면 미분값을 빼는 방법을 경사하강법(gradient descent)라 하며, 함수의 극소값의 위치를 구할 때 사용한다.
일반적으로 기계학습에서는 경사하강법을 활용하며 목적함수(손실함수)를 최소화할 때 활용된다.
2. 편미분
그러나 다변수 함수의 경우 변수가 여러개이기 때문에 모든 변수에 적용되는 미분값을 찾을 수 없다.
그래서 사용되는 개념이 편미분이다.
$\partial_{xi} f(x) =$ $\lim_{h \to 0}{{f(x+he_i)- f(x)} \over h}$
기하학적으로 편미분은 해당 벡터 방향에서의 미분값으로 이해할 수 있다.
그러므로 x에 대한 편미분값은 x벡터 방향에서의 미분값이 된다.
함수의 변수마다 편미분이 가능하다면 마찬가지로 변수마다 편미분값을 각각 구할 수 있다.
만약 f가 x와 y에 대한 함수이고 x와 y에 대해 편미분 가능하다면, x의 편미분과 y의 편미분을 각각 구할 수 있다.
이때 각 변수별로 계산한 편미분을 그레디언드 벡터(gradient vector)라고 부르며, 경사하강/경사상승법에 활용할 수 있다.
양의 방향의 그레디언트 벡터는 각 점에서 가장 빨리 증가하는 방향으로 흐르고, 음의 방향의 그레디언트 벡터는 각 점에서 가장 빨리 감소하는 방향으로 흐른다.
따라서 다변수함수에서의 경사하강법은 그레디언트 벡터를 이용해서 진행할 수 있다.
시작점에서 출발하여 손실함수의 gradient를 구하고, 경사하강법을 통해 시작점에서 gradient를 빼준 점을 point로 잡는다.
다시 point에서 손실함수의 gradient를 구하고, 이 과정을 반복한다. gradient가 더이상 업데이트가 없으면 종료한다.
이를 통해 손실함수를 최소화하는 점을 찾을 수 있다.
3. 행렬에서의 경사하강법
선형모델에서 우리는 X라는 데이터를 y와 최대한 가깝게 만드는 $\beta$를 찾아야 한다.
이때 $X\beta$를 통해 y는 만들 수 없지만, 우리의 목적은 y와 가장 유사한 $\hat{y}$을 만드는 것이다.
그러므로 원래의 y와 우리가 구한 $\hat{y}$간의 차, $\|\mathbf{y}-\mathbf{X} \beta\|_2$가 선형회귀의 목적식이 된다.
즉 X를 y와 가장 가까운 ${\hat{y}}$로 만드려면 이 목적식을 최소화하는 $\beta$를 찾으면 되는데, 이때 경사하강법이 사용된다.
목적식의 gradient를 구하면 복잡한 계산을 거쳐서 다음과 같은 식이 나오게 된다.
$\nabla_\beta\|\mathbf{y}-\mathbf{X} \beta\|_2=\left(\partial_{\beta_1}\|\mathbf{y}-\mathbf{X} \beta\|_2, \ldots, \partial_{\beta_d}\|\mathbf{y}-\mathbf{X} \beta\|_2\right) = -\frac{\mathbf{X}^{\top}(\mathbf{y}-\mathbf{X} \beta)}{n\|\mathbf{y}-\mathbf{X} \beta\|_2}$
그리고 목적식을 최소화하는 $\beta$를 구하는 경사하강법은
$\beta^{(t+1)} \leftarrow \beta^{(t)}-\lambda \nabla_\beta\left\|\mathbf{y}-\mathbf{X} \beta^{(t)}\right\|$
이때 위의 gradient값이 음수이므로 최종적으로는 양수가 더해지는 형태가 된다.
$\|\mathbf{y}-\mathbf{X} \beta\|_2$ 대신 ${\|\mathbf{y}-\mathbf{X} \beta\|_2}^2$을 최소화하면 식을 좀 더 간단하게 만들 수 있다.
$\beta^{(t+1)} \leftarrow \beta^{(t)}+\frac{2 \lambda}{n} \mathbf{X}^{\top}\left(\mathbf{y}-\mathbf{X} \beta^{(t)}\right)$
$\lambda$는 기계학습에서 학습률을 의미한다.
'Naver Boostcamp' 카테고리의 다른 글
[Pytorch 기본]hook(pre forward hook, forward hook, backward hook) (1) | 2023.03.15 |
---|---|
[Pytorch 기본]nn.Module (0) | 2023.03.14 |
[AI Math]행렬 (0) | 2023.03.12 |
[AI Math] 벡터 (0) | 2023.03.09 |
[Python] 객체 지향 프로그래밍, Numpy, Pandas (0) | 2023.03.07 |