Loading [MathJax]/jax/element/mml/optable/GreekAndCoptic.js

Learn

[머신러닝] OptimizerSGD+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. AdaGrad2011는 각 매개변수에 대해 학습률을 적응적으로 조정합니다. 자주 업데이트되는 매개변수는 학습률이 낮아지고, 덜 자주 업데이트되는 매개변수는 학습률이 높아집니다. 1. θt+1=θtηGt+ϵgt
    • θt는 현재 매개변수 벡터
    • η는 초기 학습률
    • Gt,Gt,Gt는 이전 기울기의 제곱합을 대각 성분으로 갖는 대각 행렬 → 크게 업데이트 되면 분모에 있기에 학습률이 작아지는 효과를 얻는다.
    • ϵ는 분모가 0이 되는 것을 방지하기 위한 작은 상수
    • gt,gt,gt는 현재 기울기 벡터
    • 는 요소별 곱셈을 나타냅니다.
    1. Gt=ti=1gigi
    장점:
    1. 적응적 학습률: 각 매개변수마다 학습률이 다르게 적용되어, 빈번하게 업데이트되는 매개변수는 학습률이 줄어들고, 드물게 업데이트되는 매개변수는 학습률이 유지되거나 높아집니다. 이는 희소한 데이터나 특징이 있는 문제에 효과적입니다.
    2. 자동 학습률 감소: 학습 과정에서 학습률이 자동으로 감소하여, 큰 초기 학습률로 시작해도 안정적인 수렴이 가능합니다.
    단점:
    1. 학습률의 급격한 감소: 기울기의 제곱합이 계속해서 누적되므로, 시간이 지남에 따라 학습률이 너무 작아질 수 있습니다. 이로 인해 학습이 너무 느려지거나 멈출 수 있습니다.
    2. 메모리 사용량 증가: 각 매개변수에 대해 기울기의 제곱합을 저장해야 하므로, 매개변수의 수가 많을 경우 메모리 사용량이 증가할 수 있습니다.
  3. RMSProp RootMeanSquarePropagation는 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_tm_t = \beta_1^t m_0 + (1 - \beta_1) \sum_{i=1}^{t} \beta_1^{t-i} g_im_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