경사 하강법 변형 (Gradient Descent Variants)¶
난이도: 중급
선수 지식: 미적분 (편미분, 기울기), 선형대수 기초
관련 문서: 학습률 | 손실 함수 | 볼록성 | 선형 모델
개요¶
경사 하강법(Gradient Descent)은 머신러닝 최적화의 핵심 알고리즘이다. 손실 함수의 기울기(gradient) 반대 방향으로 파라미터를 반복적으로 갱신하여 최소값을 찾는다.
현대 딥러닝에서는 다양한 변형이 사용되며, 각각의 장단점을 이해하는 것이 중요하다.
핵심 개념¶
1. 배치 경사 하강법 (Batch / Vanilla GD)¶
전체 훈련 데이터를 사용하여 기울기를 계산한다.
| 장점 | 단점 |
|---|---|
| 안정적 수렴 | 대규모 데이터에 매우 느림 |
| 진정한 기울기 방향 | 지역 최소에 갇힐 수 있음 |
| 결정론적 | 메모리에 전체 데이터 필요 |
- 단계당 복잡도: \(O(n)\) (\(n\) = 데이터 크기)
2. 확률적 경사 하강법 (Stochastic GD, SGD)¶
단일 랜덤 샘플로 기울기를 근사한다.
| 장점 | 단점 |
|---|---|
| 빠른 업데이트 | 높은 분산 |
| 지역 최소 탈출 가능 (노이즈) | 진동하는 수렴 |
| 온라인 학습 가능 | 학습률 감쇠 필요 |
3. 미니배치 SGD (Mini-batch SGD)¶
배치 크기 \(B\) (보통 32~256)의 랜덤 부분집합 사용. 실무의 표준.
배치 크기의 영향¶
| 배치 크기 | 분산 | 수렴 | 일반화 | GPU 활용 |
|---|---|---|---|---|
| 작음 (32) | 높음 | 느림 | 좋음 (넓은 최소) | 낮음 |
| 큼 (4096+) | 낮음 | 빠름 | 나쁠 수 있음 (날카로운 최소) | 높음 |
선형 스케일링 규칙¶
배치 크기를 \(k\)배 하면, 학습률도 \(k\)배: \(\eta' = k \cdot \eta\)
4. 모멘텀 (Momentum)¶
보통 \(\gamma = 0.9\)
직관¶
관성을 가진 공이 언덕을 굴러내리는 것: 일관된 방향으로 가속하고, 진동을 줄인다.
- 좁은 골짜기(ravine)에서 진동을 줄이고 올바른 방향으로 가속
- 국소 최소를 넘어갈 수 있는 운동량 축적
5. 네스테로프 가속 기울기 (Nesterov Accelerated Gradient, NAG)¶
핵심 차이¶
모멘텀은 현재 위치에서 기울기를 계산하지만, NAG는 모멘텀이 이끄는 미래 위치에서 기울기를 계산한다.
- "뛰기 전에 살펴보라 (Look before you leap)"
- 볼록 함수에서 수렴 속도: \(O(1/t^2)\) (vs 일반 GD의 \(O(1/t)\))
6. AdaGrad (Adaptive Gradient)¶
핵심 아이디어¶
각 파라미터마다 학습률을 적응적으로 조절: 빈번하지 않은 특성에는 큰 업데이트.
| 장점 | 단점 |
|---|---|
| 희소 특성에 좋음 (NLP) | 학습률이 단조 감소 |
| 파라미터별 적응적 학습률 | 학습이 너무 일찍 멈출 수 있음 |
7. RMSProp¶
AdaGrad의 학습률 소멸 문제를 해결:
지수 이동 평균(EMA)으로 최근 기울기에 가중치를 둠 --> 학습률이 소멸하지 않음.
8. Adam (Adaptive Moment Estimation)¶
모멘텀 + RMSProp의 결합:
편향 보정 (Bias Correction):
업데이트:
기본 하이퍼파라미터¶
\(\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가 올바른 구현.
다른 주제와의 연결¶
- 학습률: 학습률 스케줄링은 옵티마이저와 함께 사용
- 손실 함수: 기울기를 계산하는 대상
- 볼록성: 볼록/비볼록에 따른 수렴 보장
- 정규화 이론: AdamW의 weight decay
- 트리 기반 모델: 그래디언트 부스팅과의 연결
자주 묻는 면접 질문¶
- Adam에 편향 보정이 필요한 이유는?
-
초기에 \(m_0=0, v_0=0\)에서 시작하므로 초기 추정치가 0에 편향. 보정항 \(1/(1-\beta^t)\)가 초기 단계에서 이를 교정.
-
SGD vs Adam: 어느 것이 더 잘 일반화하는가?
-
SGD가 더 넓은(flat) 최소에 수렴하는 경향이 있어 일반화가 나을 수 있음. Adam은 빠르지만 날카로운(sharp) 최소에 빠질 수 있음.
-
AdaGrad가 해결하는 문제와 만드는 문제는?
-
해결: 희소 특성에 대한 적응적 학습률. 생성: 누적 제곱 기울기가 단조 증가하여 학습률이 소멸.
-
모멘텀을 직관적으로 설명하시오
-
관성을 가진 공이 구르는 것. 일관된 방향으로 가속, 진동하는 방향에서는 상쇄. 좁은 골짜기를 효율적으로 통과.
-
미니배치 크기가 일반화에 영향을 미치는 이유는?
- 작은 배치: 더 많은 노이즈 = 암묵적 정규화, 넓은 최소에 수렴. 큰 배치: 적은 노이즈, 날카로운 최소에 수렴 경향.
코드 예시¶
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)