본문 바로가기

부스트캠프 AI Tech 3기/이론 : U-stage

[Day13] DL Basic 3. Optimization -2 : Optimizers

Optimizers

1. Gradient Descent

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

  • $g_{t}$ = gradient
  • $\eta$ = step size = learning rate

2. Momentum

관성

흐르던 gradient 방향을 좀 더 이어갈 수 있도록 유지해준다.

그래서 gradient가 너무 자주 방향이 바뀌는 것을 방지할 수 있다.

 

현재의  gradient를 계산해서 그 다음 학습 때 이 gradient 정보를 전달한다.

그래서 batch가 흐르던 방향의 gradient 정보를 활용할 수 있다.

 

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

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

  • $\beta$ = momentum
  • $g_{t}$ = gradient
  • $a_{t+1}$ = accumulation

단점은 수렴해야할 때 그 전 gradient의 영향을 받아서 local minimum으로 수렴하지 못하는 경우가 있을 수 있다는 것이다.

3. Nesterow Accelerated Gradient : NAG

momentum은 현재의 gradient를 계산해서 update하지만

NAG는 momentum에서 움직이라는대로 움직인 후 그 지점에서 다시 gradient를 계산하여 다음에 활용한다.

$a_{t+1}$가 gradient decent를 한다.

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

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

  • $a_{t+1}$ = accumulation
  • $\nabla\mathcal{L}(W_{t}- \eta\beta a_{t})$ =Lookahead gradient

local minimum에 조금 더 빨리 수렴할 수 있다.

 

4. Adagrad

처음으로 adaptive를 적용한 방법이다.

지금까지 neural network의 파라미터들이 얼마나 변했는지 정도를 보고,

많이 변했던 파라미터는 적게 변화시키고

많이 변하지 않았던 파라미터들은 많이 변화시키게 한다.

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

  • $G_{t}$ = Sum of gradient squares
    지금까지 파라미터들이 얼마나 변해왔는지를 제곱해서 더해놓은 것
    계속해서 커진다.
    분모에 있기 때문에 많이 변한 파라미터는 많이 나누어져서 적게 변하게 된다.
    하지만 계속해서 커지면 파라미터 업데이트가 안 되고 학습이 중단된다.
  • $\epsilon$
    계산적으로 안정시키기 위한 입실론

5. Adadelta

adadelta는 adagrad 의 $G_{t}$가 계속해서 커지는 현상을 막기 위한 방법을 추가했다.

time step에 대해서 window size만큼의 시간에 대해서만 $G_{t}$를 모으면 된다.

 

하지만 $G_{t}$가 파라미터 수만큼 생기게 되어 exponential moving average(지수이동평균)를 이용한다.

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

$$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$$

 

  • $G_{t}$ = EMA of gradient squares
  • $H_{t}$ = EMA of difference squares

adadelta는 learning rate이 없기 때문에 많이 변경할 수 있는 요소들이 없어서 많이 사용하지는 않는 편이다.

 

6. RMSprop

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

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

 

  • $G_{t}$ = EMA of gradient squares
  • $\eta$ = step size

adadelta에서 쓰던 gradient squares의 지수이동평균을 사용하고, 거기에 learning rate을 쓸 수 있게 바꾼 것이다.

 

7. Adam

gradient squares의 지수이동평균과 모멘텀을 같이 활용했다.

gradient 크기가 변함에 따라서 adaptive하게 learning rate을 바꿈과 동시에 이전의 gradient 정보를 참고하는 두 가지 기능을 한 번에 할 수 있다.

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

$$v_{t}=\beta_{2}v_{t-1}+(1-\beta_{2})g^{2}_{t}$$

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

 

  • $m_{t}$ = momentum
  • $v_{t}$ = EMA of gradient squares
  • $\beta_{1}$
    얼마나 momentum을 유지시킬지
  • $\eta$ = learning rate
  • $\epsilon$
    0으로 나누어지는 것을 막고자하는 파라미터