728x90
WarmupLR이란?
- Warmup Learning Rate(WarmupLR)는 딥러닝 모델 학습 초기에 학습률(learning rate)을 점진적으로 증가시키는 기법
- 초기 학습 단계에서 너무 큰 학습률을 사용하지 않음으로써 모델이 안정적으로 수렴하도록 도와주고, 일반적으로 WarmupLR은 학습 초기에만 적용, 이후에는 일정한 학습률을 사용하거나 다른 학습률 스케줄링 기법과 결합되어 사용
- WarmupLR의 필요성
- 딥러닝 모델, 특히 깊고 복잡한 네트워크는 초기 학습 단계에서 큰 학습률을 사용하면 불안정해 질 수 있음
- WarmupLR은 이 문제를 해결하기 위해 처음 몇 개의 에포크 동안 학습률을 점진적으로 증가시키며, 모델이 초기 단계에서 안정적으로 학습
- WarmupLR의 동작 원리
- WarmupLR의 기본 개념은 학습률을 서서히 증가시키는 것

- Warmup 과정
- 초기 학습률 설정: 아주 작은 값으로 시작합니다. 이는 일반적으로 목표 학습률의 1/10 또는 그 이하입니다.
- 점진적 증가: 설정된 Warmup 기간 동안 학습률을 선형적으로 증가시킵니다.
- 목표 학습률 도달: Warmup 기간이 끝나면 목표 학습률에 도달하고, 이후에는 일반적인 학습률 스케줄링을 따릅니다.
- WarmupLR의 장점
- 모델 안정성 향상: 초기 학습률이 낮아 과도한 가중치 변화나 발산을 방지합니다.
- 빠른 수렴 촉진: 모델이 안정화된 후 목표 학습률에 도달하여 더 빠르게 수렴할 수 있습니다.
- 폭넓은 적용성: 다양한 딥러닝 모델과 학습 환경에서 유연하게 적용할 수 있습니다.
- WarmupLR의 단점
- 추가적인 하이퍼파라미터 튜닝: Warmup 기간(T_{\text{warmup}})과 초기 학습률 설정에 대한 추가적인 튜닝이 필요할 수 있습니다.
- Warmup 기간 동안의 느린 학습: Warmup 기간 동안에는 학습률이 작아 학습 속도가 다소 느릴 수 있습니다.
import torch
import torch.optim as optim
# WarmupLR 스케줄러
class WarmupLR(torch.optim.lr_scheduler._LRScheduler):
def __init__(self, optimizer, warmup_epochs, last_epoch=-1):
self.warmup_epochs = warmup_epochs
super(WarmupLR, self).__init__(optimizer, last_epoch)
def get_lr(self):
if self.last_epoch < self.warmup_epochs:
return [base_lr * (self.last_epoch + 1) / self.warmup_epochs for base_lr in self.base_lrs]
return [base_lr for base_lr in self.base_lrs]
# 옵티마이저 정의
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
# Warmup 스케줄러 적용
scheduler = WarmupLR(optimizer, warmup_epochs=5)
# 학습 루프
for epoch in range(100):
train(...) # 모델 학습 함수
validate(...) # 검증 함수
scheduler.step() # 학습률 업데이트
728x90
'Programming > 머신러닝' 카테고리의 다른 글
[머신러닝] 활성화 함수의 종류 (0) | 2022.02.14 |
---|---|
[머신러닝] 인공 신경망(ANN, Artificial Neural Network) (0) | 2022.02.11 |
[머신러닝] 강화학습의 분류 (0) | 2022.01.24 |
[머신러닝] 강화학습 (0) | 2022.01.18 |