해당 게시물은 "혁펜하임의 AI DEEP DIVE"를 수강하고 작성되었습니다.
위 사진과 같은 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이 되지 않도록 하는 역할을 한다.
SGD는 안장점에서 약한 모습을 보이며
모멘텀은 관성을 가지고 좌우로 요동치다가 loss가 감소하는 방향을 발견하고 그게 누적돼서 쭉 빠진다.
RMSprop은 경사가 심한 방향으로 덜 가고 완만한 곳으로 더 가므로 쭉 빠진다. 한번 빠지고 너무 가파르다고 판단되어 속도를 줄인다.
RMSprop이 마지막 순간에 튀는 것이 보일 것이다.
$\epsilon$값이 너무 작아 거의 다 수렴할 때 쯤에 분모가 0에 가까워져 팍 튀는 것이다!
'AI' 카테고리의 다른 글
Backpropagation (0) | 2024.09.03 |
---|---|
MLP를 행렬과 벡터로 나타내기, Non-linear activation의 중요성 (2) | 2024.09.02 |
Momentum vs RMSProp (0) | 2024.09.01 |
파라미터 (parameter) vs 하이퍼파라미터 (hyperparameter) (0) | 2024.09.01 |
mini-batch SGD (0) | 2024.09.01 |