AI

Adam (Adaptive Moment Estimation)

pullwall 2024. 9. 2. 20:47
728x90
해당 게시물은 "혁펜하임의 AI DEEP DIVE"를 수강하고 작성되었습니다.

image from original paper

 

위 사진과 같은 Adam의 알고리즘에서 마지막 줄만 보자.

 

기존의 update 방식은 아래와 같은 수식으로 이루어졌다.

  • $ \begin{bmatrix} a_{k+1} \\ b_{k+1} \end{bmatrix} = \begin{bmatrix} a_k \\ b_k \end{bmatrix} - \alpha g$

위 수식의 형태는 Adam 알고리즘의 마지막 부분과 동일하다.

 

$m_t$는 모멘트의 개념을 반영한 것이며 $v_t$는 RMS norm의 개념을 반영한 것이다.

 

$m_t=\beta_1 m_{t-1}+(1-\beta_1)g_t$ 에서 $beta=\frac{1}{2}$라고 한다면

 

첫 번째 step에서 $m_1=\frac{1}{2}m_0+\frac{1}{2}g_1=\frac{1}{2}g_1$

 

그 다음 step에서 $m_2= \frac{1}{2}m_1+\frac{1}{2}g_2=\frac{1}{4}g_1+\frac{1}{2}g_2$

 

그 다음 step에서 $m_3= \frac{1}{2}m_2+\frac{1}{2}g_3=\frac{1}{8}g_1+\frac{1}{4}g_2+ \frac{1}{2}g_3$

 

이렇게 현재의 값을 많이 반영하게끔 하고 과거의 값을 점점 잊게 gradient를 누적함으로써 관성을 부여한다. (모멘텀)

 

 

$v$는 $m$과 식이 유사한데, 제곱한다는 차이점이 있다.

 

따라서 크기를 누적해서 보여준다는 의미가 있다. (작은건 작게 큰건 크게)

 

 

$\epsilon $은 매우 작은 양수이다. 해당 상수는 $v_t$가 아무리 작아도, 좀 과장해서 0이 된다고 하더라도 수식의 분모가 0이 되지 않도록 하는 역할을 한다.

 

https://www.analyticsvidhya.com/blog/2021/10/a-comprehensive-guide-on-deep-learning-optimizers/

 

SGD는 안장점에서 약한 모습을 보이며

 

모멘텀은 관성을 가지고 좌우로 요동치다가 loss가 감소하는 방향을 발견하고 그게 누적돼서 쭉 빠진다.

 

RMSprop은 경사가 심한 방향으로 덜 가고 완만한 곳으로 더 가므로 쭉 빠진다. 한번 빠지고 너무 가파르다고 판단되어 속도를 줄인다.

 

 

https://www.analyticsvidhya.com/blog/2021/10/a-comprehensive-guide-on-deep-learning-optimizers/

 

RMSprop이 마지막 순간에 튀는 것이 보일 것이다.

 

$\epsilon$값이 너무 작아 거의 다 수렴할 때 쯤에 분모가 0에 가까워져 팍 튀는 것이다!

 

 

 

728x90