Chapter 12

勾配(逆伝播)

パラメータを少し変えたとき、損失がどの方向にどれだけ変わるかを表す。

チャプター別 ディープラーニング図

チャプターを進めるたびに、下の図が少しずつ埋まります。ここまでの構造です。

XHY

Y → H → X

ディープラーニングで見る勾配

勾配は「重み(パラメータ)を少し変えたとき、損失(誤差)がどれだけ・どの方向に変わるか」を教えてくれます。「誤差を減らすにはどちらに進めばいいか」を指すコンパスだと考えてください。

例え: 目隠しをして山を下ることを想像してください。足元の傾き(勾配)を感じて、下り坂の方向に一歩踏み出します。勾配の逆方向に進むと谷底(損失の最小値)にたどり着けます。これが勾配降下法です。

誤差逆伝播は勾配を出力から入力に向かって一層ずつ逆に伝えていく手法です。微分の連鎖律を使い、すべての層のすべての重みの勾配を一回のパスで効率的に計算します。

AIの学習 = 勾配を見て重みを更新することです。勾配がなければ「どの方向に調整すればいいか」が分からず、学習そのものが不可能です。勾配はディープラーニングの学習の心臓部です。

学習率は「一歩でどれだけ進むか」を制御します。大きすぎると谷を飛び越え(発散)、小さすぎると到達に時間がかかります。Adamなどのオプティマイザは勾配の大きさに応じてステップ幅を自動調整します。

勾配が大きすぎる(勾配爆発)と学習が不安定になり、小さすぎる(勾配消失)と初期の層がほとんど学習しません。勾配クリッピングバッチ正規化スキップ接続などの技術でこれを防ぎます。

すべてのAIモデル: ChatGPT、画像認識、レコメンドシステム──すべてのモデルが勾配を計算して重みを更新します。順伝播→損失計算→逆伝播で勾配→重み更新。この4ステップを数百万回繰り返すのが学習です。

順伝播と逆伝播: 順伝播は Z = W·X を前方向に計算し、逆伝播は勾配 dW, dX を逆方向に伝えます。常にペアで動作します。

ファインチューニング: ChatGPTを特定の用途に適応させるとき、新しいデータで勾配を計算して重みを少し調整します。勾配のおかげで事前学習済みモデルを素早く新しい目的に適応させられます。

問題の形: 式は順伝播 Z = W·X逆伝播 dZ = dW·Xのどちらかです。空白(?)はXの一成分Z(またはdZ)の一成分のどれか一つだけです。WとdWはすべて与えられています。

順伝播(Z = W·X): Zの一成分 = Wのその行Xの内積です。空白がZなら、その行のWとXを掛けて足します。空白がXなら、他のZとWの行から式を立ててそのX成分を求めます。

逆伝播(dZ = dW·X): 順伝播と同じ計算です。dZの一成分 = dWのその行Xの内積。空白がdZならdWのその行とXの内積、空白がXなら式からそのX成分を求めます。

勾配は関数の変化の向きと大きさを表すベクトルです。損失を減らすには勾配と逆の向きにパラメータを更新します。順伝播 Z=WXZ = W \cdot X、逆伝播 dZ=dWXdZ = dW \cdot X

順伝播Z=WXZ = W \cdot X逆伝播dZ=dWXdZ = dW \cdot X

順伝播
W
1
2
-1
2
-1
1
0
1
-1
·
X
-1
5
3
Z
6
-4
2
逆伝播
dZ
2
6
dW
2
-1
3
1
2
-1
·
X
-1
5
3

順伝播: Z = W·X(Wの各行とXの内積)

Z1 = (W 1行)·X = 1×(-1)+2×5+(-1)×3 = 6
Z2 = (W 2行)·X = 2×(-1)+(-1)×5+1×3 = -4
Z3 = (W 3行)·X = 0×(-1)+1×5+(-1)×3 = 2

逆伝播: dZ = dW·X(同じ構造、値は勾配)

dZ1 = (dW 1行)·X = 2×(-1)+(-1)×5+3×3 = 2
dZ2 = (dW 2行)·X = 1×(-1)+2×5+(-1)×3 = 6

線形層・隠れ層などでも同じ考え方で勾配を計算します。

問題では空白(?)はXの一成分か、Z(順伝播)・dZ(逆伝播)の一成分として出ます。

問題

Z=WXZ = W \cdot X または dZ=dWXdZ = dW \cdot X の空欄(?)を埋めなさい。

dZ = dW · X

X
1
2
-2
·
dW
2
0
-1
2
1
0
=
dZ
4
1 / 20