pytorch

[pytorch] 2. 모델 파라미터(손실 함수/ 옵티마이저 / 학습률 스케줄러)

독립성이 강한 ISFP 2023. 4. 4. 23:30
728x90
반응형

모델을 학습하기 전, 필요한 파라미터들을 정의합니다. 파라미터는 다음과 같습니다. 

 

손실 함수(loss function) : 학습하는 동안 예측값과 실제값의 오차를 구합니다. 

  • BCELoss : 이진 분류를 위해 사용
  • CrossEntropyLoss : 다중 클래스 분류를 위해 사용
  • MSELoss : 회귀 모델에서 사용

 

옵티마이저(optimizer) : 데이터와 손실 함수를 바탕으로 모델의 업데이트 방법을 결정합니다.

  • optimizer는 step() 함수를 통해 전달받은 파라미터를 업데이트 함
  • 모델의 파라미터별로 다른 기준(ex.학습률)을 적용시킬 수 있음
  • torch.optim.Optimizer(params, defaults)는 모든 옵티마이저의 기본이 되는 클래스임
  • zero_grad() 함수는 옵티마이저에 사용된 파라미터들의 기울기를 0으로 만듦
  • torch.optim.lr_scheduler는 에포크에 따라 학습률을 조절할 수 있음
  • 옵티마이저에 사용되는 종류는 다음과 같다 ex. optimAdam, optimRMSProp...

 

학습률 스케줄러(learning rate scheduler) : 미리 지정한 횟수의 에포크를 지날 때마다 학습률을 감소시켜 줍니다. 학습률 스케줄러를 이용하면 학습 초기에는 빠른 학습을 진행하다가 전역 최소점 근처에 다다르면 학습률을 줄여서 최적점을 찾아갈 수 있도록 해 줍니다.

 

  • optim.lr_scheduler.LambdaLR : 람다 함수를 이용하여 그 함수의 결과를 학습률로 설정합니다.
  • optim.lr_scheduler.StepLR : 특정 단계마다 학습률을 감마 비율만큼 감소시킵니다.
  • optim.lr_scheduler.MultiStepLR : StepLR 과 비슷하지만 특정 단계가 아닌 지정된 에포크에만 감마 비율로 감소시킵니다.
  • optim.lr_scheduler.ExponentialLR : 에포크마다 이전 학습률에 감마만큼 곱합니다.
  • optim.lr_scheduler.CosineAnnealingLR : 학습률을 코사인 함수의 형태처럼 변화시킵니다. 따라서 학습률이 커지기도 작아지기도 합니다.
  • optim.lr_scheduler.ReduceLROnPlateau : 학습이 잘되고 있는지 아닌지에 따라 동적으로 학습률을 변화시킬 수 있습니다.

 

지표(metrics) : 훈련과 테스트 단계를 모니터링 합니다.

 

from torch.optim import optimizer

# 손실함수
criterion = torch.nn.MSELoss()
# 옵티마이저
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01, momentom = 0.9)
# 학습 스케줄러
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer = optimizer, 
                                              lr_lambda = lambda epoch : 0.95 ** epoch)
for epoch in range(1, 100+1): # 에포크 수만큼 데이터를 반복하여 처리
    for x, y in dataloader: # 배치 크기만큼 가져와서 학습 진행
        optimizer.zero_grad() # 파라미터의 기울기를 0으로 만듦
loss_fn(model(x), y).backward()
optimizer.step # 전달받은 파라미터 업데이트
scheduler.step()
728x90
반응형