勾配消失問題
勾配
○勾配の伝播
ニューラルネットワークではこの勾配が出力側から入力側に伝わっていきます。
勾配は層を通過するために通過する層の勾配の影響を受けます。すなわち層を通過するとそれまで伝わってきた勾配に層の勾配がかけられていきます。
○勾配消失問題
勾配が掛け合わせることが勾配消失問題の原因。
ニューラルネットワークは層が暑いほど複雑な特徴を見つけ出せるため層が厚くなりがち。 層を厚くすればするほど入力に近い層における勾配の計算は複雑になり勾配の値として小さな値が続いた場合その値が掛け合わせることによって入力に近い層の勾配は非常に小さくなる。
コンピューターが表現される値の範囲が限られているため勾配が非常に小さくなるとコンピューター上では0として扱われる。
一旦勾配が0になるとそれ以降の勾配も0になり学習がうまく進まないこれを勾配消失問題という。
バッチ正規化と呼ばれる方法で変換しておく方法がある
勾配消失の原因
勾配消失の主な原因は、活性化関数とネットワークの深さ
活性化関数の選択: 古典的な活性化関数であるシグモイドやtanhは、入力の絶対値が大きくなるとその導関数(勾配)がほぼゼロに近づきます。
これは、入力の値が大きいか小さい場合に、出力の変化が非常に小さくなるためです。
その結果、勾配が消失し、重みの更新がほとんどまたは全く行われなくなります。
深いネットワーク:
ネットワークが深い場合、誤差逆伝播時に勾配が各層を通過する過程で、その勾配がどんどん小さくなっていくことがあります。特に、多くの層を持つネットワークでは、初期層に到達する頃には、勾配が非常に小さくなることが多いです。
解決策
勾配消失問題に対処する方法はいくつかあります:
ReLUとその派生形: 活性化関数としてReLU(Rectified Linear Unit)やLeaky ReLU、Parametric ReLUなどを使用します。ReLUは正の入力に対しては線形(そのままの値を出力)であり、負の入力に対しては0を出力します。この性質が勾配消失を防ぐのに役立ちます。
重みの初期化: 重みの初期化を適切に行うことも重要です。例えば、He初期化やGlorot(Xavier)初期化などが、深いネットワークでの学習効率の向上に寄与します。
バッチ正規化: 各層の入力を正規化することで、学習プロセスを安定させ、勾配消失問題を緩和します。
残差ネットワーク(ResNet): 層間でのショートカット(スキップ接続)を導入し、入力を直接後の層に伝えることで、深いネットワークでも効果的に勾配が伝播するよう設計されています。