! Optimization에 대해서 이제 처음 접해보시는 분은 Optimization 정의 먼저 보고 오시면 좋습니다 !
Gradient Descent에 대해 적기 전에 간단하게 Gradient에 대해 정의하고 시작하겠습니다 !
※ Gradient
깊게 들어가면 벡터 미적분학에서 스칼라장의 최대의 증가율을 나타내는 벡터장이라고 하는데
벡터장, 스칼라장 ... 어려워서 쉽게 기울기라 생각하면 됩니다
$$
\nabla_x f(x) = \frac {d f(x)}{dx} =\begin{bmatrix} \frac{\partial f}{\partial x_1}\\
\frac{\partial f}{\partial x_2}\\
\vdots\\
\frac{\partial f}{\partial x_d}
\end{bmatrix}
$$
여기서 $x_1, x_2, ,x_d$라고 하였지만 결국 ML/DL에서 가지는 parameter 또는 feature 입니다
※ Hessian Matrix
어떤 함수의 이계도함수를 Matrix로 표현한 것
우리가 고등학교 때 배웠던 것을 생각해보면 이계도함수는 함수의 볼록성을 따지는데 사용했었습니다
Hessian Matrix는 결국 Optimization에서 Convex Function과 연관이 있고,
Convex Function이어야 Global, Local Minimum을 찾을 수 있어 매우 중요한 개념입니다
이 글에서는 너무 깊게 들어가는 것 같아 Convexity에 대해서는 다음에 다룰 예정입니다
$$
\begin{aligned}
H &= \nabla^2 f(x) = [\frac{\partial^2 f(x)}{\partial x_i \partial x_j}] = \frac{\partial}{\partial x}[\nabla f(x)^T] \\
&= \begin{bmatrix}
\frac{\partial^2 f}{\partial {x_1}^2} &\frac{\partial^2 f}{\partial {x_1}{x_2}} & \cdots &\frac{\partial^2 f}{\partial {x_1}{x_d}} \\
\vdots & & &\vdots \\
\frac{\partial^2 f}{\partial {x_d}{x_1}} & \frac{\partial^2 f}{\partial {x_d}{x_2}} & \cdots & \frac{\partial^2 f}{\partial {x_d}^2} \\
\end{bmatrix}
\end{aligned}
$$
Gradient Descent(경사하강법)
Gradient Descent 정의
Back Propagation(역전파)를 통해 Parameter를 Update를 하는 방법 중 하나
Gradient Descent란 함수의 gradient를 구하고 gradient의 반대 방향으로 계속 이동하여 극값에 이를때까지 반복시키는 방법입니다
$\theta_k+1 = \theta_k - \eta \nabla_{\theta} L(\theta_k; X, y)$
이 때 $\eta$ 는 Learning Rate로 학습률이라 합니다
$ \nabla_{\theta} L(\theta_k; X, y)$ 는 parameter가 현재 $\theta_k$일 때의 gradient 값입니다
그림에서 $\theta^{(0)} \rightarrow \theta^{(1)}$ 로 갈 때는 Gradient < 0 때문에 $-\eta \nabla_{\theta} L(\theta_k; X, y)$ 에 따라 $\theta$가 커지는 방향으로 이동하게 됩니다
반대로 $\theta^(k)$는 Gradient > 0이기 때문에 $\theta_{k+1}$은 $\theta_k$ 보다 작은 값이 됩니다
이를 반복하게 되면 Loss가 가장 작은 Local Minimum($\theta^*$)에 도달하게 됩니다
Gradient Descent의 개념은 이게 다입니다 (이제 시작입니다..!)
Gradient Descent 예제
그럼 이제 가장 간단한 모델인 Linear Regression 모델을 통해 Gradient Descent를 한번 보겠습니다
Linear Regression Model : $$f_{w,b}(x) = wx +b$$
Loss(Cost) Function (MSE Loss) : $$L(w,b) = \frac{1}{2n} \sum \limits_{i=1}^{n} ( f_{w,b}(x_i) - \hat{y_i})$$
(여기서 2n으로 나누는 것은 Gradient 계산을 용이하기 위해 2n으로 나누어준 것입니다 ! 결국 Loss Function의 최소화를 목표로 하기 때문에 값의 크기는 상관이 없거든요)
이제 Gradient Descent 적용하면 아래와 같습니다
$$
\begin{aligned}
&w_{k+1} = w_k - \eta \frac{\partial}{\partial w} L(w,b)\\
&\frac{\partial}{\partial w} L(w,b) = \frac{1}{n} \sum \limits_{i=1}^{n} ( f_{w,b}(x_i) - \hat{y_i}) x_i\\
\end{aligned}
$$
$$
\begin{aligned}
&b_{k+1} = b_k - \eta \frac{\partial}{\partial b} L(w,b)\\
&\frac{\partial}{\partial b} L(w,b) = \frac{1}{n} \sum \limits_{i=1}^{n} ( f_{w,b}(x_i) - \hat{y_i})\\
\end{aligned}
$$
위의 과정을 수렴(Gradient = 0)할 때까지 반복하면 됩니다
여기서 "학습률이라고 하는 Learning Rate($\eta$)는 무엇인가?" 라는 의문이 생깁니다
Learning Rate(학습률)
학습률이란 ML/DL에서 Loss Function의 Minimum을 향해 이동하면서 각 반복에서 단계 크기를 결정하는 Parameter 입니다
빠른 수렴을 달성하고, Overshooting을 방지하기 위해서 적절한 learning rate의 설정이 필요합니다
Overshooting : Learning rate를 너무 크게 설정할 경우, 최적값을 지나쳐 발산하는 현상
만약 학습률이 너무 작다면 최적값에 도착하긴 하지만 학습 과정에서 너무 많은 시간이 걸릴 것입니다.
만약 학습률이 너무 크다면 최적값에 도달하지 못하고 Overshooting 현상이 발생할 수 있습니다
따라서 적절한 학습률의 설정이 중요합니다 !