Adam 옵티마이저

IT 위키

Adam 옵티마이저는 "Adaptive Moment Estimation"의 약자로, 확률적 경사 하강법(SGD)에 기반하면서 각 파라미터마다 적응적으로 학습률을 조절하는 딥러닝 최적화 알고리즘이다.

개요[편집 | 원본 편집]

Adam은 2014년 Diederik P. Kingma와 Jimmy Ba가 제안한 알고리즘으로, 모멘텀(Momentum) 기법과 RMSProp 알고리즘의 장점을 결합한 형태다. 기울기의 1차 모멘트(평균)와 2차 모멘트(분산)를 추정하여 파라미터별로 학습률을 조정함으로써 빠르고 안정적인 학습을 가능하게 한다. 희소한(sparse) 그래디언트나 노이즈가 많은 문제에도 잘 작동하며, 대부분의 딥러닝 프레임워크에서 기본 옵티마이저로 제공된다.

동작 원리 및 수식[편집 | 원본 편집]

Adam은 다음과 같은 순서로 파라미터를 갱신한다:

  1. 현재 시점의 그래디언트를 g_t 라고 할 때,
  2. 1차 모멘트(기울기의 지수이동 평균)를 다음과 같이 계산한다:
    • m_t = 베타1 × m_{t-1} + (1 - 베타1) × g_t
  3. 2차 모멘트(기울기 제곱의 지수이동 평균)를 계산한다:
    • v_t = 베타2 × v_{t-1} + (1 - 베타2) × (g_t)^2
  4. 위 두 모멘트에 편향 보정을 적용한다:
    • m_hat = m_t ÷ (1 - 베타1의 t제곱)
    • v_hat = v_t ÷ (1 - 베타2의 t제곱)
  5. 최종적으로 파라미터를 다음과 같이 업데이트한다:
    • 파라미터 = 파라미터 - 학습률 × m_hat ÷ (루트(v_hat) + epsilon)

여기서

  • 베타1: 1차 모멘트의 감쇠 계수 (기본값 0.9)
  • 베타2: 2차 모멘트의 감쇠 계수 (기본값 0.999)
  • epsilon: 0으로 나누는 것을 방지하기 위한 작은 값 (기본값 1e-8)
  • 학습률: 일반적으로 0.001

장점[편집 | 원본 편집]

  • 각 파라미터에 대해 학습률을 자동으로 조절하므로 튜닝이 간편하다.
  • 모멘텀과 RMSProp의 장점을 모두 가지며 빠른 수렴 속도를 보인다.
  • 노이즈가 많거나, 희소한 데이터셋에서도 안정적으로 동작한다.
  • 학습 초기 단계에서 편향 보정을 통해 보다 정확한 업데이트가 가능하다.

단점[편집 | 원본 편집]

  • 일반화 성능 측면에서 SGD + 모멘텀보다 떨어지는 경우가 있다.
  • 복잡한 이론적 분석에서는 수렴이 보장되지 않는다는 연구도 있다.
  • 하이퍼파라미터 설정(특히 학습률과 베타 값)에 민감할 수 있다.

개선 및 변형 알고리즘[편집 | 원본 편집]

AdamW[편집 | 원본 편집]

AdamW는 2017년 Loshchilov와 Hutter에 의해 제안된 변형 알고리즘으로, Adam의 주요 한계를 보완하기 위해 개발되었다. 기존 Adam에서는 weight decay(가중치 감쇠)를 손실 함수에 L2 정규화 항으로 추가하는 방식으로 적용했으나, 이는 Adam의 적응적 학습률 계산 과정과 상호작용하여 의도하지 않은 영향을 줄 수 있다. AdamW는 weight decay를 그래디언트 업데이트에서 분리하여, 파라미터 갱신 이후 별도로 다음과 같이 적용한다:

    • 파라미터 = 파라미터 - 학습률 × 감쇠 계수 × 파라미터

이 방식은 정규화 효과와 학습률 스케일링 메커니즘을 분리함으로써 일반화 성능을 향상시키고, 하이퍼파라미터 간 간섭을 줄여준다.

AdaBound[편집 | 원본 편집]

AdaBound는 학습 초반에는 Adam처럼 작동하지만, 학습 후반에는 SGD로 전환되는 방식으로 설계되었다. 학습률의 상한과 하한을 동적으로 조절하여 안정성을 높이며, Adam의 빠른 수렴과 SGD의 좋은 일반화 능력을 모두 취하려는 목적이 있다.

RAdam[편집 | 원본 편집]

RAdam(Rectified Adam)은 학습 초반의 불안정성을 완화하기 위해 분산 추정값의 편차를 보정한 방식이다. 편향 보정 과정에서 분산의 안정성이 확보되지 않은 시점에는 학습률 스케일링을 제한하여 과도한 파라미터 업데이트를 방지한다.

기타 변형[편집 | 원본 편집]

그 외에도 Yogi, QHAdam, Adamax 등 Adam을 변형한 다양한 옵티마이저가 제안되었으며, 각각 특정 조건이나 모델 구조에 적합한 특성을 지닌다.

구현 및 프레임워크 지원[편집 | 원본 편집]

Adam은 대부분의 딥러닝 프레임워크에서 기본으로 지원된다:

  • PyTorch: `torch.optim.Adam`
  • TensorFlow/Keras: `tf.keras.optimizers.Adam`
  • JAX, MXNet 등 다양한 라이브러리에서 사용 가능

예시 코드 (PyTorch):

from torch.optim import Adam

optimizer = Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-8)

응용[편집 | 원본 편집]

Adam은 다양한 딥러닝 분야에서 광범위하게 사용된다:

  • 자연어 처리 모델 (예: BERT, GPT 등)
  • 컴퓨터 비전 모델 (예: CNN, Vision Transformer)
  • 강화 학습 에이전트 학습
  • 생성 모델(GAN, VAE 등)의 학습

같이 보기[편집 | 원본 편집]

참고 문헌[편집 | 원본 편집]

  • Diederik P. Kingma, Jimmy Ba. "Adam: A Method for Stochastic Optimization." arXiv preprint arXiv:1412.6980, 2014.
  • Ilya Loshchilov, Frank Hutter. "Decoupled Weight Decay Regularization." arXiv preprint arXiv:1711.05101, 2017.
  • Liu, L., et al. "On the Variance of the Adaptive Learning Rate and Beyond." arXiv preprint arXiv:1908.03265 (RAdam), 2019.
  • Luo, L., et al. "Adaptive Gradient Methods with Dynamic Bound of Learning Rate." arXiv preprint arXiv:1902.09843 (AdaBound), 2019.

각주[편집 | 원본 편집]