[딥러닝]/[PyTorch]

[PyTorch] torch.optim.lr_scheduler

딥러닝 도전기 2022. 2. 26. 21:59

[PyTorch] torch.optim.lr_scheduler

파이토치의 learning rate scheduler에 대한 포스팅을 하도록 하겠습니다.

다음의 파이토치 공식 문서를 참조함을 밝힙니다.

https://pytorch.org/docs/stable/optim.html

 

torch.optim — PyTorch 1.10 documentation

torch.optim torch.optim is a package implementing various optimization algorithms. Most commonly used methods are already supported, and the interface is general enough, so that more sophisticated ones can be also easily integrated in the future. How to us

pytorch.org

 

 


학습을 진행할수록 cost function의 최소값을 얻기 위해서는 더욱 정교한 학습이 필요합니다. 따라서 학습이 진행됨에 따라 optimizer에 접근하여 learning-rate값을 감소시키는 scheduler가 필요합니다.

 

from pytorch.optim.lr_scheduler import [SCHEDULER NAME]

위의 코드로 사용할 scheduler을 import합니다.

 

[SCHEDULER NAME]에는 다음의 값들이 들어갈 수 있습니다.

 

1. LambdaLR

LambdaLR은 사용자 정의에 따라 scheduler을 정의할 수 있습니다.

scheduler = LambdaLR(optimizer, lr_lambda = lambda epoch : 0.95 ** epoch)

위의 코드처럼 lambda함수를 사용하여 에폭이 진행됨에 따라 learning rate에 0.95를 곱하여 감소하는 scheduler를 구현할 수 있습니다.

 

2. MultiplicativeLR

MultiplicativeLR은 Lambda 함수를 통하여 작성한 수식을 통해 learning rate를 조절합니다. 

이때, 초기 learning rate값에 lambda함수에서 나온 값을 누적곱해서 learning rate를 조절합니다.

scheduler = MultiplicativeLR(optimizer, lr_lambda = lambda epoch : 0.95**epoch)

( LambdaLR을 활용하여 충분히 커버할 수 있는데 굳이 왜 만든지는 잘 모르겠습니다. 차이점이라면 LambdaLR에서는 사용자 정의 함수가 모두 가능한 반면, MultiplicativeLR에서는 위 처럼 곱해지는 형태만 가능합니다.)

 

 

3. StepLR

gamma라는 인자를 통하여 정의된 step_size epoch마다 learning rate를 감소시킵니다.

stepsize마다 gamma라는 인자를 곱하는 형태입니다.

 

scheduler = StepLR(optimizer, step_size = 5, gamma = 0.9)

 

위의 코드를 따르면, learning rate는 5에폭마다 0.9배씩 감소하게 됩니다.

 

4. MultiStepLR

StepLR에서는 step_size를 통하여 learning rate를 감소시키는 반면, MultiStepLR에서는 지정된 epoch마다 learning rate를 감소시킵니다.

 

scheduler = MultiStepLR(optimizer, milestones = [5, 10, 15, 20], gamma = 0.9)

5. CosineAnnealingLR

cos함수의 주기성을 이용하여 learning rate를 조절합니다.

 

scheduler = CosineAnnealingLR(optimizer, T_max = 10, eta_min = 0)

초기 learning rate값에서 시작하여 eta_min (default = 0) 까지 감소합니다.

T_max는 iteration의 최대 횟수를 의미합니다.

 

6. ReduceLROnPlateau

포스팅 맨 위에 scheduler를 사용하는 이유는 더욱 정교한 cost function의 최솟값을 얻기 위함이라고 말씀드렸습니다.

ReduceLROnPlateau는 성능의 향상이 없을 때 learning rate를 감소시킵니다. 

 

결국, ReduceLROnPlateau는 학습을 진행하면서 성능 또한 알고있어야 하기 때문에 validation loss값을 input으로 넣습니다.

 

scheduler = ReduceLROnPlateau(optimizer, 'min', factor = 0.1, patience = 10)

factor : new_lr = lr * factor

patience : patience번 만큼 에폭동안 학습이 진행되지 않으면 Learning rate를 감소.  

반응형

'[딥러닝] > [PyTorch]' 카테고리의 다른 글

[PyTorch] optimizer.zero_grad()  (0) 2022.01.03