앞선 포스팅에서 model training을 하는 방법으로 미분을 통해 optimal 값을 구하는 방법을 사용했다. 해당 식은 loss function E가 단순할 때 사용할 수 있는 방법이었다.
이번 포스팅에서는 loss function이 복잡할 때 사용하는 gradient descent에 대해 공부해 보도록 하자. 이 경우에는 조금씩 update해 가며 점진적으로 찾는 방법을 써야한다.
다음과 같이 함수가 복잡할 때는 미분값이 0이 되는 극솟값이 굉장히 많다.
극솟값들을 local minima라고 하고 그 중에서도 가장 작은 값을 global minima라고 한다.
궁극적으로 우리가 찾고 싶은 최솟값은 global minima다.
하지만 우리는 해당 값을 바로 찾을 수 없고 극솟값을 찾았다 해도 그 값이 local minima인지 global minima인지 알 수 없다는 문제가 있다.
Gradient Descent
gradient는 loss function $E$의 점 P에서 정의되는 벡터로 점 P에서 $E$의 각 model parameter에 대한 편미분을 모은 벡터를 말한다.
또한, '함수 $E$가 가장 빠르게 증가하는 방향'으로 해석된다.
먼저 우리는 왜 gradient가 증가하는 방향인건지 알아보도록 하자.
Derivative
미분에 대해서 알아보자.
미분은 특정 점에서 함수의 부호가 있는 순간 변화량으로 측정할 수 있다.
ex) $\textbf{E}^{'}(2) = -0.5$
E는 $a = 2$에서 감소하고 있다.
$a$가 1 증가할 때 $E$는 0.5 감소한다.
$\textbf{E}^{'}(5) = 2$
E는 $a = 5$에서 증가하고 있다.
$a$가 1 증가할 때 $E$는 2 증가한다.
이제 $a$의 입장에서 생각해보자. $a$의 입장에서 부호 (-)는 왼쪽, 부호 (+)는 오른쪽 방향으로 가는 것이다. 그럴 때 함수는 둘다 증가함을 확인할 수 있다.
우리가 어디에서 미분을 했던간에 그 부호는 항상 함수가 증가하는 방향을 가리키고 있다.
Partial Derivative
편미분에 대해서 알아보자.
미분과 같은데 특정 점의 하나의 parameter에 대해서 순간 변화량을 구하는 것이다.
만약 $E$가 a, b, c, d로 이루어진 함수라면 $\nabla{\textbf{E}} = [\frac{\partial{\textbf{E}}}{\partial{a}}, \frac{\partial{\textbf{E}}}{\partial{b}}, \frac{\partial{\textbf{E}}}{\partial{c}}, \frac{\partial{\textbf{E}}}{\partial{d}}]$가 된다.
각각의 parameter가 함수에 끼치는 영향을 보고 그것을 모아둔 것이 gradient vector이다. 편미분에서 얻어진 부호들이 모두 함수가 증가하는 방향을 가리키고 있기 때문에 vector 또한 항상 증가하는 방향을 가리킬 수 밖에 없다. 따라서 gradient는 항상 증가하는 방향이다.
How to perform Gradient Descent?
경사하강법은 점 p의 gradient와 반대 방향으로 step size(learning rate, typically less than 0.1) $\mu$만큼씩 점진적으로 다가가며 local minimum을 찾는 방법이다. gradient는 가장 증가하는 방향이니 opposite direction이 되야함을 알 수 있다.
식으로 표현하면 이동한 후의 좌표는 이동하기 전의 좌표에서 step size * $\mu$를 뺀 값이다.
$$a^{t+1} = a^t - \mu g$$
위의 예시는 parameter가 $a$ 하나일 때를 나타냈다. 이번에는 parameter가 값을 2개 가진 vector일 때 gradient descent를 하는 방법을 알아보도록 하자.
1. 시작점을 random하게 잡고 $\textbf{w}^1$이라 하자. ($\textbf{w}^1 = (w_1^1, w_2^1)$)
2. $\textbf{w}^1$에서의 gradient를 구한다. $<\frac{\partial{L(\textbf{w})}}{\partial{w_1}}(w_1^1, w_2^1), \frac{\partial{L(\textbf{w})}}{\partial{w_2}}(w_1^1, w_2^1)>$
3. $\textbf{w}^1$에서 step size $\mu$인 gradient의 반대 방향으로 이동하여 $\textbf{w}^2$라고 하자.
$\textbf{w}^2 = (w_{1}^{1}-\mu \cdot {\frac{\partial{L(\textbf{w})}}{\partial{w_1}}}(w_{1}^{1}, w_2^1), w_{2}^{1}-\mu \cdot \frac{\partial{L(\textbf{w})}}{\partial{w_2}}(w_1^1, w_2^1))$
4. $L(w)$가 수렴할 때까지 2, 3 단계를 반복한다.
수렴 임계값을 $\delta$라고 할 때 $\textbf{E}(\textbf{a}_{n-1}) - \textbf{E}(\textbf{a}_n) < \delta$ 일 때 수렴한다고 간주한다.
보통 $\delta = 0.001$같이 매우 작은 수이다.
다음 gradient가 항상 증가하는 이유에 대해서 알아봤으니 이제 포스팅에서는 왜 가장 빠르게 증가하는지 알아보도록 하자.
'3-2 > 기계학습이론' 카테고리의 다른 글
[기계학습] Gradient Descent(경사하강법)_2 (0) | 2024.10.17 |
---|---|
[기계학습] Linear Regression_과적합 해결하기 (2) | 2024.10.13 |
[기계학습] Linear Regression_최적값 계산하기 (5) | 2024.10.12 |