본문 바로가기

머신러닝/오류 모음집

Adam Optimizer

Adam Optimizer

원래의 Gradient descent 는 항상 learning rate이 같음(step, 변수에 상관 없이)

이를 개선한 것이 Ada, RMSProp optimizer이다.

이 두개의 장점을 구현한 것이 Adam optimizer이다.

초기 설정

Objective function : $f(\theta)$

​ $f(\theta)$ 를 최소화 시키는 것이 목적.

gradient : $g_t = \nabla_{\theta} f(\theta)$

$$\beta_1 , \beta_2 $$ : Exponential decay rates for the moment estimates

$m_t , v_t $ : momentum, 이전에 사용한 stepsize를 기억하는 역할, 물리의 관성과 비슷한 느낌이라고 한다.

  • $m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t $

    • 이전의 모멘텀과 현재의 gradient를 $\beta_1 : 1- \beta_1 $ 로 내분함
    • $\beta_1 \approx 1$ , $m_t$ 가 $0$ 근처에서 멈출 수 있음
  • $v_t = \beta_2 v_{t-1} + (1-\beta_1) {g_t}^2 $

    • ${g_t}^2 = g_t \bigodot g_t $ , hadamard product
    • 각 parameter 에 해당하는 gradient들이 제곱으로 누적됨.
    • $\beta_2 \approx 1$, $v_t$ 가 0 근처에 멈출 수 있음

gradient가 많이 변한 방향은, 최적에 가까워졌을 가능성이 크다.

--> 많이 움직였을수록, 조금 움직이게 하자

  • $\hat{m_t} = m_t/(1-{\beta_1}^t) $
  • $\hat{v_t} = v_t/(1-{\beta_2}^t) $
  • $\theta_t = \theta_{t-1} - \alpha \cdot \hat{m_t}/\left( \sqrt{\hat{v_t}} +\epsilon \right)$

- Step size $\Delta_t$ is invariant to the scale of gradients

$g_t = c \cdot g_t $ $\rightarrow$ $m_t = c\cdot m_t,~~ v_t = c^2 \cdot v_t$

​ $\rightarrow$ $\Delta_t = \left( c\cdot \hat{m_t} \right)/\left(\sqrt{c^2\cdot \hat{v_t}}\right) = \hat{m_t}/\sqrt{\hat{v_t}}$


- Adam utilizes initialization bias correction terms
$m_t$와 $v_t$가 0 근처에 머무르는 것을 보정해주고자 하는 스텝.
$v_t = \beta_2 v_{t-1} + (1-\beta_1) {g_t}^2 $

$\rightarrow$ $v_t = (1-\beta_2) \sum_{i=1}^{t} \beta_2 ^{t-i}\cdot g_i ^2$