Skip to main content

PyTorch의 CosineAnnealingWarmRestarts 스케줄러를 올바르게 사용하는 방법

이 글은 PyTorch에서 CosineAnnealingWarmRestarts Scheduler를 사용하는 방법을 간단히 설명하는 튜토리얼로, 코드 예제와 인터랙티브 시각화를 함께 제공합니다. 이 글은 AI 번역본입니다. 오역이 있을 경우 댓글로 알려주세요.
Created on September 15|Last edited on September 15
이 글에서는 다음 내용을 살펴봅니다: 어떻게 사용할 수 있는지 CosineAnnealingWarmRestarts 효율적인 학습 루프 작성을 위한 PyTorch의 Scheduler.
TensorFlow와 달리, PyTorch 다양한 Learning Rate Scheduler를 쉽게 사용할 수 있는 간편한 인터페이스를 제공하며, 이를 학습 루프에 손쉽게 추가할 수 있습니다!
PyTorch에서 사용할 수 있는 다양한 Learning Rate Scheduler를 더 자세히 살펴보려면 다음을 참고하세요 공식 문서.
💡

목차





코드

대부분의 PyTorch 학습 루프는 다음과 같은 형태입니다.
optimizer = ...

for epoch in range(...):
for i, sample in enumerate(dataloader):
inputs, labels = sample
optimizer.zero_grad()

# Forward Pass
outputs = model(inputs)
# Compute Loss and Perform Backpropagation
loss = loss_fn(outputs, labels)
loss.backward()
# Update Optimizer
optimizer.step()
이는 옵티마이저가 초기화될 때 설정한 동일한 학습률을 계속 사용한다고 가정합니다. 그러나 실험에 따르면 주기적으로 Learning Rate Scheduler를 사용하면 학습 안정성이 향상되고 수렴 성능이 더 좋아집니다.
따라서 우리는 주로 다음과 같은 Learning Rate Scheduler를 사용합니다 ReduceLROnPlateau이제 스케줄러를 어떻게 초기화하고 학습 루프 안에서 사용하는지 살펴보겠습니다:
optimizer = ...
scheduler = ReduceLROnPlateau(optimizer, 'min')

for epoch in range(...):
for i, sample in enumerate(dataloader):
# Forward Pass
# Compute Loss and Perform Backpropagation
# Update Optimizer
optimizer.step()
scheduler.step() # < ----- Update Learning Rate
대부분의 Scheduler에는 이것이 작동하지만, CosineAnnealingWarmRestarts 스케줄러가 제대로 동작하려면 몇 가지 추가 단계가 필요합니다.
장기 학습에서 학습률을 올바르게 변경하려면, 호출 시 이상적으로 현재 epoch 번호를 함께 전달해야 합니다 step() 함수입니다. 예시는 다음과 같습니다:
optimizer = ...
scheduler = lr_scheduler.CosineAnnealingWarmRestarts(optimizer, ...)
iters = len(dataloader)

for epoch in range(...):
for i, sample in enumerate(dataloader):
# Forward Pass
# Compute Loss and Perform Back-propagation
# Update Optimizer
optimizer.step()
scheduler.step(epoch + i / iters)
이렇게 하지 않으면 보통 학습률이 기대처럼 점진적이고 매끄럽게 변하지 않고, 더 불규칙하게 변화하는 결과를 초래합니다.

요약

이 글에서는 다음을 어떻게 활용할 수 있는지 살펴보았습니다 CosineAnnealingWarmRestarts PyTorch 딥러닝 모델의 Scheduler와, Weights & Biases를 사용해 지표를 모니터링함으로써 가치 있는 인사이트를 얻는 방법.
W&B의 모든 기능을 확인하려면, 다음을 참고하세요 짧은 5분 가이드수학적 내용과 “from-scratch” 코드 구현을 다루는 보고서를 더 원하신다면, 아래 댓글이나 저희의 포럼 ✨!
다음 주제의 다른 보고서도 확인해 보세요 완전 연결 GPU 활용도와 모델 저장과 같은 다른 핵심 개발 주제도 다룹니다.

추천 자료



이 글은 AI가 번역한 기사입니다. 오역이나 부자연스러운 표현이 있으면 댓글로 알려 주세요. 원문 보고서는 다음 링크에서 확인할 수 있습니다: 원문 보고서 보기