アルゴリズム編

最適化アルゴリズム、損失関数問題に関する計算問題

単純な関数のバックプロパゲーション (乗算ノード, ∂L/∂x) レベル1

関数 \(f(x, y) = x \times y\) を考えます。入力が \(x = 4, y = -2\) のとき、出力は \(f = -8\) です。出力 \(f\) に関する最終的な損失 \(L\) の勾配が \(\frac{\partial L}{\partial f} = 0.5\) である場合、入力 \(x\) に関する損失 \(L\) の勾配、すなわち \(\frac{\partial L}{\partial x}\) を計算してください。

解説
解答と解説を表示
<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>
問題 1/3
カテゴリ一覧に戻る