2025年3月29日土曜日

勾配消失と回避策

最後に勾配消失。昔はこれがネックだったようです。


1. シグモイド関数の微分の最大値

シグモイド関数の微分は、その定義から以下のように導出される:

σ′(x) = σ(x)(1 − σ(x))

σ(x) の値は常に 0 と 1 の間にある。ここで、関数 g(u) = u(1 − u) (ただし u = σ(x))が u ∈ (0, 1) で最大になる u の値を求めるため一階微分を計算すると:

g(u) = u(1 − u)   ⇒   g′(u) = 1 − 2u

g′(u) = 0 となる点を求めると:

1 − 2u = 0   ⇒   u = 0.5

この u = 0.5 における g(u) の値を求めると:

g(0.5) = 0.5 × (1 − 0.5) = 0.25

よって、σ'(x) の最大値は 0.25 となる。つまり、シグモイド関数の微分は入力 x に依存して変化するが、その最大値は 0.25 である。なお、σ(x) が 0 や 1 に近づくと、σ′(x) は 0 に近づく(つまり、勾配が消失する)ため、シグモイド関数は入力が大きく偏った場合に飽和しやすい特徴がある。

逆伝播において各層の誤差項は、前層の誤差項に対して、活性化関数の微分を掛け合わせる形で計算される。シグモイド関数を用いた場合、その微分は最大でも 0.25 であり、通常はそれ以下の値となる。従って、仮に各層での微分の平均値が 0.25 だとすると、層 L(最終層)からある層 l に伝播する際に、誤差項は理論上以下のように減衰する:

δl ∝ (0.25)(L − l)

これは、各層で勾配に 0.25(またはそれ以下)のスケーリングがかかるため、層数が増えるとその積が指数関数的に小さくなり、特に入力層近くでは勾配がほとんど無視できるほど小さくなってしまうことを示している。


2. 現代における勾配消失問題の回避策

勾配消失問題は深層学習の大きな課題であった。しかし、様々な工夫により現在ではこの問題を軽減する手法が主流となっている。主な回避策は以下の通り:

  • 活性化関数の選択:
      シグモイドやハイパボリックタンジェント(tanh)は出力が飽和しやすいのに対し、ReLU(Rectified Linear Unit)やその変種(Leaky ReLU, Parametric ReLU, ELU など)は、入力が正の場合ほぼ線形なため勾配が消失しにくくなっている。
      ReLU は以下のように定義される:

      ReLU(x) = max(0, x)

  • 重みの初期化:
      Xavier初期化やHe初期化など、層毎の出力の分散を一定に保つ初期化手法を用いると、信号の前向き伝播や逆伝播中の値の極端な変動を抑え、勾配消失を防ぐ効果がある。
  • 正規化技術:
      バッチ正規化(Batch Normalization)は、各ミニバッチごとに内部表現を正規化することで、各層の入力分布のばらつきを抑え、勾配消失や勾配爆発のリスクを低減する。
  • 残差学習:
      ResNetではスキップ接続(shortcut connections)を導入することにより、勾配が直接初期層まで伝播できるため、非常に深いネットワークでも効果的に学習が進む。


0 件のコメント:

コメントを投稿