개념 정리/DL | Deep Learning

[DL] Optimizer(최적화)

yeons 2024. 5. 29. 17:00

딥러닝의 학습을 위해 하이퍼파라미터(hyper-parameter)를 잘 결정해야 한다. 그러기 위해서는 loss function을 정의해야하며, 그 loss function을 최적화해야 한다. Loss Function(손실 함수)는 모델의 예측값과 실제 정답 사이의 차이를 수치화하여 모델의 성능을 평가하고 개선 방향을 제시하는 역할을 한다. 우리는 loss function의 최솟값을 찾는 것을 학습 목표로 한다. 이러한 최솟값을 찾아가는 것을 최적화(Optimization)이라고 한다. 그리고 이를 수행하는 알고리즘을 최적화 알고리즘(Optimizer)라고 한다. 

 

Loss Function을 줄여나가면서 학습하는 방법은 어떠한 optimizer를 사용하느냐에 따라서 달라진다. 아래는 다양한 optimizer가 어떻게 최솟값을 찾아가는지를 그래프로 형상화한 것이다. 

 

가장 기본적인 경사하강법(Gradient Descent)는 함수의 기울기를 구하고 기울기의 반대 방향으로 계속 이동시켜 최솟값에 이를 때까지 반복하는 것을 말한다. 하지만 한번 학습할 때마다 모든 데이터셋을 이용해 최솟값을 찾는데 시간이 오래 걸린다는 단점을 지니고 있다. 또한 learning rate(학습률)에 따라 제대로 수렴이 되지 않는 문제가 발생할 수 있고 Local Minima에 빠질 수 있다. 이러한 문제점을 해결하기 위해 Optimizer의 경우 아래와 같이 발전되었다. 각 Optimizer에 대해서 발전된 순서에 따라 소개하고자 한다.

 

1. Stochastic Gradient Descent(확률적 경사하강법)

Stochastic Gradient Descent(확률적 경사하강법)는 모든 데이터셋을 이용해 가중치를 조절하는 Grdient Descent(경사하강법)의 문제점을 해결하고자 제안된 방법이다. 이는 랜덤하게 추출된 데이터에 대해 가중치를 조절하여 속도 측면에서 개선하였다. 하지만 최적 해의 정확도는 낮다는 문제점을 지닌다. 아래 사진은 Gradient Descent(경사하강법)과 Stochastic Gradient Descent(확률적 경사하강법) 각 방법이 최적 해를 찾아가는 과정을 표현한 것이다.

수식은 아래와 같다.

$W_{t+1} \leftarrow W_t - \eta g_{t}$ 

 

$W_t$는 가중치를 뜻하며 $\eta$는 learning rate(학습률)를 의미한다.

 

2. Momentum

Momentum은 관성을 뜻하는 것으로 momentum을 적용한 SGD는 경사하강법에 관성을 더해주는 것이다. 관성의 성질을 적용해 이전의 gradient 방향을 활용해서 조금 더 빨리 최솟값을 찾을 수 있도록 한다. 아래 그림을 보면 기존의 SGD의 경우 지그재그를 많이 하는 것을 확인할 수 있는데 momentum을 활용하면 이전의 방향을 활용해 조금 더 빨리 최적 해에 도달할 수 있다는 장점을 지니고 있다.

수식은 아래와 같다.

$ a_{t+1}\leftarrow \beta a_{t}+g_{t}$

$W_{t+1} \leftarrow W_t - \eta a_{t+1}$

 

$ \beta $는 momentum 계수를 의미하고 $a{t}$는 momentum(운동량) 즉, 속도를 의미하기도 한다. 이를 통해 업데이트되는 방향과 속도를 조절하여, 최적 해에 도달하는 경로를 보다 효율적으로 만든다.

 

3. Nesterov Accelrated Gradient(NAG)

Nesterov Accelrated Gradient(NAG)는 momentum값과 gradient가 더해져서 actual 값을 만들어내는 기존의 방법과 달리 momentum값이 적용된 지점에서 미리 gradient 값을 계산한다. 이를 통해 $a_{t+1}$를 계산하기 전 미리 momentum을 통해 이동할 방향을 예측하고 이를 통해 gradient를 계산한다. 이로써 불필요한 이동을 줄여준다. 아래 그림에서 왼쪽은 기존의 momentum 방법, 오른쪽은 NAG 방법을 말한다.

수식은 아래와 같다.

$a_{t+1} \leftarrow \beta a_t + \nabla L(W_t - \eta \beta a_t)$

$W_{t+1} \leftarrow W_t - \eta a_{t+1}$

 

$\nabla L(W_t - \eta \beta a_t)$ 이 부분이 lookahead gradient step을 의미한다.

 

4. Adagrad

Adagrad는 기존의 경사하강법 방법에 learning rate를 조절하는 변수를 추가한 방법이다. 수식의 경우 아래와 같은데 $G_{t}$를 활용해 많이 변화하지 않은 변수들에 대해서는 learning rate를 크게 하고 많이 변화한 변수들에 대해서는 learning rate를 작게 만든다. 이를 통해 loss를 빠르게 줄일 수 있다. 여기서 $G_{t}$는 gradient의 제곱의 합을 의미하며 하지만 시간이 지남에 따라 계속 커지기 때문에 이 값이 무한대로 간다면 가중치가 업데이트 되지 않는 문제가 생긴다. 이러한 문제점을 해결하기 위해 다음 방법들이 제안되었다.

 

$W_{t+1} = W_t -\frac{\eta }{\sqrt{G_{t}+\epsilon }}g_{t}$

5. Adadelta

Adadelta는 Adagrad에서 $G_{t}$의 값이 계속 커지는 현장을 방지하기 위해서 제안된 방법이다. 기울기의 합을 모두 고려한다면 너무 많기 때문에 현재로부터 기울기의 누적합을 윈도우 크기만큼 고려하는 윈도우 방식을 도입해 $G_{t}$의 값이 커지는 것을 막았다. 지수 가중 평균(exponentially weighted average, EWP) 방법을 활용하여 윈도우 방식을 도입했으며 수식은 아래와 같다. 특징은 learning rate가 없다는 것이다. 그로 인해 바꿀 수 있는 하이퍼파라미터가 많지 않아 잘 쓰이지는 않았다고 한다.

 

$G_{t}=\gamma G_{t-1}+(1-\gamma )g_{t}^{2}$

$W_{t+1} = W_t - \frac{\sqrt{H_{t-1} + \epsilon}}{\sqrt{G_t + \epsilon}}g_{t}$

$H_t = \gamma H_{t-1} + (1 - \gamma) (\Delta W_t)^2$

 

6. RMSprop

RMSprop는 Adagrad에 지수 가중 평균(exponentially weighted average, EWP)을 적용한 방식으로 수식은 아래와 같다.

 

$G_{t}=\gamma G_{t-1}+(1-\gamma )g_{t}^{2}$

$W_{t+1} = W_t - \frac{\eta }{\sqrt{G_t + \epsilon}}g_{t}$

 

7. Adam

Adam는 딥러닝에서 가장 많이 사용되는 최적화 기법으로 Momentum과 RMSprop을 결합한 방법이다. $m_{t}$와 $v_{t}$는 각각 Momentum과 RMSprop에서 사용한 수식과 동일하며 $\beta$는 지수 이동 평균(exponentially weighted average, EWP)의 하이퍼파라미터이다. 

 

$m_{t}=\beta _{1}m_{t-1}+(1-\beta _{1})g_{t}$

$v_{t}=\beta _{2}v_{t-1}+(1-\beta _{2})g_{t}^{2}$

$W_{t+1}=W_{t}-\frac{\eta }{\sqrt{v_{t}+\epsilon }}\frac{\sqrt{1-\beta _{2}^{t}}}{1-\beta_{1}^{t}}m_{t}$

 

 

 


 

Reference