解答と解説を表示
<h4>バックプロパゲーションと連鎖律 (乗算ノード)</h4>
<p>バックプロパゲーション(誤差逆伝播法)は、ニューラルネットワークなどの計算グラフにおいて、最終的な損失 \(L\) に対する各パラメータや中間変数の勾配を効率的に計算する手法です。この計算の基本原理は数学の<strong>連鎖律(Chain Rule)</strong>です。</p><p>計算グラフの観点から見ると、あるノード(ここでは乗算関数 \(f\))の出力 \(f\) に関する勾配(<strong>上流からの勾配</strong> \(\frac{\partial L}{\partial f}\)が与えられたとき、そのノードの入力(ここでは $x,y$)に関する勾配(<strong>下流への勾配</strong> \(\frac{\partial L}{\partial x}\) , \(\frac{\partial L}{\partial y}\) を計算することが目標です。</p><p>連鎖律によれば、下流への勾配は、上流からの勾配に「<strong>ローカル勾配</strong>(そのノード自体の出力の、入力に関する偏微分)」を乗じることで求められます。</p>
<div class="formula">
$\frac{\partial L}{\partial \text{入力}} = \frac{\partial L}{\partial \text{出力}} \times \frac{\partial \text{出力}}{\partial \text{入力}}$
</div><h5>今回の問題における計算 (\(\frac{\partial L}{\partial x}\) の計算)</h5>
<p>入力 \(x\) に関する勾配 \(\frac{\partial L}{\partial x}\) を計算します。</p>
<ul>
<li>上流からの勾配: \(\frac{\partial L}{\partial f} = 0.5\)</li>
<li>出力: \(f\)</li>
<li>入力: \(x\)</li>
</ul>
<p>連鎖律の式は以下のようになります。</p>
<div class="formula">
$\frac{\partial L}{\partial x} = \frac{\partial L}{\partial f} \times \frac{\partial f}{\partial x}$
</div><h6>ステップ1: ローカル勾配 (\(\frac{\partial f}{\partial x}\)) の計算</h6>
<p>関数 \(f(x, y) = x \times y\) を \(x\) で偏微分します(\(y\) は定数として扱います)。</p>
<div class="formula">
$\frac{\partial f}{\partial x} = \frac{\partial}{\partial x}(x \times y) = 1 \times y = y$
</div>
<p>(同様に、\(\frac{\partial f}{\partial y} = x\) となります。)</p><h6>ステップ2: 連鎖律の適用</h6>
<p>求めたローカル勾配 \(\frac{\partial f}{\partial x} = y\) と、与えられた上流からの勾配 \(\frac{\partial L}{\partial f} = 0.5\) を用いて、\(\frac{\partial L}{\partial x}\) を計算します。計算には現在の入力値 \(y = -2\) を使用します。</p>
<div class="formula">
$\frac{\partial L}{\partial x} = \frac{\partial L}{\partial f} \times \frac{\partial f}{\partial x} = 0.5 \times y = 0.5 \times (-2) = -1.0$
</div><p>したがって、入力 \(x\) に関する損失 \(L\) の勾配は <strong>-1.0</strong> です。</p><div class="key-point">
<div class="key-point-title">乗算ノードのバックプロパゲーション</div>
<p>乗算ノード \(f = x \times y\) のバックプロパゲーションでは、上流からの勾配 \(\frac{\partial L}{\partial f}\) が与えられると、下流の各入力への勾配は以下のように計算されます。</p>
<ul>
<li>\(\frac{\partial L}{\partial x} = \frac{\partial L}{\partial f} \times y\) (上流勾配に、<strong>もう一方の入力値</strong>を掛ける)</li>
<li>\(\frac{\partial L}{\partial y} = \frac{\partial L}{\partial f} \times x\) (上流勾配に、<strong>もう一方の入力値</strong>を掛ける)</li>
</ul>
<p>これは「勾配をスイッチして渡す」ような振る舞いと覚えられます。</p>
</div>