解答と解説を表示
<h4>Sigmoid関数と勾配消失問題</h4>
<p>シグモイド関数は、出力を (0, 1) の範囲に収めるため、かつてはニューラルネットワークの活性化関数として広く用いられていました。しかし、特にネットワークが深くなる(層数が多くなる)と、ある深刻な問題を引き起こすことが知られています。</p><h5>Sigmoid関数の微分値</h5>
<p>バックプロパゲーションでは、活性化関数の微分値(ローカル勾配)が重要になります。シグモイド関数 \(\sigma(z)\) の微分は \(\sigma '(z) = \sigma(z)(1 - \sigma(z))\) となります。この微分値のグラフを描くと、以下の特徴がわかります。</p>
<ul>
<li>最大値は \(z=0\) のときの 0.25 です。</li>
<li>入力 \(z\) の絶対値が大きくなる(\(z\) が大きな正の値または大きな負の値になる)と、微分値は急速に 0 に近づきます。この現象を「勾配が飽和する」と言います。</li>
</ul><h5>勾配消失問題 (Vanishing Gradient Problem)</h5>
<p>バックプロパゲーションでは、勾配は出力層から入力層に向かって、各層の活性化関数の微分値などを<strong>乗算しながら</strong>伝播していきます。シグモイド関数のように、微分値の最大値が 1 より小さい(最大でも 0.25)場合、層を遡るごとに勾配の値が指数関数的に小さくなってしまいます。</p>
<p>深いネットワークでは、入力層に近い層に到達する頃には、伝播してきた勾配がほとんど 0 になってしまうことがあります。勾配が 0 に近いということは、その層のパラメータを更新しても損失がほとんど変化しないことを意味し、結果として入力層に近い層の学習が全く進まなくなってしまいます。これが<strong>勾配消失問題</strong>です。<strong>(選択肢3が該当)</strong></p><h5>他の選択肢の検討</h5>
<ul>
<li>選択肢1: 出力が常に正であることは事実ですが、これが勾配消失の直接的な原因ではありません。むしろ、出力がゼロ中心でないことが別の問題(学習の収束速度低下)を引き起こす可能性はあります。</li>
<li>選択肢2: 指数関数の計算は比較演算よりは高コストですが、現代の計算環境では通常、これが学習を妨げる主原因とはなりにくいです。</li>
<li>選択肢4: シグモイド関数の微分は解析的に簡単に計算できます。</li>
</ul><div class="key-point">
<div class="key-point-title">勾配消失問題への対策</div>
<ul>
<li><strong>ReLUとその派生関数:</strong> ReLU関数は正の領域で勾配が 1 であるため、勾配消失を大幅に緩和できます。Leaky ReLU, Parametric ReLU (PReLU), Exponential Linear Unit (ELU) などの派生形も提案されています。</li>
<li><strong>適切な重みの初期化:</strong> He初期化やXavier初期化など、勾配が爆発・消失しにくいように重みを初期化する手法があります。</li>
<li><strong>バッチ正規化 (Batch Normalization):</strong> 各層の入力を正規化することで、勾配の安定化を図ります。</li>
<li><strong>残差接続 (Residual Connections):</strong> ResNetなどで用いられる、勾配が層をスキップして伝播できる経路を作る手法です。</li>
</ul>
</div>
<p>したがって、シグモイド関数が深いネットワークで問題となる主な理由は、入力の絶対値が大きい領域で勾配が飽和し、バックプロパゲーションにおいて勾配が消失しやすくなるためです。</p>