Learning rate Scheduler 정리
1. LambdarLR
- PyTorch에서 제공하는 기본 LR Scheduler 입니다.
- lr_lambda에 함수를 지정하면 LR Schedule을 마음대로 조정가능합니다.
- 파라미터는 optimizer, lr_lambda 입니다.
scheduler = LambdaLR(optimizer=optimizer,
lr_lambda=lambda epoch: 1.0 if epoch < 10 else np.math.exp(0.1 * (10 - epoch)))
lambda 함수를 10 epoch 동안에는 1e-3만큼 유지하다가 10 epoch 이후에는 learning rate가 점차 감소하도록 만들었습니다.
2. StepLR
- PyTorch에서 제공하는 기본 LR Scheduler 입니다.
- step_size에 따라서 gamma값을 곱한만큼 learning rate가 감소합니다.
- 파라미터는 optimizer, step_size, gamma 입니다.
scheduler = StepLR(optimizer=optimizer, step_size=10, gamma=0.9)
epoch이 10(step_size)의 배수 만큼 될때마다 gamma값을 곱하여 learning rate가 감소합니다.
3. MultiStepLR
- PyTorch에서 제공하는 기본 LR Scheduler 입니다.
- StepLR은 step_size 만큼 균등하게 learning rate가 감소한다면 MultiLR은 여러 기준으로 learning rate를 감소 시킬수 있는 StepLR의 업그레이드 버전입니다.
- 파라미터는 milestones, gamma 입니다.
scheduler = MultiStepLR(optimizer=optimizer, milestones=[50, 70, 90], gamma=0.2)
milestones의 50, 70, 90 epoch에서 learning rate가 감소가 일어나고 감소 비율은 gamma값 만큼 곱해준 값입니다.
4. ExponentialLR
- PyTorch에서 제공하는 기본 LR Scheduler 입니다.
- Exponential 적으로 gamma 값만큼 learning rate를 감소시킵니다.
- 파라미터는 gamma 입니다.
scheduler = ExponentialLR(optimizer=optimizer, gamma=0.9)
5. CyclicLR
- PyTorch에서 제공하는 기본 LR Scheduler 입니다.
- CyclicLR은 변화된 주기으로 learning rate를 증가 또는 감소 시킵니다.
- 파라미터는 base_lr, max_lr, step_size_up, step_size_down, mode 입니다.
- base_lr: learning rate의 가장 작은 값인 lower bound
- max_lr: learning rate의 가장 큰 값인 upper bound
- step_size_up: base_lr에서 max_lr로 증가하는 epoch 수
- step_size_down: max_lr에서 base_lr로 감소하는 epoch 수
- mode: triangular, triangular2, exp_range
5.1 CyclicLR - triangular
- learning rate는 base_lr의 1e-5부터 시작해서 step_size_up의 10 epoch 동안 learning rate를 증가 시키고 max_lr의 1e-1에까지 도달합니다.
- max_lr에 도달한다음 step_size_down만큼감소되어 base_lr까지 감소합니다. 이런 Cycle을 Epoch이 종료 될때까지 반복합니다.
- (참고: step_size_down: 아래의 코드에서는 default로 none값이 들어가서 step_size_up과 동일한 값으로 설정됨)
scheduler = CyclicLR(optimizer=optimizer, base_lr=1e-5, max_lr=1e-1, step_size_up=10, mode='triangular')
5.2 CyclicLR - triangular2
- triangular 모드와 다른점은 주기가 반복되면서 max_lr의 크기가 절반 씩 감소합니다.
- max_lr이 주기마다 절반씩 감소하기 때문에 마지막에 0으로 수렴하게 됩니다.
scheduler = CyclicLR(optimizer=optimizer, base_lr=1e-5, max_lr=1e-1, step_size_up=10, mode='triangular2')
5.3 CyclicLR - exp_range
- triangular2와 비슷합니다. 다른점은 선형적인 증감 방법 대신 Exponential적으로 learning rate가 증감합니다.
- 파라미터는 Exponential에 밑의 값인 gamma 파라미터가 추가됩니다.
scheduler = CyclicLR(optimizer=optimizer,
base_lr=1e-5, max_lr=1e-1, step_size_up=10, mode='exp_range', gamma=0.9)
6. ReduceLROnPlateau
- PyTorch에서 제공하는 기본 LR Scheduler 입니다.
- 성능향상이 없을 때 learning rate를 감소시킵니다.
- 학습의 진행되는 loop안에서 동작하는 step 함수에 metric(validation loss 등)을 입력으로 넣어 줍니다.
- metric의 값을 보고 성능이 향상이 없을때 patience만큼 참고 그 이후 learning rate를 감소 시킵니다.
- 파라미터는 mode, factor, min_lr, patience 입니다.
- mode: 'min' 또는 'max'로 설정합니다. min은 maric이 감소를 멈출때 max는 matric이 증가를 멈출때 사용
- factor: 감소시킬 비율
- min_lr: 최소 learning rate
- patience: metric이 향상이 안될때 몇번을 참을지 횟수
scheduler = ReduceLROnPlateau(optimizer=optimizer,
mode='min', factor=0.5, min_lr=-1e-7, patience=10)
7. CosineAnnealingLR
- PyTorch에서 제공하는 기본 LR Scheduler 입니다.
- Cosine 곡선을 그리면서 learning rate가 진동합니다.
- 최신 모델에서는 learning rate를 단순히 감소 시키는 방법 대신에 진동하는 방식을 많이 사용하고 있습니다.
- 파라미터는 t_max, eta_min 입니다.
- t_max: 사이클 반주기 Step 크기 값
- eta_min: learning rate 최소 값
scheduler = CosineAnnealingLR(optimizer=optimizer, T_max=10, eta_min=1e-6)
T_max가 10으로 설정되어 있으므로 반주기 10이며 eta_min의 1e-6 최소값 만큼만 감소했다가 다시 증가 합니다.
8. CosineAnnealingWarmRestarts
- PyTorch에서 제공하는 기본 LR Scheduler 입니다.
- CosineAnnealingLR 마찬가지로 Cosine 곡선을 그리면서 learning rate가 진동합니다.
- 다른점은 T_mult 파라미터가 추가 되었는데 T_mult 값만큼 주기가 반복되면서 최초 주기값이 증가하게 됩니다.
- 파라미터는 T_0, T_mult, eta_min 입니다.
- T_0: 사이클의 최초 주기값
- T_mult: 최초 주기값의 증가값(사이클이 반복되면 T_0에 곱해줄 값)
- eta_min: learning rate 최소 값
scheduler = CosineAnnealingWarmRestarts(optimizer=optimizer, T_0=10, T_mult=2, eta_min=-1e-5)
9. CosineAnnealingWarmUpRestarts - Custom
- Custom 버전의 LR Scheduler 입니다.
- CosineAnnealingWarmRestarts의 업그레이드 버전이며 Cosine 곡선을 그리면서 learning rate가 진동합니다.
- 다른점은 Warmup start 기능과 learning rate 최대값이 감소하는 기능이 추가 되었습니다.
- 파라미터는 T_0, T_mult, eta_max, T_up, gamma 입니다.
- T_0: 사이클의 최초 주기값
- T_mult: 최초 주기값의 증가값(사이클이 반복되면 T_0에 곱해줄 값)
- T_up: Warmup의 주기값
- eta_max: learning rate 최대 값
- gamma: 주기가 반복될수록 eta_max가 감소하는 비율
scheduler = CosineAnnealingWarmUpRestarts(optimizer=optimizer,
T_0=20, T_mult=1, eta_max=1e-1, T_up=10, gamma=0.5)
예제 git-hub 주소: https://github.com/amahiner7/LearningRateScheduler_Pytorch
GitHub - amahiner7/LearningRateScheduler_Pytorch: Pytorch-LR scheduler and Custom LR scheduler
Pytorch-LR scheduler and Custom LR scheduler. Contribute to amahiner7/LearningRateScheduler_Pytorch development by creating an account on GitHub.
github.com