꺼내먹는지식 준

머신 러닝 정리 7.5 - Gradient Descent 가 정말 잘 동작할까? 본문

AI/머신러닝

머신 러닝 정리 7.5 - Gradient Descent 가 정말 잘 동작할까?

알 수 없는 사용자 2022. 10. 28. 00:04

Gradient Descent 에 대해 이론적으로 살펴볼 기회는 정말 많다. 하지만, 이게 정말 잘 동작하는지 눈으로 직접 비교하며 확인할 기회는 잘 없다. 그런 의미에서 간단하게 정리해놓는다. 본 내용은 모두 카이스트 문일철 교수님의 수업을 기반으로 하고 있음을 밝힌다. 

 

다음의 Rosenbrock 함수가 있다. 

워낙 간단한 함수라 미분으로 극점을 찾을 수 있다. 

편미분 결과 global minimum = 0 at (1,1)  을 알 수 있다. 

 

비교를 위해 위 함수를 approximation 인 gradient descent 방법을 통해 알아낼 수 있을지 확인해 보자. 

 

먼저 

  • 초기 parameter 값을 정한다. 

$x^0 = (x_1^0, x^0_2) = (-1.3, 0.9)$

 

  • derivative 의 반대방향으로 움직인다. 

(기울기의 정도가 극점으로부터 떨어진 거리의 정도임으로)

 

$f'(x^0) = \bigg(\frac{\partial}{\partial x_1}f(x_1, x_2), \frac{\partial}{\partial x_2}f(x_1 ,x_2) \bigg) = (-415.4 , -158)$

 

  • 작은 scale 로 편미분 값의 음의 방향으로 점을 업데이트 한다. 

h = 0.001

$x^1 \leftarrow x^0 - h \frac{f'(x^0)}{|f'(x^0)|}$

 

$444.4335 = \sqrt{(-415.4)^2 + (-158)^2}$

 

= (-1.2991, 0.9004)

 

※ $f'{x^0}{|f'(x^0)|}$ 가 정말 unit vector 인지 확인해보자.

 

$(-415.4/444.4335)^2 + (-158/444.4335)^2 $

$0.8736 + 0.126 \approx 1$ 

 

위 과정들을 수렴할 때 까지 반복한다. 

 

 

(-1.3, 0.9) 지점에서 시작하여 점차적으로 (1, 1) 로 다가간다. 

하지만 주어진 iteration 으로 (1, 1) 전에 다가지 못하고 멈췄다. 

iteration 수를 늘리거나, step size 를 키워야 한다.

 

 

iteration 수를 키우자 점차적으로 근처에 다가간다.

 

그렇다면 step size 를 무지성으로 키우면 어떨까? 

사실, step size 를 키워서 빠르게 다가가도록 하는 것도 좋은 방법 아닐까? 

 

하지만 간과하면 안되는 점이 있다. 

 

gradient descent 를 유도하는 과정에서 

 

$f(x) = f(a) + \frac{f'(a)}{1!}(x-a) + O(\big\rvert |x-a| \big\lvert^2)$

 

$f(x_1 + hu) = f(x_1) + hf'(x_1)u + h^2 O(1)$

 

$f(x_1 + hu) - f(x_1) \approx hf'(x_1)u$

 

$h^2$ 를 step size 즉 learning rate 가 작다고 가정하고 제거하였는데 크기를 키우는 순간 무시할 수 없는 크기가 되어 버린다. 

 

이렇기에 이론적으로 우리는 step size 를 항상 작게 유지하는 것이다.

 

이와 같이 실제로 예상치 못한 상황들이 발생할 수 있으므로 항상 많은 실험이 필요하다. 

Comments