Cosine Annealing은 SGDR: Stochastic Gardient Descent with Warm Restarts에서 제안된 learning rate scheduling 방법이다.
Cosine Annealing은 learning rate가 cosine 함수의 주기를 따라 감소하고, 증가하는 과정을 반복한다.
우선, Cosine Annealing의 수식은 다음과 같다.
ηt=ηmin+12(ηmax−ηmin)(1+cos(TcurTmaxπ))
η는 learning rate를 나타낸다.
Cosine Annealing에서 설정 가능한 parameter은 다음과 같다.
1. ηmin : 최소 learning rate 값
2. ηmax : 최대 learning rate 값
3. Tmax : 한 주기의 길이
위 그림에서는 ηmin=0, ηmax=0.1, Tmax=100로 설정되어 있다.
CosineAnnealingLR
PyTorch에서는 torch.optim.lr_scheduler.CosineAnnealingLR을 이용해 다음과 같이 사용할 수 있다.


T_max
와 eta_min
은 위의 수식과 동일하다.
eta_max는 scheduler에서 따로 설정하지 않고, optimizer에 설정된 learing rate를 사용한다.
import torch.optim as optim
epochs = 300
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100, eta_min=0)
for epoch in range(epochs):
train(...)
val_loss = validate(...)
scheduler.step()
CosineAnnealingWarmRestarts
torch.optim.lr_scheduler.CosineAnnealingWarmRestarts를 이용하면 Warm Restart를 추가할 수 있다. Warm Restart는 learning rate의 감소 후 급격하게 증가하게 함으로써 local optima에 빠지는 것과 overfitting을 방지할 수 있다.


CosineAnnealingLR의 T_max
대신 T_0
와 T_mult
가 있고, eta_min
은 동일한데,
T_0
은 첫 주기의 길이를 의미하고, 이후에는 주기가 T_mult
만큼 곱해진다. 단 T_mult
는 integer만 가능하여 주기가 짧아지는 것은 불가능하다.
import torch.optim as optim
epochs = 300
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
scheduler = optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=50, T_mult=2, eta_min=0)
for epoch in range(epochs):
train(...)
val_loss = validate(...)
scheduler.step()
'🐍 Python & library > PyTorch' 카테고리의 다른 글
[PyTorch] Scheduler 시각화하기 (Visualize scheduler) (2) | 2021.11.24 |
---|---|
[PyTorch] ReduceLROnPlateau (0) | 2021.10.26 |
[PyTorch] nn.ModuleList 기능과 사용 이유 (3) | 2021.08.04 |
[PyTorch] Livelossplot 사용예제 (0) | 2021.04.03 |
[PyTorch] 모델 저장하기 & 불러오기 (0) | 2020.02.03 |