偏微分と勾配 — 曲面の傾きをベクトルで読む

変数が2つ以上ある関数 z = f(x, y) は「曲面」になります。その傾きを測る道具が偏微分、傾きの向きと大きさを1本の矢印にまとめたものが勾配 ∇f。機械学習の学習プロセスは、ほぼすべてこの矢印を頼りに動いています。

1. 変数が2つになったら — 他を止めて1つだけ動かす

1変数の微分は「x を少し動かしたら f がどれだけ変わるか」でした。2変数関数 f(x, y) では動かせる方向が無数にありますが、まずは片方を定数として固定し、もう片方だけを動かすことにします。これが偏微分です。

∂f/∂x = limh→0 [ f(x+h, y) − f(x, y) ] / h y は「ただの定数」とみなして x で普通に微分するだけ。∂f/∂y はその逆

幾何的には、曲面を y = 一定の平面でスパッと切ると1本の断面カーブが現れ、その接線の傾きが ∂f/∂x です。下のデモで断面を滑らせて確かめてください。

曲面を切る — 断面カーブの接線が偏微分
左=f(x,y) = sin(1.25x)·cos(1.25y) を上から見た図(明るい=高い、縞は等高線)。白い線が「切る位置」で、再生中は自動で滑ります。右=切り出した断面カーブ(水色)と、接点(白い点)での接線(オレンジ)。接線の傾きがその点の偏微分です。

2. 勾配ベクトル ∇f — 最も急な上りを指す矢印

x 方向の傾き ∂f/∂x と y 方向の傾き ∂f/∂y を並べてベクトルにしたものが勾配(gradient)です。

∇f = ( ∂f/∂x , ∂f/∂y ) n 変数なら n 個の偏微分を並べた n 次元ベクトル。読みは「ナブラ f」

ただの「偏微分の詰め合わせ」に見えますが、この矢印には強力な幾何的意味があります。下の図で点をドラッグして、矢印がいつも坂を最も急に登る向きを指し、等高線と直角に交わることを確かめてください。

勾配ベクトル場 — 点をドラッグして ∇f を観察
図の上で点をドラッグ
青い小矢印=各点の ∇f(矢印場)。オレンジの太矢印=ドラッグ中の点の勾配で、最も急な上りを指します。白い帯=その点を通る等高線、水色の破線=等高線の接線方向。勾配と等高線は常に直交(白い直角マーク)します。「鞍点」を選んで原点付近に点を置くと、∇f = 0 なのに山頂でも谷底でもない状態が見られます。
POINT — 勾配の2つの性質 ① ∇f はその点で f が最も急に増える方向を指し、長さ |∇f| は最大の傾きの大きさ。② ∇f は等高線(f が一定の曲線)と直交する。等高線に沿って動いても f は変わらないので、変化を最大にしたければ等高線を垂直に横切るしかない、と考えると自然です。
注意 — 鞍点という罠 ∇f = 0 になる点(停留点)は、極大・極小だけでなく、ある方向には谷、別の方向には山という鞍点のこともある。ニューラルネットの損失関数のような超高次元の世界では、停留点の大多数は極小ではなく鞍点であることが知られていて、「勾配がほぼ 0 になって学習が停滞する」原因のひとつになっている。

3. 勾配降下法 — −∇f に沿って谷を下る

∇f が「最も急な上り」なら、−∇f は「最も急な下り」です。損失関数 f を小さくしたい機械学習では、現在地の勾配を計算しては −∇f の方向に一歩進む、を繰り返します。歩幅を決める係数 η(イータ)が学習率です。

xt+1 = xt − η ∇f(xt) η = 学習率(1歩の大きさ)。この1行が深層学習の学習ループの心臓部
勾配降下の軌跡 — 学習率で挙動が激変する
クリックでスタート地点を変更
細長い谷 f(x,y) = (x² + 5y²)/2 を −∇f 方向に降りていきます。η = 0.05 ではじれったいほど遅く、0.3 あたりで谷を横切るジグザグが始まり、0.4 を超えると発散します(y 方向の曲率に対して歩幅が大きすぎるため)。ボールの気持ちで体感する版は 機械学習 03「勾配降下法」へ。

4. 連鎖律 — 合成関数の微分は「積」になる

実際のモデルは f(g(h(x))) のような何重もの合成関数です。合成関数の微分を支えるのが連鎖律(チェインルール)で、各段の微分(=変化の増幅率)を掛け算するだけで全体の微分が得られます。

dy/dx = dy/du · du/dx y = f(u), u = g(x) のとき。歯車の減速比が掛け算で合成されるのと同じ
連鎖律の歯車 — 増幅率は掛け算で伝わる
x の歯車を回すと、u は du/dx 倍の速さで、y はさらに dy/du 倍 — つまり x から見て du/dx × dy/du 倍の速さで回ります。「x を少し動かしたとき y がどれだけ動くか」という微分の意味そのものが、増幅率の掛け算として伝播していきます。
一歩先へ — 逆伝播 = 連鎖律の大規模適用 ニューラルネットの学習で使う誤差逆伝播法は、何百万個ものパラメータそれぞれについて ∂損失/∂パラメータ を求める作業で、正体はこの連鎖律を計算グラフ上で機械的に繰り返しているだけ。歯車の列が何百万本に増えたと思えばよい。しくみの詳細は DNN 04「誤差逆伝播法」で動かしながら学べます。

5. まとめ