トレーニングのヒント
より良いトレーニング結果を得る方法
トレーニングのヒント。
モデルのバイアス
モデルが単純すぎます。
解決策: モデルを再設計して、より柔軟性を高めます。
最適化
臨界点(ローカルミナマの鞍点と鞍点鞍面を含む差分が 0 となる点)が原因で最適化が失敗します。
例証します:
-
パラメーターが追加されるたびに、次元は 1 ずつ増加し、極小値の代わりに鞍点を生成することが容易になります。
-
経験上、極小値はそれほど一般的ではないため、多くの場合、鞍点を使用してより少ない最適化を行うことができます。
-
次に、鞍点まで Less の値を減らし続けます。
ヘシアン行列の最適化
臨界点に行くとき、勾配は 0 になり、緑色のアイテムは 0 になります。
H はパラメータ更新の方向を教えてくれます。
サドル点に遭遇した場合は、ヘッセ行列の負の固有値を使用して、対応する固有行列 μ、θ - θ ' = μ、次にθ ' = θ - μ を見つけることができ、L(θ )。
しかし、この方法はヘッセ行列を計算する必要があり、2次導関数を必要とし、さらに行列の固有値と固有行列を求める必要があり、計算量が非常に多くなるため、一般には実用化されていない。
小ロット
小さなバッチの方が、大きなバッチよりも良い結果が得られる傾向があります。
- 勾配降下法がスタックした場合、バッチの変更がスタックしない可能性があり、ローカル ミナマに落ちて抜け出せないという問題を回避できます。これは、バッチ数が多いことの利点です。
勾配降下 + 運動量
物理学における慣性をシミュレートするという考え方: 動きの方向は、勾配の方向だけでなく、動きの前のステップの方向にも依存します。
動き = 最後のステップの動きから現在の勾配を引いたもの。
- これにより、ローカルミナマに落ちて抜け出せないという問題をある程度回避することができる。
反復によれば、各動き m i は、前の i - 1 回の勾配によって表すことができます。
適応学習率
損失が減少しなくなっても、勾配は必ずしも実際に小さくなるわけではありません。
したがって、各パラメータの学習率をカスタマイズする必要があります。
左図のように誤差曲面の谷にはまってしまうことがありますが、学習率は固定されているため、それ以上減らすことができなくなります。
したがって、学習率を直接下げることで問題は解決するのではないか?
ただし、学習率を直接下げるとトレーニングが「谷」に入る可能性がありますが、より滑らかな場所では学習率が小さすぎるため、トレーニングを進めることが困難になります。
したがって、次のことが望ましいです。
- 学習率は滑らかな方が大きくなります。
- 急な場所では学習率が小さくなります。
解決:
元の学習率を σ で割ります。
σ を計算するには一般に 2 つの方法があります
- 二乗平均平方根
- RMSプロップ
- アダム
二乗平均平方根
σ は、前のトレーニングから取得された勾配合計の平方根です。
以前の各勾配は σ に等しく寄与します。
同じパラメータの学習率はほぼ同じ値であると仮定しますが、時間の経過とともに同じパラメータの学習率も変化します。この欠点は、 RMSPropメソッドを使用することで回避できます。
RMSプロップ
σ は最近の勾配の影響を強く受けますが、過去の勾配の影響はあまり受けません。
アダム
RMSProp + 勢い
最も一般的に使用される最適化方法には、Pytorch で適切に実装されたスイートがあります。
学習率のスケジューリング
比較的スムーズなところでトレーニングを積み続けた場合、相対的にσの値が小さくなり、1動作のステップサイズが大きくなるため、一度エラーが発生すると以下のような状況が発生しやすくなります。
学習率のスケジュール設定を使用すると、学習率のサイズを時間の経過とともに変化させ、このエラーを排除できます。
学習率のスケジューリングには 2 つの方法があります。
- 学習率の減衰
- Warm Up : 古い論文などでよく見かけるWarm Up法ですが、σは統計的なデータ量なので最初は正確ではありません。したがって、最初は学習率を比較的小さくし、σ 統計がより正確になったら学習率を増やします。
損失
損失関数の選択は、最適化の難易度に影響します。
たとえば、分類問題では、クロスエントロピーは平均二乗誤差 (MSE) よりもうまく機能するため、より一般的に使用されます。
上の図からわかるように、平均二乗誤差は損失が比較的大きく、勾配が小さいため、トレーニングが内部で停止する可能性があります。損失が比較的大きいクロスエントロピーでは、勾配も大きいため、トレーニングに便利です。
最適化の概要
過学習
トレーニング データではうまく機能しますが、テスト データではうまく機能しません。
より多くのトレーニング データ - 最も効果的なソリューション
-
新しいデータを収集します。
-
データ拡張: データの独自の理解に従って、元のデータを変換し、トレーニング データの数を増やします (画像を左右に反転、拡大または縮小)
モデルの弾性を減らす
-
パラメータを減らし、パラメータを共有する
-
機能が少ない
-
早期停止
-
正則化
-
脱落
ミスマッチ
-
トレーニング データとテスト データの分布は異なります。
-
データがどのように生成されるかに注意してください。