Learn

[머신러닝] Optimizer(SGD+M, AdaGrad, RMSProp, Adam, AdamW)

부루기 2024. 6. 12. 20:00
728x90

서론

  1. 학습하는 방법에 대해서 앞으로 계속 사용하게 될 것이기에 이번 기회에 정리를 해두려고 한다.
  2. 들어가기에 앞서 Optimizer는 목표를 최대화, 최소화하는 해를 찾는 과정이다.
  3. 이 포스트는 최소 SGD와 그를 받침하는 개념에 대해 알고 있다고 가정하고 작성하겠습니다.
  4. SGD w, Adagrad, RMSProp, Adam, AdamW 에 대해서 알아볼 예정이고 이들은 합쳐지거나 부족한 점을 채운 것들이 많아서 앞의 몇개를 습득하면 뒤의 내용은 그렇게 어렵지 않다.
  5. 특히 이름만 봐도 알 수 있는 것들이 많다.

본론

  1. 다양한 종류가 있는데, 그 중에서 가장 기초가 되는 Stochastic gradient descent + momentum은 이 글의 포스트에도 나와있으므로 짧게 설명하자면 기존의 값을 이용해서 좀 더 빠르게 해를 찾도록 하는 것이다.
  2. AdaGrad(2011)는 각 매개변수에 대해 학습률을 적응적으로 조정합니다. 자주 업데이트되는 매개변수는 학습률이 낮아지고, 덜 자주 업데이트되는 매개변수는 학습률이 높아집니다. 1. $\theta_{t+1}=\theta_{t}-\frac{\eta}{\sqrt{G_t+\epsilon}}\odot g_t$
    • $\theta_t$는 현재 매개변수 벡터
    • $\eta$는 초기 학습률
    • $Gt,G_t,Gt$는 이전 기울기의 제곱합을 대각 성분으로 갖는 대각 행렬 → 크게 업데이트 되면 분모에 있기에 학습률이 작아지는 효과를 얻는다.
    • $\epsilon$는 분모가 0이 되는 것을 방지하기 위한 작은 상수
    • $gt,g_t,gt$는 현재 기울기 벡터
    • $\odot$는 요소별 곱셈을 나타냅니다.
    1. $G_t​=∑_{i=1}^t​gi​⊙gi​$
    장점:
    1. 적응적 학습률: 각 매개변수마다 학습률이 다르게 적용되어, 빈번하게 업데이트되는 매개변수는 학습률이 줄어들고, 드물게 업데이트되는 매개변수는 학습률이 유지되거나 높아집니다. 이는 희소한 데이터나 특징이 있는 문제에 효과적입니다.
    2. 자동 학습률 감소: 학습 과정에서 학습률이 자동으로 감소하여, 큰 초기 학습률로 시작해도 안정적인 수렴이 가능합니다.
    단점:
    1. 학습률의 급격한 감소: 기울기의 제곱합이 계속해서 누적되므로, 시간이 지남에 따라 학습률이 너무 작아질 수 있습니다. 이로 인해 학습이 너무 느려지거나 멈출 수 있습니다.
    2. 메모리 사용량 증가: 각 매개변수에 대해 기울기의 제곱합을 저장해야 하므로, 매개변수의 수가 많을 경우 메모리 사용량이 증가할 수 있습니다.
  3. RMSProp (Root Mean Square Propagation)는 AdaGrad의 변형으로, 단점 중 기울기의 제곱합이 더해지는 문제로 학습률이 작아지기에 이를 해결하는 방법이다.
    1. $θ_{t+1}​=θ_t​−\frac{\eta}{\sqrt{E[g^2]t​+ϵ​​}}g_t$ → 여기서 $G_t$가 변경됨, 쉽게말하면 매개변수 기울기 값의 평균을 낸거다. 그럼 그 평균을 그냥 내는가?
      • $E[g^2]_t$는 시점 t에서의 기울기 제곱의 이동 평균
      • $\gamma$는 이동 평균의 가중치 (일반적으로 0.9로 설정)
      • $g_t$는 시점 t에서의 기울기 벡터
    2. $E[g^2]t​=γE[g^2]{t−1}​+(1−γ)g_t^2​$ → 수식을 보면 이전의 평균값과 현재의 값을 가중치를 통해서 구하게 된다.
  4. Adam (Adaptive Moment Estimation) → Adam은 RMSProp과 모멘텀을 결합한 최적화 알고리즘입니다. Adam 알고리즘은 기울기의 1차 모멘텀 추정치와 2차 모멘텀 추정치를 모두 사용하여 학습률을 적응적으로 조정하고, 안정적인 수렴을 도모합니다.
    1. 기울기 계산: $gt=∇_θJ(θ_t)$
    2. 1차 모멘텀 업데이트:
    3. $m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t$
    4. 2차 모멘텀 업데이트:
      • 1차 모멘텀과 2차 모멘텀이 뭔가요? → 기울기의 위의 제곱에 따른 명칭
        • 1차 모멘텀은 기울기의(1승) 이동 평균을 나타내며, 이는 기울기의 추정치라고 할 수 있습니다. 일반적으로 이는 모멘텀을 추가하여 기울기의 노이즈를 줄이고 더 안정적인 업데이트를 가능하게 합니다.
        • 2차 모멘텀은 기울기의 제곱(2승) 평균을 나타내며, 이는 기울기의 분산을 추정합니다. 이는 학습률을 조정하는 데 사용되며, 기울기의 크기에 따라 학습률을 적응적으로 변화시킵니다.
      1. $v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2$
    5. 바이어스 보정:
      • 왜 이러한 보정이 필요한가?1차 모멘텀 추정치의 바이어스 보정$m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t$$m_t = \beta_1^t m_0 + (1 - \beta_1) \sum_{i=1}^{t} \beta_1^{t-i} g_i$$m_t = (1 - \beta_1) \sum_{i=1}^{t} \beta_1^{t-i} g_i$이를 보정하기 위해 $\beta_1^t$로 나누어주면, 바이어스가 제거된 $\hat{m}_t$를 얻을 수 있습니다:
      • $\hat{m}_t = \frac{m_t}{1 - \beta_1^t}$
      • 이 식은 기울기 $g_i$의 지수 가중 이동 평균입니다. 하지만 초기 단계에서는 $\beta_1^t$가 매우 작기 때문에,$m_t$의 값이 실제보다 작게 추정됩니다.
      • 여기서 m_0 = m이므로,
      • 이 식을 t에 대해 전개해보면,
      • Adam 알고리즘에서 1차 모멘텀 $m_t$는 다음과 같이 계산됩니다:
      • 바이어스 보정의 이유를 수학적으로 이해해 보겠습니다.
      $\hat m^t=\frac{m_t}{1−β_1^t}$
    6. $\hat{v}_t = \frac{v_t}{1 - \beta_2^t}$
    7. 매개변수 업데이트:
    8. $\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t$
  5. AdamW → Adam에서 가중치 감쇠를 분리적용된 내용입니다.
    1. Adam의 가중치 감쇠
      1. $θ_{t+1}​=θ_t​−η(\frac{\hat m^t}{\sqrt{v^t​​+ϵ}}​​+λθ_t​)$
      2. 가중치가 특정하게 커지는 것을 방지하도록 하는 것을 가중치 감쇠라고 한다. AdamW는 이를 분리해서 순서를 준 것이다.
      3. $\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t$
      4. $θ_{t+1}​=θ_{t+1}​−ηλθ_t​$ → 이렇게 순서를 줘서 사용함으로써 정규화가 순수하게 정규화로만 작동하게 되어 최적화 과정에 영향을 주지 않습니다.

결론

  1. SGD W가 기초적인 Optimizer입니다.
  2. 여기서 각 매개변수 별로 가중치를 줘서 하고 싶습니다. → Adagrad
  3. 그런데 학습률이 너무 작아지니 가중치를 평균을 내서 씁시다 → RMSProp
  4. RMSProp에서 Momentum을 합쳐봅시다 → Adam
  5. 최적화 식을 좀 분리해서 목적에 맞게 분리합시다 → AdamW
728x90