連鎖律 チェーンルール 合成関数の微分 バックプロパゲーション
連鎖律とは
連鎖律(Chain Rule)
合成関数 y = f(g(x)) の微分:
dy/dx = (dy/du) × (du/dx)
ここで u = g(x)
「外側の微分」×「内側の微分」
例
y = (3x + 2)² を微分する
u = 3x + 2 とおくと y = u²
dy/du = 2u、du/dx = 3
dy/dx = 2u × 3 = 6(3x + 2)
多変数への拡張
多変数連鎖律
z = f(u, v)、u = g(x, y)、v = h(x, y) のとき
∂z/∂x = (∂z/∂u)(∂u/∂x) + (∂z/∂v)(∂v/∂x)
すべての経路を通じた影響を足し合わせる。
計算グラフ
連鎖律は計算グラフとして視覚化できる。各ノードが演算、エッジが値の流れを表す。
| 方向 | 名前 | 計算内容 |
|---|---|---|
| 入力→出力 | フォワードパス | 値の計算 |
| 出力→入力 | バックワードパス | 勾配の計算(連鎖律) |
バックプロパゲーション
ニューラルネットワークの学習アルゴリズム。連鎖律を使って、出力層から入力層へ向かって勾配を逆伝播させる。
バックプロパゲーションの流れ
1. フォワードパス:入力から出力を計算
2. 損失計算:出力と正解の差を計算
3. バックワードパス:連鎖律で各パラメータの勾配を計算
4. 更新:勾配を使ってパラメータを更新
自動微分
PyTorch、TensorFlow などは自動微分(Automatic Differentiation)を実装している。計算グラフを記録し、連鎖律を自動適用して勾配を計算。
| 方式 | 説明 | 例 |
|---|---|---|
| フォワードモード | 入力から出力へ微分を伝播 | 入力変数が少ない場合に効率的 |
| リバースモード | 出力から入力へ微分を伝播 | 出力が少ない場合に効率的(ML向き) |
実務での応用
WEB開発での応用
依存関係の追跡:変数の変更が他の変数にどう波及するか。
リアクティブプログラミング:値の変更を依存先に自動伝播(Vue, React)。
AI/MLでの応用
深層学習の学習:すべての勾配計算は連鎖律に基づく。
勾配消失/爆発:層が深いと連鎖律の積が極端に小さく/大きくなる問題。
残差接続:勾配の経路を追加して消失問題を緩和(ResNet)。
勾配チェックポイント:メモリ節約のため一部を再計算。
深掘りリンク
- Wikipedia: 連鎖律
- Wikipedia: バックプロパゲーション
- 論文:Rumelhart et al. (1986) "Learning representations by back-propagating errors"
- 次のステップ:勾配降下法の詳細