0. 各種オプティマイザの紹介
このブログを参照してください:さまざまなオプティマイザー SGD、AdaGrad、Adam、および LBFGS は何をしますか?
1. オプティマイザーの選択 (最初に次の 3 つを選択)
1.0. コードは pytorch を使用しています
1.1。SGD+モメンタム
optimer = optim.SGD(model.parameters(), lr=0.1, weight_decay=0.2, momentum=0.9, nesterov=True)
- weight_decay: L2 正則化ペナルティ係数
- 運動量: 慣性運動量
- Nesterov: Nesterov Accelerated Gradient はオプティマイザです。慣性が速すぎるのを防ぐために、勾配を測定して修正を行います。
- 上記のハイパーパラメータを調整する必要があります
1.2. アダム
optimer= optim.Adam(model.parameters(), lr=0.1, weight_decay=0)
- さまざまなパラメーターの適応学習率を生成する
- L2正則化なし
1.3. AdamW (Adam+L2 正則化)
optimer = optim.AdamW(model.parameters(), lr=0.1, weight_decay=0.2)
2.学習率の更新
学習率の更新を手動で設定します。あまり使用されず、SGD と組み合わせて使用できます。
step1.動的学習率を設定する
optimer = optim.SGD(model.parameters(), lr=0.1, weight_decay=0.2, momentum=0.9, nesterov=True)
scheduler = optim.lr_scheduler.LinearLR(optimer , start_factor=1.0, end_factor=0.6, total_iters=5)
start_factor: 開始重み係数
end_factor: 終了重み係数
total_iters: 反復係数
step2. モデルパラメータを更新しながら学習率を更新
optimer.step()
scheduler.step()
step3. 学習率
- 0.1*1.0=0.1
- 0.1*0.9=0.09
- 0.1*0.8=0.08
- 0.1*0.7=0.07
- 0.1*0.6=0.06
- 0.06
- 0.06
- もう変わらない