본문 바로가기
ML & DL/Deep Learning

[DL] Learning Rate Scheduling in PyTorch: 다양한 기법과 구현 예제

by Yuchulnote 2023. 12. 27.
728x90

Learning Rate Scheduling 소개

Learning Rate Scheduling은 학습 중에 학습률(Learning Rate)을 동적으로 조정하여 학습의 효율성을 높이는 기법입니다. PyTorch는 다양한 학습률 스케쥴링 기법을 지원하며, 이를 통해 학습 과정을 더욱 효과적으로 관리할 수 있습니다.

 

PyTorch의 대표적인 Learning Rate Schedulers

 

1. StepLR: 정해진 step_size 마다 학습률을 gamma 비율로 감소시킵니다.

from torch.optim.lr_scheduler import StepLR

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
scheduler = StepLR(optimizer, step_size=30, gamma=0.1)

 

2. MultiStepLR: 지정된 milestones에서 학습률을 gamma 비율로 감소시킵니다.

from torch.optim.lr_scheduler import MultiStepLR

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
scheduler = MultiStepLR(optimizer, milestones=[30, 80], gamma=0.1)

 

3. ExponentialLR: 매 epoch마다 학습률을 gamma 비율로 감소시킵니다.

from torch.optim.lr_scheduler import ExponentialLR

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
scheduler = ExponentialLR(optimizer, gamma=0.95)

 

4. CosineAnnealingLR: T_max 동안 학습률을 코사인 곡선에 따라 조정합니다.

from torch.optim.lr_scheduler import CosineAnnealingLR

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
scheduler = CosineAnnealingLR(optimizer, T_max=50)

 

5. ReduceLROnPlateau: 검증 손실이 개선되지 않을 때 학습률을 줄입니다. 이 스케쥴러는 검증 손실 값을 기반으로 학습 중에 학습률을 조정합니다.

from torch.optim.lr_scheduler import ReduceLROnPlateau

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
scheduler = ReduceLROnPlateau(optimizer, 'min', factor=0.1, patience=10)

 

Scheduler 사용 시 주의 사항

  • 학습률 스케쥴러를 사용할 때는 매 epoch 마다 scheduler.step()을 호출해야 합니다. 이는 학습률을 업데이트하는 중요한 단계입니다.
  • ReduceLROnPlateau의 경우, 이 스케쥴러는 학습 loop 내에서 검증 손실 값을 기반으로 scheduler.step(val_loss)를 호출해야 합니다.

예제: 학습 루프에서의 Scheduler 사용

for epoch in range(num_epochs):
    # Train ...
    # Validate ...

    # Update learning rate
    # For ReduceLROnPlateau, use: scheduler.step(val_loss)
    scheduler.step()

이러한 다양한 학습률 스케쥴링 기법들은 학습의 안정성을 높이고, 더 빠른 수렴을 도울 수 있습니다. 각 프로젝트의 목표와 요구 사항에 따라 적절한 스케쥴러를 선택하고 구현하는 것이 중요합니다.

728x90
반응형