Gradient Descent는 기울기(경사) 값을 기준으로 나아갈 방향을 정한다는 것은 많이 들어보셨을 것이라 생각됩니다. 이번 글에서는 이 기울기를 구하기 위한 '미분'에 대해 알아보도록 하겠습니다.
우리가 알고 있는 미분은 단순하게 '기울기'라고 생각할 수 있지만, 구체적으로 말하면 어느 한순간의 변화량을 표시한 것입니다.
수식으로는 $\frac{df(x)}{dx} = \displaystyle \lim_{h\rightarrow0} \frac{f(x+h)-f(x)}{h}$로 표현되며 $x$의 '아주 작은 변화'가 $f(x)$를 얼마나 변화시키느냐를 의미합니다. 이를 수치 미분 이라고 합니다.
$h$를 무한히 0으로 좁히는 것은 한계가 있기 때문에 수치 미분에는 오차가 포함됩니다. 이 오차를 줄이기 위해 $(x+h)$와 $(x-h)$일 때의 함수 $f$의 차분을 계산하는 방법을 쓰기도 하는데 이를 중심 차분 or 중앙 차분이라고 부릅니다.
함수 $f(x) = x^2$가 있을 때 $x=2$에서 우리가 알고 있는 $f(x)$의 미분값 $f'(2) = 4$이지만 수치 미분으로 구한 미분값은 오차가 포함되어 4.00000000000435과 같이 굉장히 가까운 값이 나옵니다.
수치 미분으로 구한 미분값과 우리가 알고 있는 미분 계산에 의한 값을 기울기로 그려보면 거의 접선에 가깝다는 것을 알 수 있습니다.
편미분
인수들의 제곱 합을 계산하는 $f(x_0, x_1) = x_0^2 + x_1^2$ 함수는 앞의 수치 미분에서 다루었던 함수와 달리 변수가 2개입니다.
$f(x_0, x_1) = x_0^2 + x_1^2$ 그래프
이제 위의 함수를 미분하고자 할 때 어느 변수에 대한 미분이냐를 구별해야 합니다. 이와 같이 변수가 여럿인 함수에 대한 미분을 편미분 이라고 하고 미분 변수에 따라 $\frac{\partial f}{\partial x_0}$ 혹은 $\frac{\partial f}{\partial x_1}$으로 표현됩니다.
실습을 통해 편미분 값을 확인해봅시다.
$x_0 = 3$, $x_1 = 4$일 때, $x_0$에 대한 편미분 $\frac{\partial f}{\partial x_0}$을 구하라$x_0 = 3$, $x_1 = 4$일 때, $x_1$에 대한 편미분 $\frac{\partial f}{\partial x_1}$을 구하라
위의 결과를 보면 수치 미분을 통해 구한 미분값과 우리가 평소 구하는 미분(해석적 미분)값이 거의 같다는 것을 알 수 있습니다.
이처럼 편미분은 변수가 하나의 미분과 마찬가지로 특정 장소의 기울기를 구합니다. 단, 목표 변수 하나에 초점을 맞추고 다른 변수는 고정한다는 것에 차이가 있습니다.
이때, $(\frac{\partial f}{\partial x_0}, \frac{\partial f}{\partial x_1})$ 처럼 모든 변수의 편미분을 벡터로 정리한 것을 기울기(Gradient)라고 합니다.
이를 코드로 구현하면 아래와 같습니다.
그리고 $(x_0,x_1)$의 각 점에서의 Gradient 결과에 마이너스를 붙인 벡터를 그리면 다음 그림과 같이 최소값을 가리키는 화살표로 그려집니다. 또, 최소값에서 멀어질수록 화살표의 크기 (벡터의 크기)가 커지는 것을 알 수 있습니다.
기울기는 각 지점에서 값이 낮아지는 방향을 가리키며, 이는 기울기가 가리키는 쪽은 각 장소에서 함수의 출력을 가장 크게 줄이는 방향을 의미합니다.
경사법
기계학습과 딥러닝 학습은 손실함수가 최소가 되는 매개변수를 찾아내는 것을 의미합니다. 하지만 일반적으로 손실 함수는 매우 복잡하고, 매개변수 공간 또한 너무 광대하여 어디가 최소값인지 알 수 없습니다. 이런 상황에서 기울기를 이용하여 손실 함수를 최소로 만드는 매개변수를 찾으려는 것이 경사법입니다.
여기서 문제는 기울기가 가리키는 방향이 정말로 나아갈 방향인지는 보장할 수 없으며, 실제로 복잡한 함수에서는 기울기가 가리키는 방향에 최솟값이 없는 경우가 대부분입니다. 하지만 그 방향으로 가야 함수의 값을 줄일 수 있습니다.
경사법은 현 위치에서 기울어진 방향으로 일정 거리만큼 이동하고, 다음 이동한 곳에서도 마찬가지로 기울기를 구하고, 구한 기울기 방향으로 나아가기를 반복하는 방법을 말합니다.