경사 하강법 변형 (Gradient Descent Variants)
난이도: 중급
선수 지식: 미적분 (편미분, 기울기), 선형대수 기초
관련 문서: 학습률 | 손실 함수 | 볼록성 | 선형 모델
핵심 요약: 손실(Loss)을 줄이는 방향으로 조금씩 파라미터(Parameter)를 업데이트하는 것. “눈감고 산을 내려가는 것”에 비유할 수 있다. 발밑의 경사(기울기, Gradient)를 느끼고 가장 가파른 내리막 방향으로 한 걸음씩 이동한다. SGD, Momentum, Adam 등 다양한 변형이 있으며, 현대 딥러닝의 핵심 엔진이다.
경사 하강법(Gradient Descent)은 머신러닝 최적화의 핵심 알고리즘이다. 손실 함수의 기울기(gradient) 반대 방향으로 파라미터를 반복적으로 갱신하여 최소값을 찾는다.
현대 딥러닝에서는 다양한 변형이 사용되며, 각각의 장단점을 이해하는 것이 중요하다.
탄생 배경
섹션 제목: “탄생 배경”경사 하강법의 역사는 Augustin-Louis Cauchy가 1847년에 최초로 제안한 기울기 기반 최적화에서 시작된다. 당시에는 천문학적 계산에서 함수의 최솟값을 찾기 위한 수치적 방법이 필요했고, Cauchy는 기울기의 반대 방향으로 이동하면 함수값이 감소한다는 직관을 수학적으로 정리했다.
약 100년 뒤, Robbins와 Monro(1951)는 확률적 근사(Stochastic Approximation) 이론을 발표하며 SGD(Stochastic Gradient Descent)의 이론적 기반을 마련했다. 전체 데이터 대신 랜덤 샘플로 기울기를 추정해도 올바른 방향으로 수렴할 수 있다는 통찰은 대규모 데이터 처리의 문을 열었다.
이후 수십 년간 Momentum(Polyak, 1964), AdaGrad(Duchi et al., 2011), RMSProp(Hinton, 2012) 등이 등장하며 점진적으로 발전했고, 2015년 Kingma와 Ba가 발표한 Adam(Adaptive Moment Estimation)이 현대 딥러닝의 사실상 표준 옵티마이저(de facto optimizer)로 자리 잡았다. Adam은 1차 모멘트(평균)와 2차 모멘트(분산)를 동시에 추적하는 아이디어로, “설정 한 번이면 대부분 잘 동작한다”는 실용성을 제공했다.
비유: Momentum은 공이 비탈을 내려갈 때의 관성이다 — 한 방향으로 계속 굴러가려는 힘이 진동을 줄이고 속도를 높인다. Adam은 여기에 지형에 따라 브레이크를 조절하는 장치를 더한 것이다. 가파른 경사면에서는 브레이크를 밟아 폭주를 막고, 완만한 평지에서는 브레이크를 풀어 빠르게 전진한다.
핵심 개념
섹션 제목: “핵심 개념”1. 배치 경사 하강법 (Batch / Vanilla GD)
섹션 제목: “1. 배치 경사 하강법 (Batch / Vanilla GD)”
전체 훈련 데이터를 사용하여 기울기를 계산한다.
| 장점 | 단점 |
|---|---|
| 안정적 수렴 | 대규모 데이터에 매우 느림 |
| 진정한 기울기 방향 | 지역 최소에 갇힐 수 있음 |
| 결정론적 | 메모리에 전체 데이터 필요 |
- 단계당 복잡도: ( = 데이터 크기)
숫자로 이해하기
섹션 제목: “숫자로 이해하기”경사 하강법(Gradient Descent)의 한 스텝을 구체적으로 추적해 보자.
설정: 가중치(Weight) , 학습률(Learning Rate) , 현재 기울기(Gradient) = 2
이 과정을 반복하면:
| 스텝 | 기울기 | ||
|---|---|---|---|
| 1 | 5.0 | 2.0 | 4.8 |
| 2 | 4.8 | 1.6 | 4.64 |
| 3 | 4.64 | 1.28 | 4.51 |
| … | … | … | … |
| 최종 | ~3.0 | ~0.0 | ~3.0 (수렴, Converge) |
핵심: 기울기가 양수이면 를 줄이고, 음수이면 늘린다. 기울기가 0에 가까워지면 업데이트(Update)가 작아지며 수렴한다. 학습률(Learning Rate)이 0.1이 아니라 10이었다면? 로 튕겨나간다 — 이것이 발산(Divergence)이다.
2. 확률적 경사 하강법 (Stochastic GD, SGD)
섹션 제목: “2. 확률적 경사 하강법 (Stochastic GD, SGD)”
단일 랜덤 샘플로 기울기를 근사한다.
| 장점 | 단점 |
|---|---|
| 빠른 업데이트 | 높은 분산 |
| 지역 최소 탈출 가능 (노이즈) | 진동하는 수렴 |
| 온라인 학습 가능 | 학습률 감쇠 필요 |
3. 미니배치 SGD (Mini-batch SGD)
섹션 제목: “3. 미니배치 SGD (Mini-batch SGD)”
배치 크기 (보통 32~256)의 랜덤 부분집합 사용. 실무의 표준.
배치 크기의 영향
섹션 제목: “배치 크기의 영향”| 배치 크기 | 분산 | 수렴 | 일반화 | GPU 활용 |
|---|---|---|---|---|
| 작음 (32) | 높음 | 느림 | 좋음 (넓은 최소) | 낮음 |
| 큼 (4096+) | 낮음 | 빠름 | 나쁠 수 있음 (날카로운 최소) | 높음 |
선형 스케일링 규칙
섹션 제목: “선형 스케일링 규칙”배치 크기를 배 하면, 학습률도 배:
4. 모멘텀 (Momentum)
섹션 제목: “4. 모멘텀 (Momentum)”
보통
관성을 가진 공이 언덕을 굴러내리는 것: 일관된 방향으로 가속하고, 진동을 줄인다.
- 좁은 골짜기(ravine)에서 진동을 줄이고 올바른 방향으로 가속
- 국소 최소를 넘어갈 수 있는 운동량 축적
5. 네스테로프 가속 기울기 (Nesterov Accelerated Gradient, NAG)
섹션 제목: “5. 네스테로프 가속 기울기 (Nesterov Accelerated Gradient, NAG)”
핵심 차이
섹션 제목: “핵심 차이”모멘텀은 현재 위치에서 기울기를 계산하지만, NAG는 모멘텀이 이끄는 미래 위치에서 기울기를 계산한다.
- “뛰기 전에 살펴보라 (Look before you leap)”
- 볼록 함수에서 수렴 속도: (vs 일반 GD의 )
6. AdaGrad (Adaptive Gradient)
섹션 제목: “6. AdaGrad (Adaptive Gradient)”
핵심 아이디어
섹션 제목: “핵심 아이디어”각 파라미터마다 학습률을 적응적으로 조절: 빈번하지 않은 특성에는 큰 업데이트.
| 장점 | 단점 |
|---|---|
| 희소 특성에 좋음 (NLP) | 학습률이 단조 감소 |
| 파라미터별 적응적 학습률 | 학습이 너무 일찍 멈출 수 있음 |
7. RMSProp
섹션 제목: “7. RMSProp”AdaGrad의 학습률 소멸 문제를 해결:
지수 이동 평균(EMA)으로 최근 기울기에 가중치를 둠 —> 학습률이 소멸하지 않음.
8. Adam (Adaptive Moment Estimation)
섹션 제목: “8. Adam (Adaptive Moment Estimation)”모멘텀 + RMSProp의 결합:
편향 보정 (Bias Correction):
업데이트:
기본 하이퍼파라미터
섹션 제목: “기본 하이퍼파라미터”, , ,
왜 편향 보정이 필요한가?
섹션 제목: “왜 편향 보정이 필요한가?”초기에 , 으로 시작하므로, 초기 추정치가 0에 편향됨. 항이 이를 보정.
주요 변형
섹션 제목: “주요 변형”| 변형 | 핵심 개선 | 사용처 |
|---|---|---|
| AdamW | 가중치 감쇠를 기울기 업데이트에서 분리 | Transformer, 현대 DL |
| AMSGrad | 로 단조성 보장 | 이론적 수렴 보장 |
| NAdam | Adam + 네스테로프 모멘텀 | 일부 NLP |
| LAMB/LARS | 레이어별 적응적 학습률 | 대규모 배치 학습 |
| AdaFactor | 메모리 효율적 Adam 대안 | 매우 큰 모델 |
상세 비교표
섹션 제목: “상세 비교표”| 옵티마이저 | 적응적 LR | 모멘텀 | 메모리 | 최적 사용처 |
|---|---|---|---|---|
| SGD | 없음 | 없음 | 단순, 튜닝 가능 시 | |
| SGD+Momentum | 없음 | 있음 | 일반적 DL 학습 | |
| AdaGrad | 있음 | 없음 | 희소 특성 | |
| RMSProp | 있음 | 없음 | RNN, 비정상 목적함수 | |
| Adam | 있음 | 있음 | DL 기본 선택 | |
| AdamW | 있음 | 있음 | Transformer, 현대 DL |
( = 파라미터 수)
9. SGD vs Adam 논쟁
섹션 제목: “9. SGD vs Adam 논쟁”| 관점 | SGD (잘 튜닝) | Adam |
|---|---|---|
| 수렴 속도 | 느림 | 빠름 |
| 일반화 | 더 나은 경향 | 날카로운 최소에 빠질 수 있음 |
| 튜닝 난이도 | 어려움 (LR 스케줄 필수) | 쉬움 (기본값도 잘 동작) |
| 실무 추천 | CV에서 최종 학습 | 빠른 프로토타이핑 |
| 최근 추세 | 여전히 많이 사용 | AdamW + 코사인 어닐링이 표준 (NLP) |
언제 사용하는가
섹션 제목: “언제 사용하는가”| 상황 | 추천 옵티마이저 |
|---|---|
| 빠른 프로토타이핑 | Adam (기본값) |
| 컴퓨터 비전 최종 학습 | SGD + Momentum + 코사인 어닐링 |
| NLP / Transformer | AdamW + 워밍업 + 코사인 어닐링 |
| 희소 특성 (추천 시스템) | AdaGrad 또는 Adam |
| 대규모 배치 분산 학습 | LAMB / LARS |
| 메모리 제한 | SGD + Momentum |
실전 사례
섹션 제목: “실전 사례”Adam이 SGD+Momentum에 진 사례: ImageNet 일반화 논쟁
섹션 제목: “Adam이 SGD+Momentum에 진 사례: ImageNet 일반화 논쟁”2017년, Wilson et al.은 “The Marginal Value of Adaptive Gradient Methods in Machine Learning”이라는 논문에서 충격적인 실험 결과를 발표했다. ImageNet, CIFAR-10 등 주요 이미지 분류 벤치마크에서 잘 튜닝된 SGD+Momentum이 Adam보다 일반화 성능이 더 좋다는 것이었다.
구체적으로, Adam은 훈련 손실(training loss)을 더 빠르게 줄였지만, 테스트 정확도(test accuracy)에서는 SGD+Momentum에 뒤졌다. 이 현상의 원인으로 지목된 것은 Adam이 날카로운 최소(sharp minima)에 수렴하는 경향이다. 적응적 학습률이 파라미터별로 기울기를 정규화하면서, 손실 곡면의 날카로운 골짜기에 빠지기 쉬워진 것이다.
이 논쟁은 이후 AdamW(Loshchilov & Hutter, 2019)의 등장으로 일부 해소되었다. AdamW는 가중치 감쇠(weight decay)를 옵티마이저 업데이트에서 분리하여 일반화 성능을 개선했으며, 현재 NLP와 Transformer 학습에서는 AdamW + 코사인 어닐링(Cosine Annealing)이 사실상 표준이다.
실무 교훈:
- 컴퓨터 비전(CV) 최종 학습에서는 여전히 SGD+Momentum이 선호되는 경우가 많다
- NLP/Transformer에서는 AdamW가 표준이다
- “빠른 수렴 = 좋은 모델”이 아니다 — 훈련 손실과 테스트 성능은 별개이다
흔한 오해와 함정
섹션 제목: “흔한 오해와 함정”1. “Adam은 항상 SGD보다 낫다”
섹션 제목: “1. “Adam은 항상 SGD보다 낫다””- 빠르게 수렴하지만, 최종 일반화 성능은 잘 튜닝된 SGD가 나을 수 있다. 특히 이미지 분류에서.
2. “학습률만 잘 설정하면 옵티마이저는 상관없다”
섹션 제목: “2. “학습률만 잘 설정하면 옵티마이저는 상관없다””- 옵티마이저마다 적합한 학습률 범위가 다르고, 스케줄링 전략도 달라야 한다.
3. “Adam의 기본 하이퍼파라미터를 바꿀 필요가 없다”
섹션 제목: “3. “Adam의 기본 하이퍼파라미터를 바꿀 필요가 없다””- 대부분의 경우 잘 동작하지만, 학습률()은 거의 항상 튜닝이 필요하다.
4. “AdamW와 Adam + L2 정규화는 같다”
섹션 제목: “4. “AdamW와 Adam + L2 정규화는 같다””- 다르다. Adam에서 L2 정규화는 적응적 학습률에 의해 왜곡된다. AdamW가 올바른 구현.
다른 주제와의 연결
섹션 제목: “다른 주제와의 연결”- 학습률: 학습률 스케줄링은 옵티마이저와 함께 사용
- 손실 함수: 기울기를 계산하는 대상
- 볼록성: 볼록/비볼록에 따른 수렴 보장
- 정규화 이론: AdamW의 weight decay
- 트리 기반 모델: 그래디언트 부스팅과의 연결
자주 묻는 면접 질문
섹션 제목: “자주 묻는 면접 질문”-
Adam에 편향 보정이 필요한 이유는?
- 초기에 에서 시작하므로 초기 추정치가 0에 편향. 보정항 가 초기 단계에서 이를 교정.
-
SGD vs Adam: 어느 것이 더 잘 일반화하는가?
- SGD가 더 넓은(flat) 최소에 수렴하는 경향이 있어 일반화가 나을 수 있음. Adam은 빠르지만 날카로운(sharp) 최소에 빠질 수 있음.
-
AdaGrad가 해결하는 문제와 만드는 문제는?
- 해결: 희소 특성에 대한 적응적 학습률. 생성: 누적 제곱 기울기가 단조 증가하여 학습률이 소멸.
-
모멘텀을 직관적으로 설명하시오
- 관성을 가진 공이 구르는 것. 일관된 방향으로 가속, 진동하는 방향에서는 상쇄. 좁은 골짜기를 효율적으로 통과.
-
미니배치 크기가 일반화에 영향을 미치는 이유는?
- 작은 배치: 더 많은 노이즈 = 암묵적 정규화, 넓은 최소에 수렴. 큰 배치: 적은 노이즈, 날카로운 최소에 수렴 경향.
코드 예시
섹션 제목: “코드 예시”import torchimport torch.optim as optim
model = MyModel()
# SGD + Momentumoptimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9, weight_decay=1e-4)
# Adamoptimizer = 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)