PyTorchではoptimizerの学習率 (Learning Rate) を動的に変更するUtilityがある。
このUtilityはSchedulerと呼ばれ、Class名では○○LRと名付けられている.
Schedulerのタイプ
更新の仕方によって以下のように分類される。
- LambdaLR:
- StepLR: x epochごとにlrをγ倍するタイプ. (例: 30 epochごとに0.1倍) *MultiStepLR: StepLRで epoch間隔を任意に設定できるタイプ
- ExponentialLR: 毎epochでγ倍するタイプ, 要はexponential decay
- CosineAnnealingLR:
- ReduceLROnPlateau:
動作
optimizerを保持するインスタンスとして生成し、scheduler.step()でepochの進展を通知する。設定したepochに応答してoptimizerの学習率が自動更新される。
実装
_LRSchedulerがベース.
step()すると内部epoch++を行ったうえでoptimizer.param_groupsのparam_group["lr"]をget_lr()で更新.
LambdaLR
base_lr * labmda(epoch)がlrになる模様.