머신러닝 - 3. 경사하강법(Gradient Descent)
경사하강법이란
함수의 미분값을 이용하여 함수의 최솟값을 찾는 알고리즘이라 설명할 수 있다. 경사하강법은 1차 근삿값 발견용 최적화 알고리즘이다(출처: 위키피디아). 쉽게 말하면, 함수위의 어떤 점에서 시작하여 그때그때 더 y값이 작아지는 방향으로 조금씩 계속해서 좌우로 이동하며 최솟값을 탐색하는 기법이다. 머신러닝에서는 손실 함수(목적 함수, 비용 함수등으로 부름)의 최적화(optimization) 기법에 사용된다.
흔히 경사하강법을 산을 내려가는 과정에 비유하고는 한다. 여러분이 산 위에서 내려가고자 하는데, 눈을 다쳐서 한 치 앞도 내다보기 어려운 상황이라 가정하자. 여러분은 손을 전후좌우로 더듬어서 좀 더 경사가 낮은 곳을 향해 조금씩 나아가려 할 것이다. 이것이 바로 경사하강법이다.
수학적으로 설명해보자. 어떤 함수 f(x)가 존재한다 하였을 때, 시작점 x0를 임의로 선택한다. f()의 도함수 f'()를 이용하여, f'(x0) 값을 구하고, 그 값을 기준으로 다음으로 이동할 값 x1을 계산한다. 이 과정을 계속해서 반복하여, 적당한 최적값을 찾아낸다. 이를 자세히 설명하면 다음과 같다.
현재 점 xi값에 대해서 f'(xi)값이 양수라면 기울기가 양수이므로 xi + a의 값보다 xi - a의 값이 최솟값에 더 가까우리라고 예측할 수 있다(a는 충분히 작은 실수이어야 한다). 반대로 f'(xi) 값이 음수라면 xi점을 기준으로 f(x)는 우하향의 모습을 띄고 있으므로 xi + a의 값이 더 최솟값에 가까울 것이다. ri는 이동할 거리를 조절하는 매개변수(출처: 위키피디아)로써, 학습률(learning rate)이나 스텝 사이즈(step size)등으로 부른다.
경사하강법의 문제와 한계
1. 지역극솟값(Local Minima) 문제
그림 1과 같이 볼록 함수인 경우에는 극솟값이 한 개지만, 그림 2와 같이 극솟값이 여러개인 함수에서는 시작점의 위치에 따라 도달하게 되는 극솟값이 달라질 수 있다. 때문에 전역 극솟값이 아닌 지역 극솟값이 결과로 나올 수 있다. 이를 보완하는 방법으로는 시작점에 계속 변화를 주는 방법이 있다.
2. Step size 크기 문제
앞서 수식 1에서 간단히 설명하고 넘어갔던 ri의 값, 즉 step size가 높아질수록 빠르게 최솟값에 수렴할 수 있지만, step size가 너무 커지면 제대로 최솟값을 구하지 못할 수 있다. 반대로 너무 작아져버리면 최솟값에 수렴하기까지 과하게 오래 걸릴 수 있다. 따라서, 적절한 값을 설정해 주는 것이 중요하다.