多変数関数の偏微分・全微分
複数の変数が絡み合う関数を「1変数ずつ」切り取って理解する微分の拡張
- 1
- 偏微分とは、多変数関数 において1つの変数だけを動かし、他の変数を定数とみなして行う微分のこと
- 2
- 偏微分係数を成分に並べたベクトル「勾配 」は、関数が最も急激に増加する方向とその増加率を表す
- 3
- 機械学習の損失関数は多数のパラメータを持つ多変数関数であり、勾配降下法は各パラメータについての偏微分(勾配)を使ってパラメータを一斉に更新する
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
偏微分とは、多変数関数 $f(x,y)$ において1つの変数だけを動かし、他の変数を定数とみなして行う微分のこと
身につく武器・思考力
偏微分係数を成分に並べたベクトル「勾配 $\nabla f = (\partial f/\partial x,\ \partial f/\partial y)$」は、関数が最も急激に増加する方向とその増加率を表す
実社会・ITでの活躍現場
- •機械学習における多パラメータ損失関数の勾配計算
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
カラーグリッドとして表示された2変数関数 の「地形図」の上で、スライダーを使って点 を動かしてみよう。その地点における (x方向の傾き)と (y方向の傾き)が矢印と数値でリアルタイムに表示され、色の濃淡(関数値の高低)とあわせて、多変数関数の「地形」を体感できる。
↑ 色の濃淡は関数値 f(x,y) の高低(黄色が高い・青が低い)を表す地形図。スライダーで点(x,y)を動かすと、赤い矢印がx方向の傾き(∂f/∂x)、緑の矢印がy方向の傾き(∂f/∂y)を表し、矢印の向きと長さがその地点での勾配ベクトルの成分にほぼ対応する。
のとき、点 における偏微分 の値はいくつか?
Layer 2 — 定義・受験・証明
定義
2変数関数 の に関する偏微分係数は、 を固定して のみを変数とみなした極限として定義される。
同様に に関する偏微分 も定義される。これらを成分に持つベクトルを「勾配(グラディエント)」と呼ぶ。
また、 の微小変化 に対する の変化量の1次近似を「全微分」と呼び、 で与えられる。
公式・数理モデル
証明・導出
勾配が最大増加方向を示すことの証明: 点 から単位ベクトル の方向へ進むときの の変化率(方向微分)は、全微分の式より、
ここでベクトルの内積の性質 ( は と のなす角、)を用いると、
これは 、つまり が と同じ向きのときに最大値 をとる。 したがって勾配ベクトル の指す方向こそが、関数値が最も急激に増加する方向であり、その大きさ が最大増加率そのものである(逆向き は最も急激に減少する方向)。
押さえておきたいポイント
- 偏微分は「他の変数を一時的に定数とみなす」だけで、1変数の微分公式(積の微分・合成関数の微分など)がそのまま使える
- 勾配ベクトル は等高線( が一定の曲線)に対して常に直交する
- 極値の必要条件は (すべての偏微分が同時に0)であり、これは1変数関数の の自然な拡張である
- 勾配降下法では、パラメータベクトル を と更新することで、損失関数 が最も急激に減少する方向へパラメータを動かす
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
機械学習における多パラメータ損失関数の勾配計算
機械学習モデルの損失関数は、重み・バイアスなど何百万もの変数を持つ多変数関数である。各パラメータについての偏微分(勾配)を数値的または解析的(誤差逆伝播法)に求め、そのベクトルに沿ってパラメータを更新することで、損失を最小化する。ここでは単純な2変数関数で数値微分による勾配計算の仕組みを示す。
1// 中心差分法による数値偏微分(1変数の微分の多変数への素朴な拡張)2function partialDerivative(3 f: (x: number, y: number) => number,4 x: number,5 y: number,6 variable: "x" | "y",7 h = 1e-58): number {9 if (variable === "x") {10 return (f(x + h, y) - f(x - h, y)) / (2 * h);11 } else {12 return (f(x, y + h) - f(x, y - h)) / (2 * h);13 }14}1516// 勾配ベクトル ∇f = (∂f/∂x, ∂f/∂y) を計算17function gradient(18 f: (x: number, y: number) => number,19 x: number,20 y: number21): { dfdx: number; dfdy: number } {22 return {23 dfdx: partialDerivative(f, x, y, "x"),24 dfdy: partialDerivative(f, x, y, "y"),25 };26}2728// 例: 損失関数 f(x, y) = (x - 3)^2 + (y + 1)^2(凸関数、最小値は (3, -1))29const loss = (x: number, y: number) => (x - 3) ** 2 + (y + 1) ** 2;3031// 多変数版の勾配降下法32function gradientDescent2D(33 f: (x: number, y: number) => number,34 start: { x: number; y: number },35 learningRate = 0.1,36 steps = 5037) {38 let { x, y } = start;39 for (let i = 0; i < steps; i++) {40 const { dfdx, dfdy } = gradient(f, x, y);41 x -= learningRate * dfdx; // 各パラメータを勾配の逆方向に更新42 y -= learningRate * dfdy;43 }44 return { x, y };45}4647console.log(gradientDescent2D(loss, { x: 0, y: 0 }));48// (3, -1) に近い値へ収束する
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元