[Deep Learning] 기초 최적화 방법: Gradient Descent
1. 다변수 함수
여러 개의 변수를 입력으로 받는 함수를 다변수 함수라고 한다.
2. 편미분
편미분은 다변수 x와 y를 입력으로 받는 함수 f를 x로 미분할 경우, 하나의 변수만 남겨 놓고 나머지를 상수 취급하는 미분 방법이다. 이때의 미분 결과로는 벡터를 얻게 된다.
- 함수 f를 x 변수로 미분하는 경우 $$\frac{ \partial f}{ \partial x} = \lim_{h \rightarrow 0} \frac{f(x+h, y) - f(x, y)}{(x+h)-x} $$
3. 스칼리와 벡터의 미분
3. 1. 스칼라를 벡터로 미분 (결과 = gradient 벡터)
$$ \frac{ \partial f}{ \partial x} = \nabla_xf = \begin{bmatrix}\frac{ \partial f}{ \partial x_1}\\\ \vdots \\\frac{ \partial f}{ \partial x_n} \end{bmatrix}$$ $$where$$ $$x \in \mathbb{R}^n$$
3. 2. 스칼라를 행렬로 미분 (결과 = gradient 행렬)
$$\frac{ \partial f}{ \partial X} = \nabla_xf = \begin{bmatrix}\frac{ \partial f}{ \partial x_{1, 1}} & \ldots & \frac{ \partial f}{ \partial x_{1, m}} \\\ \vdots & \ddots & \vdots \\\ \frac{ \partial f}{ \partial x_{n, 1}} & \ldots & \frac{ \partial f}{ \partial x_{n, m}} \end{bmatrix}$$ $$where$$ $$x \in \mathbb{R}^{n \times m}$$
3. 3. 벡터를 스칼라로 미분
$$ \frac{ \partial f}{ \partial x} = \nabla_xf = \begin{bmatrix}\frac{ \partial f_1}{ \partial x} & \ldots & \frac{ \partial f_n}{ \partial x}\end{bmatrix} $$
3. 4. 벡터를 벡터로 미분
$$\frac{ \partial f}{ \partial x} = \nabla_xf = \begin{bmatrix}\frac{ \partial f}{ \partial x_1} \\ \vdots \\ \frac{ \partial f}{ \partial x_n}\end{bmatrix} = \begin{bmatrix}\frac{ \partial f_1}{ \partial x} & \ldots & \frac{ \partial f_m}{ \partial x}\end{bmatrix}$$ $$where$$
$$x \in \mathbb{R}^n, f(x) \in \mathbb{R}^m$$
4. Gradient Descent 1D Case
이 방법은 함수를 x로 미분하여 기울기를 활용해서 점차 최솟값으로 나아가는 방법이다.
위 그래프는 y = g(x)라는 Loss Fuction이다. 기울기의 값, 즉 미분 값이 음수이면 이에 음수와 learning rate를 곱하여 양의 방향으로 나아가고, 미분 값이 양수이면 이에 음수와 learning rate를 곱하여 음의 방향으로 나아가므로 결국 가장 낮은 y 값의 방향으로 나아가게 된다.
제일 낮은 y 값을 가지고 있는 global minima가 목표 지점이다. global minima처럼 양 옆 구간이 모두 현재 y 값보다 높지만, 전체 그래프를 보았을 때 가장 낮은 지점이 아닌 곳을 local minima라고 한다. 이 구간에 빠지지 않도록 learning rate 값을 높이는 경우도 있지만, 실제 딥러닝 파라미터의 크기는 굉장히 크기 때문에 수많은 차원에서 동시에 local minima를 위한 조건이 만족되기 어렵다.
Gradient Descent Equation
$$x \leftarrow x - \eta \frac{dy}{dx} $$ $$where$$ $$y = f(x)$$
위 수식은 아래의 수식과 같다.
$$ \theta \leftarrow \theta - \eta \frac{ \partial L( \theta )}{ \partial L} or \theta - \eta \nabla _ \theta L( \theta )$$
파라미터는 W와 b로 나누어 볼 수 있으므로 아래의 수식도 같은 의미이다.
$$ W \leftarrow W- \eta \frac{ \partial L( \theta )}{ \partial W}$$
$$ b \leftarrow b- \eta \frac{ \partial L( \theta )}{ \partial b}$$
5. Learning Rate in Gradient Descent
파라미터가 업데이트 될 때, gradient의 크기에 영향을 받게 된다. 이때, learning rate가 step-size를 결정한다.
6. Learning Rate에 따른 최적화
- Large LR: Loss가 발산 가능 (Nan 값)
- Small LR: 수렴이 늦음
위의 그림과 같이 learning rate가 너무 클 경우 global minima를 건너 뛰면서 발산할 수도 있고, learning rate가 너무 작을 경우 local minima에 빠질수도 있으며 수렴이 늦어질 수도 있다. 따라서 적절한 learning rate값을 찾는 것이 중요하다.
Learning Rate는 중요한 하이퍼파라미터이다. 하이퍼파라미터는 모델 성능에 영향을 끼치지만, 데이터 학습을 하지 않는 파라미터를 의미한다. 이 값은 실험을 통해서 최적의 값을 찾아야하고 Adam Optimizer를 통해 찾을 수도 있다.