콘텐츠로 이동

경사 하강법 변형 (Gradient Descent Variants)

난이도: 중급
선수 지식: 미적분 (편미분, 기울기), 선형대수 기초
관련 문서: 학습률 | 손실 함수 | 볼록성 | 선형 모델


개요

경사 하강법(Gradient Descent)은 머신러닝 최적화의 핵심 알고리즘이다. 손실 함수의 기울기(gradient) 반대 방향으로 파라미터를 반복적으로 갱신하여 최소값을 찾는다.

\[\theta_{t+1} = \theta_t - \eta \nabla_\theta L(\theta_t)\]

현대 딥러닝에서는 다양한 변형이 사용되며, 각각의 장단점을 이해하는 것이 중요하다.


핵심 개념

1. 배치 경사 하강법 (Batch / Vanilla GD)

\[\theta_{t+1} = \theta_t - \eta \nabla_\theta L(\theta_t)\]

전체 훈련 데이터를 사용하여 기울기를 계산한다.

장점 단점
안정적 수렴 대규모 데이터에 매우 느림
진정한 기울기 방향 지역 최소에 갇힐 수 있음
결정론적 메모리에 전체 데이터 필요
  • 단계당 복잡도: \(O(n)\) (\(n\) = 데이터 크기)

2. 확률적 경사 하강법 (Stochastic GD, SGD)

\[\theta_{t+1} = \theta_t - \eta \nabla_\theta L(\theta_t; x_i, y_i)\]

단일 랜덤 샘플로 기울기를 근사한다.

장점 단점
빠른 업데이트 높은 분산
지역 최소 탈출 가능 (노이즈) 진동하는 수렴
온라인 학습 가능 학습률 감쇠 필요

3. 미니배치 SGD (Mini-batch SGD)

\[\theta_{t+1} = \theta_t - \eta \nabla_\theta L(\theta_t; \mathcal{B})\]

배치 크기 \(B\) (보통 32~256)의 랜덤 부분집합 사용. 실무의 표준.

배치 크기의 영향

배치 크기 분산 수렴 일반화 GPU 활용
작음 (32) 높음 느림 좋음 (넓은 최소) 낮음
큼 (4096+) 낮음 빠름 나쁠 수 있음 (날카로운 최소) 높음

선형 스케일링 규칙

배치 크기를 \(k\)배 하면, 학습률도 \(k\)배: \(\eta' = k \cdot \eta\)


4. 모멘텀 (Momentum)

\[v_t = \gamma v_{t-1} + \eta \nabla_\theta L(\theta_t)$$ $$\theta_{t+1} = \theta_t - v_t\]

보통 \(\gamma = 0.9\)

직관

관성을 가진 공이 언덕을 굴러내리는 것: 일관된 방향으로 가속하고, 진동을 줄인다.

  • 좁은 골짜기(ravine)에서 진동을 줄이고 올바른 방향으로 가속
  • 국소 최소를 넘어갈 수 있는 운동량 축적

5. 네스테로프 가속 기울기 (Nesterov Accelerated Gradient, NAG)

\[v_t = \gamma v_{t-1} + \eta \nabla_\theta L(\theta_t - \gamma v_{t-1})$$ $$\theta_{t+1} = \theta_t - v_t\]

핵심 차이

모멘텀은 현재 위치에서 기울기를 계산하지만, NAG는 모멘텀이 이끄는 미래 위치에서 기울기를 계산한다.

  • "뛰기 전에 살펴보라 (Look before you leap)"
  • 볼록 함수에서 수렴 속도: \(O(1/t^2)\) (vs 일반 GD의 \(O(1/t)\))

6. AdaGrad (Adaptive Gradient)

\[G_t = G_{t-1} + g_t^2 \quad (\text{원소별 누적 제곱 기울기})$$ $$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \cdot g_t\]

핵심 아이디어

각 파라미터마다 학습률을 적응적으로 조절: 빈번하지 않은 특성에는 큰 업데이트.

장점 단점
희소 특성에 좋음 (NLP) 학습률이 단조 감소
파라미터별 적응적 학습률 학습이 너무 일찍 멈출 수 있음

7. RMSProp

AdaGrad의 학습률 소멸 문제를 해결:

\[E[g^2]_t = \rho E[g^2]_{t-1} + (1-\rho)g_t^2 \quad (\text{보통 } \rho = 0.9)$$ $$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t\]

지수 이동 평균(EMA)으로 최근 기울기에 가중치를 둠 --> 학습률이 소멸하지 않음.


8. Adam (Adaptive Moment Estimation)

모멘텀 + RMSProp의 결합:

\[m_t = \beta_1 m_{t-1} + (1-\beta_1)g_t \quad \text{(1차 모멘트 / 평균)}$$ $$v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 \quad \text{(2차 모멘트 / 분산)}\]

편향 보정 (Bias Correction):

\[\hat{m}_t = \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t}\]

업데이트:

\[\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon}\hat{m}_t\]

기본 하이퍼파라미터

\(\beta_1 = 0.9\), \(\beta_2 = 0.999\), \(\epsilon = 10^{-8}\), \(\eta = 0.001\)

왜 편향 보정이 필요한가?

초기에 \(m_0 = 0\), \(v_0 = 0\)으로 시작하므로, 초기 추정치가 0에 편향됨. \(1-\beta^t\) 항이 이를 보정.

주요 변형

변형 핵심 개선 사용처
AdamW 가중치 감쇠를 기울기 업데이트에서 분리 Transformer, 현대 DL
AMSGrad \(\hat{v}_t = \max(\hat{v}_{t-1}, v_t)\)로 단조성 보장 이론적 수렴 보장
NAdam Adam + 네스테로프 모멘텀 일부 NLP
LAMB/LARS 레이어별 적응적 학습률 대규모 배치 학습
AdaFactor 메모리 효율적 Adam 대안 매우 큰 모델

상세 비교표

옵티마이저 적응적 LR 모멘텀 메모리 최적 사용처
SGD 없음 없음 \(O(p)\) 단순, 튜닝 가능 시
SGD+Momentum 없음 있음 \(O(2p)\) 일반적 DL 학습
AdaGrad 있음 없음 \(O(2p)\) 희소 특성
RMSProp 있음 없음 \(O(2p)\) RNN, 비정상 목적함수
Adam 있음 있음 \(O(3p)\) DL 기본 선택
AdamW 있음 있음 \(O(3p)\) Transformer, 현대 DL

(\(p\) = 파라미터 수)

flowchart TD
    A[옵티마이저 선택] --> B{빠른 프로토타이핑?}
    B -->|예| C[Adam / AdamW]
    B -->|아니오| D{최종 성능 최적화?}
    D -->|CV 모델| E[SGD + Momentum<br/>+ 스케줄링]
    D -->|NLP/Transformer| F[AdamW + 코사인 스케줄]
    A --> G{희소 특성?}
    G -->|예| H[AdaGrad 또는 Adam]

9. SGD vs Adam 논쟁

관점 SGD (잘 튜닝) Adam
수렴 속도 느림 빠름
일반화 더 나은 경향 날카로운 최소에 빠질 수 있음
튜닝 난이도 어려움 (LR 스케줄 필수) 쉬움 (기본값도 잘 동작)
실무 추천 CV에서 최종 학습 빠른 프로토타이핑
최근 추세 여전히 많이 사용 AdamW + 코사인 어닐링이 표준 (NLP)

언제 사용하는가

상황 추천 옵티마이저
빠른 프로토타이핑 Adam (기본값)
컴퓨터 비전 최종 학습 SGD + Momentum + 코사인 어닐링
NLP / Transformer AdamW + 워밍업 + 코사인 어닐링
희소 특성 (추천 시스템) AdaGrad 또는 Adam
대규모 배치 분산 학습 LAMB / LARS
메모리 제한 SGD + Momentum

흔한 오해와 함정

1. "Adam은 항상 SGD보다 낫다"

  • 빠르게 수렴하지만, 최종 일반화 성능은 잘 튜닝된 SGD가 나을 수 있다. 특히 이미지 분류에서.

2. "학습률만 잘 설정하면 옵티마이저는 상관없다"

  • 옵티마이저마다 적합한 학습률 범위가 다르고, 스케줄링 전략도 달라야 한다.

3. "Adam의 기본 하이퍼파라미터를 바꿀 필요가 없다"

  • 대부분의 경우 잘 동작하지만, 학습률(\(\eta\))은 거의 항상 튜닝이 필요하다.

4. "AdamW와 Adam + L2 정규화는 같다"

  • 다르다. Adam에서 L2 정규화는 적응적 학습률에 의해 왜곡된다. AdamW가 올바른 구현.

다른 주제와의 연결


자주 묻는 면접 질문

  1. Adam에 편향 보정이 필요한 이유는?
  2. 초기에 \(m_0=0, v_0=0\)에서 시작하므로 초기 추정치가 0에 편향. 보정항 \(1/(1-\beta^t)\)가 초기 단계에서 이를 교정.

  3. SGD vs Adam: 어느 것이 더 잘 일반화하는가?

  4. SGD가 더 넓은(flat) 최소에 수렴하는 경향이 있어 일반화가 나을 수 있음. Adam은 빠르지만 날카로운(sharp) 최소에 빠질 수 있음.

  5. AdaGrad가 해결하는 문제와 만드는 문제는?

  6. 해결: 희소 특성에 대한 적응적 학습률. 생성: 누적 제곱 기울기가 단조 증가하여 학습률이 소멸.

  7. 모멘텀을 직관적으로 설명하시오

  8. 관성을 가진 공이 구르는 것. 일관된 방향으로 가속, 진동하는 방향에서는 상쇄. 좁은 골짜기를 효율적으로 통과.

  9. 미니배치 크기가 일반화에 영향을 미치는 이유는?

  10. 작은 배치: 더 많은 노이즈 = 암묵적 정규화, 넓은 최소에 수렴. 큰 배치: 적은 노이즈, 날카로운 최소에 수렴 경향.

코드 예시

import torch
import torch.optim as optim

model = MyModel()

# SGD + Momentum
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9, weight_decay=1e-4)

# Adam
optimizer = optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999))

# AdamW (올바른 weight decay)
optimizer = optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)

# 학습률 스케줄러와 함께 사용
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)

for epoch in range(num_epochs):
    for batch in train_loader:
        optimizer.zero_grad()
        loss = criterion(model(batch.x), batch.y)
        loss.backward()
        optimizer.step()
    scheduler.step()

용어 정리

영어 한국어
Gradient Descent 경사 하강법
Stochastic Gradient Descent 확률적 경사 하강법
Mini-batch 미니배치
Momentum 모멘텀 (운동량)
Learning Rate 학습률
Adaptive Learning Rate 적응적 학습률
Bias Correction 편향 보정
Weight Decay 가중치 감쇠
Convergence 수렴

참고 자료

  • Ruder (2016) - "An Overview of Gradient Descent Optimization Algorithms"
  • Kingma & Ba (2015) - "Adam: A Method for Stochastic Optimization"
  • Loshchilov & Hutter (2019) - "Decoupled Weight Decay Regularization" (AdamW)
  • Duchi, Hazan, Singer (2011) - "Adaptive Subgradient Methods for Online Learning" (AdaGrad)
  • Goodfellow, Bengio, Courville (2016) - Deep Learning (Ch. 8: Optimization)