본문 바로가기

deeplearning

Optimization - Momentum, RMSProp, Adam

최근 예전에 공부했던 딥러닝 optimization 메커니즘이 조금씩 헷갈리기 시작한다.

그래서 헷갈리던 부분만 조금 정리를 해보려한다.

 

1. Exponentially Weighted Averages

 

 

 

Theta(t) : t 시점의 값

v(t) : Exponentially Weighted Average

 

지금까지의 값들(여기서는 gradient)의 mean을 구하되 Beta를 1보다 작게(주로 0.9와 1 사이 값) 주어 최근 gradient의 영향을 더 많이 반영하는 mean을 구한다.

 

이를 알아야 뒤에 나오는 Optimization을 이해할 수 있다.

 

 

 

 

 

 

 

 

2. Momentum 

 

 

dW : Loss function에서 W에 대해 편미분한 값

vdw : gradient의 exponentially weighted average. 최초 값은 0으로 준다.

alpha : learnning weight

 

v의 영향으로 인해 weight는 지금까지의 변화 방향, 즉 감소 혹은 증가하던 방향으로 더 많이 변화하게 된다. 마치 관성이 붙은 것처럼 말이다.

 

따라서 SGD가 oscillation현상을 겪고 있을 때 Momentum을 이용하면 도움이 될 수 있다.

 

 

 

 

 

 

 

 

3. RMSProp

 

 

 

RMSProp은 Momentum과 달리 gradient에 대한 element-wise squaring을 적용하여 Sdw를 구한다. 그리고 weight를 업데이트할 때 이에 입실론을 더해(0으로 나눠지는 것을 방지하기 위함) gradient에서 나눈다.

 

RMSProp을 이용해 특정 Weight가 지금까지 많이 변화해왔다면 조금만 이동하게 만들고, 지금까지 많이 변화하지 않은 변수들은 많이 이동하도록 할 수 있다.

 

자주 등장하거나 변화를 많이 한 weight들의 경우 optimum에 가까이 있을 확률이 높기 때문에 작은 크기로 이동하며 세밀하게 조정한다. 그리고 조금씩 가끔 수정된 weight은 optimum값에 도달하기 위해 많이 이동해야할 확률이 높기 때문에 크게 수정하는 방식이다.

 

 

 

 

 

 

 

 

Adam

 

 

 

RMSProp과 Momentum 방식을 합친 알고리즘이다. 

 

한가지 특별한 점은 0으로 초기화하고 구해진 vdw와 sdw로 인해, 학습의 초반부에 두 값이 0에 가깝게 bias되어있을 것이라 판단해, 이를 unbiased하게 만들어주는 작업을 거친다는 점이다. 위의 식에서 corrected라고 붙은 식은 이러한 과정을 담고있다.