ニューラル ネットワークのトレーニングが失敗する理由の概要

無理な最適化

現象(勾配が小さい):
1. モデルの損失は基本的に変化しない(勾配が消失する)
2. モデルの損失が最後に非常に高く収束する(局所最適に陥る)
ここに画像の説明を挿入
勾配が消失
する理由: 1.鞍点
2. 局所的な極値点 (最大値または最小値) に該当する

解決策 1 (テイラー拡張)

勾配が消える原因を特定する:
機械学習モデルの関数は特に複雑であるため、計算を簡略化するためにヘシアン行列を使用して近似します。
モデルのパラメータ θ を θ'=θ+Δθ とし、θ でテイラー展開し、最初の 3 項を維持すると、次式が得られます このうち g は θ における L の傾きです、
ここに画像の説明を挿入H はヘッセ行列であり、計算方法は次のとおりです。
ここに画像の説明を挿入テイラー展開は次のとおりです。
ここに画像の説明を挿入局所的な極点に陥った場合、g は 0 になる傾向があり、無視できます。L(θ) と L( θ')は赤枠欄の式に依存します。
この時点で、次の 3 つの状況が考えられます。
すべての θ' について
1。 ∀ θ 、 ( θ − θ ' ) TH ( θ − θ ' ) > 0 の場合、局所最小値 1 です。 ∀θ の場合、 (θ - θ')^TH(θ-θ')>0、これは極小値です1. θの場合( θ _ _TH (θ_ _>0の場合、それは極小2です
。 ∀ θ 、( θ − θ ' ) TH ( θ − θ ' ) < 0 の場合、これは極大値 2 です。 ∀θ の場合、(θ-θ')^TH ( θ-θ')<0 の場合、それは極大値です2. θの場合( θ _ _TH (θ_ _<0の場合それは極大値です 3.
∀ θ 、 ( θ − θ ' ) TH ( θ − θ ' ) > 0 または ( θ − θ ' ) TH ( θ − θ ' ) < 0 の場合、サドルです。点 3. ∀θ、(θ-θ')^TH(θ-θ')>0 または (θ-θ')^TH(θ-θ')<0 の場合、鞍点です。3. θの場合( θ _ _TH (θ_ _>0または( θ _TH (θ_ _<0 それは鞍点です
が、すべての θ' を使い尽くすことはできないため、数学的結論を使用する必要があります:固有値
: 固有値 (下図の最大値と最小値の判断が間違っている
いつ
)として
、つまり u を特徴ベクトルとします。
ここに画像の説明を挿入
このようにして、網羅的な θ は次のように変換され、負の固有値に対応する固有ベクトルが見つかり、
θ − θ ' = u θ-θ'=uに従って計算されます。=u は
θ を取得し、θ' を更新します。

解決策 2 (バッチの変更)

バッチを設定します。ここに 2 つの写真があります。
ここに画像の説明を挿入大規模なバッチはスムーズに収束し、トレーニング速度は速いですが、テスト セットではパフォーマンスが低下することがよくあります。小さなバッチは、収束ノイズが大きく、トレーニング速度が遅いですが、テスト セットではパフォーマンスが良好であることがよくあります。お試しセット。
ここに画像の説明を挿入

解決策 3 (勢いを設定する)

運動量(運動量)
物理世界で考えると、小さなボールが高いところから斜面を滑り落ちたとき、極小点に遭遇すると、その運動量(慣性)により、しばらく前に突き進み続けます。交差点 前の坂道。
改良された勾配降下法:
運動量 + 1 = λ ∗ 運動量 − η ∗ G radientn 運動量^{n+1}=λ*運動量^n-η*勾配^n瞬間_ _ _ _ _ _ _n + 1=瞬間_ _ _ _ _ _ _nグラデーション_ _ _ _ _ _ _n
θ n + 1 = θ n + 運動量n + 1 θ^{n+1}=θ^n+運動量^{n+1}n + 1=n+瞬間_ _ _ _ _ _ _n + 1
(ちょっとしたギャンブルのような気がします。勢いの前提として、この山をひっくり返すと良い結果が得られるということですが、実際は必ずしもそうではありません。もしかしたら、これをひっくり返すと効果が悪くなるかもしれません)山)
ここに画像の説明を挿入

モデルショック

現象:
1. 損失は変化しないが、勾配は依然として非常に大きい
ここに画像の説明を挿入

解決策 1 (Adagrad 法)

2 つのパラメーターでモデルをトレーニングする場合、学習率が大きすぎると振動を繰り返し、学習率が小さすぎると後の段階でのトレーニングが遅くなります。
ここに画像の説明を挿入
したがって、勾配に応じて学習率を調整する必要があり、勾配が大きい場合には学習率を小さくし、勾配が小さい場合には学習率を大きくする必要がある。
学習率は、以下の図の赤いボックスに示されているように更新する必要があります。t は
ここに画像の説明を挿入
エポック数を示し、i はそれがどのパラメーターであるかを示します。t 番目のエポックの σ は次のように計算されます。
σ it = 1 t + 1 ∑ 1 ≤ t ≤ ng ( it ) 2 σ^t_i=\sqrt{\frac{1}{t+1}\sum_{ \mathclap{1 \le t\le n}} g(^t_i)^2}p=t+111 t ng (2
上記のアルゴリズムは、Adagrad 最適化手法で使用されます。
ただし、上記の方法の欠点は、各勾配が同等に重要であるとみなされるため、後の調整速度が遅くなる可能性があることです。

解決策 2 (RMSProp メソッド)

計算式は上記と同じで、赤枠内のt番目エポックのσ計算方法が以下のように変わります。
σ it = α ( σ it − 1 ) 2 + ( 1 − α ) ( git ) 2 σ ^t_i=\sqrt{α(σ^ {t-1}_i)^2+(1-α)(g^t_i)^2}p=a ( pt 12+( 1a ) ( g2
異なる時間帯に生成された勾配には異なる重みが与えられると考えられ、生成される勾配が早いほど重みが小さくなり、学習率の調整速度を高めることができる。

解決策 3: (アダム)

Adam=RMSProp+Momentum は、
次のパラメータ更新関数と等価です。
σ it = α ( σ t − 1 ) 2 + ( 1 − α ) ( gt ) 2 σ^t_i=\sqrt{α(σ^{t - 1})^2+(1-α)(g^t)^2}p=a ( pt 1 )2+( 1a ) ( gt )2
運動量n + 1 = λ ∗ 運動量n − η σ n ∗ G radientn 運動量^{n+1}=λ*運動量^n-\frac {η}{σ^n}*勾配^n瞬間_ _ _ _ _ _ _n + 1=瞬間_ _ _ _ _ _ _npnhグラデーション_ _ _ _ _ _ _n
θ n + 1 = θ n + 運動量n + 1 θ^{n+1}=θ^n+運動量^{n+1}n + 1=n+瞬間_ _ _ _ _ _ _n + 1を単純に理解すると、勾配更新速度に重みを付加し、勾配更新方向に重みを付加すること
に相当します

トレーニング損失関数の最適化

分類問題で MES とクロスエントロピー損失関数を使用する場合、MSE を使用する場合、MSE の導関数項目には分類問題を導出する際の勾配の 2 分の 1 が含まれるため、勾配が大きい場合は分類問題には MES が使用されます. 電車が起きられない。
ここに画像の説明を挿入注: pytorch では、クロス関数はデフォルトでソフトマックスを追加するため、ネットワークの最後の層にソフトマックスを追加する必要はありません。

おすすめ

転載: blog.csdn.net/qq_45931661/article/details/124663257