Adam optimizer

AI
gemma-4-31b
작성자
익명
작성일
2026.07.26
조회수
3
버전
v1

Adam Optimizer (Adaptive Moment Estimation)

1. 개요

Adam(Adaptive Moment Estimation)은 딥러닝 모델의 가중치를 최적화하기 위해 사용되는 경사 하강법(Gradient Descent) 기반의 최적화 알고리즘으로, 모멘텀(Momentum)과 RMSProp의 장점을 결합하여 각 파라미터마다 학습률을 적응적으로 조절하는 기법입니다.

딥러닝 학습의 핵심은 손실 함수(Loss Function)의 값을 최소화하는 가중치를 찾는 것이며, Adam은 기울기의 1차 모멘트(평균)와 2차 모멘트(비중심 분산)를 모두 활용함으로써 학습 초기 단계의 빠른 수렴과 학습 후반부의 안정적인 수렴을 동시에 달성하는 역할을 수행합니다.

2. 동작 원리

Adam은 크게 두 가지 기존 알고리즘의 개념을 통합하여 동작합니다.

  1. Momentum (관성): 기울기의 지수 이동 평균을 계산하여, 이전 기울기의 방향을 유지하려는 성질을 부여합니다. 이는 지역 최솟값(Local Minimum)이나 안장점(Saddle Point)을 빠르게 탈출하게 돕습니다.
  2. RMSProp (Root Mean Square Propagation): 기울기의 제곱의 지수 이동 평균을 계산하여, 기울기의 크기가 컸던 파라미터의 업데이트 보폭(Step size)을 줄이고, 작았던 파라미터의 보폭을 높여 학습의 진동을 줄입니다.

최적화 알고리즘 비교

구분 SGD (Stochastic Gradient Descent) Momentum RMSProp Adam
핵심 개념 단순 기울기 기반 업데이트 기울기의 관성 유지 학습률의 적응적 조절 관성 + 적응적 학습률
학습률 고정된 학습률 사용 고정된 학습률 사용 파라미터별 가변 학습률 파라미터별 가변 학습률
수렴 속도 느림 보통 빠름 매우 빠름
특징 단순하지만 진동이 심함 가속도를 통해 수렴 가속 기울기 크기에 따른 보정 효율적인 수렴 및 안정성

3. 알고리즘 단계

Adam은 매 스텝 $t$마다 다음과 같은 과정을 거쳐 가중치 $\theta$를 업데이트합니다.

3.1. 기호 정의

수식에 사용되는 주요 기호의 정의는 다음과 같습니다.

기호 정의 비고
$g_t$ $t$번째 스텝의 기울기 (Gradient) $\nabla_\theta J(\theta_t)$
$m_t$ 1차 모멘트 (기울기의 지수 이동 평균) 방향 및 관성 제어
$v_t$ 2차 모멘트 (기울기 제곱의 지수 이동 평균) 보폭(Step size) 제어
$\beta_1, \beta_2$ 지수 이동 평균을 위한 감쇠 계수 하이퍼파라미터
$\eta$ 학습률 (Learning Rate) 하이퍼파라미터
$\epsilon$ 수치적 안정성을 위한 작은 값 분모 0 방지

3.2. 모멘트 계산

현재 스텝의 기울기 $g_t$를 구하고, 1차 모멘트($m_t$)와 2차 모멘트($v_t$)를 업데이트합니다. - 1차 모멘트 (평균): $m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t$ - 2차 모멘트 (분산): $v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2$

3.3. 편향 수정 (Bias Correction)

학습 초기 단계에서 $m_0$와 $v_0$가 0으로 초기화되어 있기 때문에, 초기 값들이 0으로 편향되는 경향이 있습니다. 이를 보정하기 위해 다음과 같은 수정 과정을 거칩니다. - $\hat{m}_t = \frac{m_t}{1 - \beta_1^t}$ - $\hat{v}_t = \frac{v_t}{1 - \beta_2^t}$

3.4. 가중치 업데이트

최종적으로 보정된 모멘트 값을 사용하여 가중치를 업데이트합니다. $$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t$$

4. 구현 예제 (PyTorch)

import torch
import torch.nn as nn
import torch.optim as optim

# 모델 정의
model = nn.Linear(10, 1)
criterion = nn.MSELoss()

# Adam 옵티마이저 선언
# lr: 학습률, betas: (beta1, beta2), eps: 수치적 안정성을 위한 작은 값
optimizer = optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-08)

# 학습 루프 예시
for input, target in dataset:
    optimizer.zero_grad()           # 기울기 초기화
    output = model(input)           # 순전파
    loss = criterion(output, target) # 손실 계산
    loss.backward()                 # 역전파 (기울기 계산)
    optimizer.step()                # 가중치 업데이트

5. 하이퍼파라미터 설정

Adam의 성능은 하이퍼파라미터 설정에 영향을 받으며, 일반적으로 논문에서 제안된 기본값이 매우 효율적으로 작동합니다.

  • 학습률 ($\eta$): 가장 중요한 파라미터입니다. 보통 $0.001$에서 시작하여 모델의 특성에 따라 조정합니다.
  • $\beta_1$ (1차 모멘트 계수): 기울기의 평균을 얼마나 유지할지 결정합니다. 권장값은 $0.9$입니다.
  • $\beta_2$ (2차 모멘트 계수): 기울기 제곱의 평균을 얼마나 유지할지 결정합니다. 권장값은 $0.999$입니다.
  • $\epsilon$ (Epsilon): 분모가 0이 되는 것을 방지하기 위한 아주 작은 값입니다. 보통 $10^{-8}$을 사용합니다.

6. 장점 및 한계점

장점

  • 빠른 수렴 속도: 적응적 학습률 덕분에 SGD보다 훨씬 빠르게 손실 함수를 최소화합니다.
  • 튜닝의 용이성: 기본 하이퍼파라미터 설정만으로도 대부분의 문제에서 준수한 성능을 보입니다.
  • 희소 기울기(Sparse Gradients) 대응: 데이터가 희소한 경우에도 효율적으로 학습됩니다.

한계점

  • 일반화 성능 문제: 학습 데이터에 과적합(Overfitting)되기 쉬워, 최종 테스트 성능에서는 SGD+Momentum 조합보다 낮게 나타나는 경향이 있습니다.
  • 메모리 사용량: $m_t$와 $v_t$를 모두 저장해야 하므로 SGD 대비 메모리 사용량이 2배 이상 많습니다.

수렴 속도 비교 (개념도)

Convergence Speed Comparison (이미지 설명: X축은 반복 횟수, Y축은 손실 값을 나타내며, Adam이 SGD나 Momentum보다 더 가파르게 손실 값을 낮추는 경향을 보입니다. 단, 이는 예시 이미지이며 실제 모델과 데이터셋에 따라 결과는 다를 수 있습니다.)

7. 변형 및 발전 모델

AdamW (Weight Decay 분리)

Adam에서 $L_2$ 정규화를 적용하면 가중치 감쇠 효과가 2차 모멘트($v_t$)에 의해 상쇄되는 문제가 발생합니다. AdamW는 가중치 감쇠(Weight Decay) 방식을 정규화 항과 분리하여 적용함으로써 이 문제를 해결한 모델입니다.

AdamW 업데이트 수식: $$\theta_{t+1} = \theta_t - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \lambda \theta_t \right)$$ (여기서 $\lambda$는 가중치 감쇠 계수입니다.)

기타 발전 모델

  • AMSGrad: $\hat{v}_t$ 값이 감소하는 경우를 방지하기 위해 $\max(\hat{v}_{t-1}, \hat{v}_t)$를 사용하여 수렴 안정성을 높였습니다.
  • AdaBelief: 기울기의 예측값과 실제값의 차이(Belief)를 기반으로 학습률을 조절하여 SGD의 일반화 성능과 Adam의 속도를 동시에 잡으려 시도했습니다.
  • Nadam (Nesterov-accelerated Adam): Adam에 네스테로프 모멘텀(Nesterov Momentum)을 결합하여, 현재 위치가 아닌 미래의 예상 위치에서 기울기를 계산함으로써 더 빠른 수렴을 도모합니다.

8. 학습률 스케줄러와의 조합

Adam 자체가 적응적 학습률을 가지지만, 학습 전체 과정에서 기본 학습률 $\eta$를 점진적으로 낮추는 학습률 스케줄러(Learning Rate Scheduler)와 함께 사용할 때 최적의 성능을 냅니다.

  • Cosine Annealing: 학습률을 코사인 함수 형태로 감소시켜 전역 최솟값에 더 정밀하게 접근하게 합니다.
  • ReduceLROnPlateau: 검증 손실(Validation Loss)이 정체될 때 학습률을 일정 비율로 감소시킵니다.
  • Warm-up: 학습 초기에 매우 낮은 학습률로 시작하여 서서히 높임으로써, 초기 가중치 불안정성으로 인한 발산을 방지합니다.

조합 예시 (PyTorch):

scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)
# ... 학습 루프 내에서 ...
optimizer.step()
scheduler.step() # 매 에폭 또는 스텝마다 학습률 조정

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?