[파이썬] PyTorch 자동 학습률 조정

PyTorch는 강력한 딥러닝 프레임워크로서, GPU 가속을 통해 빠른 모델 학습을 지원합니다. 그리고 이를 더욱 효율적으로 만들기 위해 학습률 조정 기능을 제공합니다.

학습률은 딥러닝 모델 학습에 있어서 매우 중요한 하이퍼파라미터입니다. 학습률이 적절하게 설정되지 않으면 모델이 수렴하지 못하거나, 학습이 너무 느려질 수 있습니다. 이에 대한 해결책 중 하나가 자동 학습률 조정입니다.

학습률 스케줄러

PyTorch에서는 학습률을 조정하기 위해 torch.optim.lr_scheduler 모듈을 제공합니다. 이 모듈을 사용하면 학습률을 일정한 스케줄에 따라 감소시키거나 증가시킬 수 있습니다.

학습률 스케줄러는 다양한 종류가 있지만, 여기서는 torch.optim.lr_scheduler.ReduceLROnPlateau 클래스에 대해서 알아보겠습니다.

ReduceLROnPlateau 스케줄러

ReduceLROnPlateau 스케줄러는 모델이 특정 지표 (예: 검증 손실 값)에 대해 개선이 없으면 학습률을 감소시킵니다. 이는 모델이 지역 최소값에서 제대로 벗어나지 못하고 갇혀있을 때 유용합니다.

import torch
import torch.optim as optim
import torch.optim.lr_scheduler as lr_scheduler

# 모델과 옵티마이저 초기화
model = ...
optimizer = optim.SGD(model.parameters(), lr=0.1)

# 학습률 스케줄러 초기화
scheduler = lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=5)

# 훈련 반복문
for epoch in range(num_epochs):
    train(...)
    validation_loss = validate(...)
    
    # 검증 손실 값을 스케줄러에 전달
    scheduler.step(validation_loss)

    # 현재 학습률 확인
    current_lr = optimizer.param_groups[0]['lr']
    print(f"Epoch {epoch}: Learning rate = {current_lr}")

위 코드에서는 torch.optim.lr_scheduler.ReduceLROnPlateau 클래스를 사용하여 검증 손실 값을 모니터링하고, 5번 이상 개선이 없을 경우 학습률을 0.1 배 감소시킵니다. optimizer.param_groups[0]['lr']을 통해 현재의 학습률을 확인할 수 있습니다.

결론

PyTorch는 torch.optim.lr_scheduler 모듈을 통해 자동 학습률 조정 기능을 제공하고 있습니다. ReduceLROnPlateau 스케줄러를 사용하면 모델이 일정 지표에서 개선이 없을 때 학습률을 조정할 수 있습니다. 이를 통해 모델 학습을 더욱 효과적으로 관리할 수 있습니다.