Chapter 07
連鎖律:重ねた関数を解く、逆伝播の核心
関数を重ねて書いたものを微分するときは外の微分 × 内の微分をかければよいです。逆伝播の核心です。
チャプター別 数学図
チャプターを選ぶと、下の図がそのチャプターの内容に切り替わります。基礎数学の流れを一覧で確認できます。
重なった関数は → 内側 → 外側 → と連鎖しています。外の微分 × 内の微分をかけると全体の微分になります。
例で見る計算の順番(一度に一つずつ強調)
1.例:上のグラフのように 、 のとき を で微分する。
2.① 内の微分(左グラフ): を で微分 →
3.② 外の微分(右グラフ): を で微分 →
4.③ かける: → 答え
点が連鎖に沿って動くように、変化率がかけ算されて伝わります。逆伝播もこのかけ算の繰り返しです。
連鎖律とは
連鎖律(Chain Rule)は、関数の中に別の関数が入った合成関数を微分する規則です。玉ねぎの皮をむくように、「外側の関数を微分()× 内側の関数を微分()してかける」という原理です。式では と表し、噛み合った歯車の回転比を求めるのと同じです。
直感的な例:「自分」() が「友達」() を押し、友達が「台車」() を押すとします。自分が友達を2倍の力で押し、友達が台車を3倍の力で押すなら、台車は自分の力の 倍で動きます。このように段階ごとの変化率(傾き)をかけ算でつなぐのが連鎖律です。
核心公式:。覚え方は「外の微分 × 内の微分」です。
- 段階1
- やること内側・外側を区別
- 例:内側 、外側
- 段階2
- やること外の微分
- 例: を微分すると (このとき はそのまま)
- 段階3
- やること内の微分
- 例:内側 を微分すると
- 段階4
- やることかける
- 例:
| 段階 | やること | 例: |
|---|---|---|
| 1 | 内側・外側を区別 | 内側 、外側 |
| 2 | 外の微分 | を微分すると (このとき はそのまま) |
| 3 | 内の微分 | 内側 を微分すると |
| 4 | かける |
代表式: または 。上のビジュアルのように → 内側 → 外側 → の順でつながるので、各区間の微分をかけます。内側がまた重なっているときは、その部分でも同じように外の微分×内の微分を繰り返してかけます。
なぜ足し算ではなくかけ算か?比率(Rate)だからです。時速100kmで走る車()と、1ドル1300円の為替()を足しても意味がありません。変化の増幅や減衰を求めるにはかけ算が必要です。
数で確認: で のときの変化率は、公式どおり 。実際 が 1 から 1.01 に 0.01 だけ変わると、 は 9 から約 9.1204 に約 0.12 変わります。0.01 の 12 倍が 0.12 なので、変化率 12 で正しいです。
ディープラーニングモデルは、数十・数百の関数が重なった巨大な合成関数()です。知りたいのは「最初の入力や中間の重み()を変えたとき、最終的な誤差()がどう変わるか」です。これを求めるには連鎖律が不可欠です。
誤差逆伝播(Backpropagation)の正体がまさに連鎖律です。出力層で生じた誤差を入力層方向へ逆に伝えるとき、各層の微分値(傾き)をかけ算で伝えていきます。この過程がなければ深いニューラルネットの学習は不可能です。
つまりAIが学習するとは「微分値を連鎖律でかけ算して伝える過程」です。層が深いほどこのかけ算が繰り返されますが、1より小さい数(例:0.5)を何度もかけると0に近づきます。こうして勾配が消える現象を勾配消失(Vanishing Gradient)といい、深いネットワークの学習が難しかった理由の一つでした。ReLUやスキップ接続などの技術がこの問題を緩和します。
複雑な因果関係を分析するときに使います。AがBに影響し、BがCに影響するとき、AがCに及ぼす影響は各段階の影響力をかけ算して求めます。
- 状況コスト → 生産量 → 時間
- 求めるもの時間がコストに及ぼす影響
- 連鎖律(全体の変化率)(コスト/生産量) (生産量/時間)
- 状況体積 → 半径 → 時間
- 求めるもの風船に空気を入れるときの体積の変化率
- 連鎖律(全体の変化率)(体積/半径) (半径/時間)
- 状況誤差 → 出力 → 重み
- 求めるものAI学習:重みの更新量
- 連鎖律(全体の変化率)(誤差/出力) (出力/重み)
| 状況 | 求めるもの | 連鎖律(全体の変化率) |
|---|---|---|
| コスト → 生産量 → 時間 | 時間がコストに及ぼす影響 | (コスト/生産量) (生産量/時間) |
| 体積 → 半径 → 時間 | 風船に空気を入れるときの体積の変化率 | (体積/半径) (半径/時間) |
| 誤差 → 出力 → 重み | AI学習:重みの更新量 | (誤差/出力) (出力/重み) |
自動微分(Automatic Differentiation):PyTorchやTensorFlowなどのAIフレームワークでは、`loss.backward()`と一行書くだけで微分してくれます。内部では計算グラフを構築し、各ノードで連鎖律を適用して勾配を計算・乗算する処理が一瞬で行われます。
重なった関数を微分するときは内側を一つの塊と見て、外を微分したものと内を微分したものをかけるだけ。内側がまた重なっていればそこでも同じように繰り返します。コツ:まず「内側=何」とおき、外の関数だけ微分してから、内側を で微分したものをかければよいです。
いちばん簡単な例:。内側 → 微分して 。外側 → 微分して 。かけると 。 のときの傾きは です。
やさしいものからいろいろな例を表にまとめました。各行で「内の微分」と「外の微分」をかけると答えになります。
- 問題やさしい例
- 解法内 → 内の微分 、外 → 外の微分 ;積
- 問題やさしい例
- 解法内 → 内の微分 、外 → 外の微分 ;積
- 問題例
- 解法内の微分 、外の微分 → 積
- 問題例
- 解法内の微分 、外の微分 → 積
- 問題例
- 解法内 → 内の微分 、外 → 外の微分 ;積
- 問題例
- 解法内の微分 、外の微分 → 積
- 問題例
- 解法内の微分 、外の微分 → 積
| 問題 | 解法 |
|---|---|
| やさしい例 | 内 → 内の微分 、外 → 外の微分 ;積 |
| やさしい例 | 内 → 内の微分 、外 → 外の微分 ;積 |
| 例 | 内の微分 、外の微分 → 積 |
| 例 | 内の微分 、外の微分 → 積 |
| 例 | 内 → 内の微分 、外 → 外の微分 ;積 |
| 例 | 内の微分 、外の微分 → 積 |
| 例 | 内の微分 、外の微分 → 積 |
問題タイプ別の解法
- タイプべき乗
- 式の形
- の求め方外の微分 × 内の微分 。
- タイプ指数
- 式の形
- の求め方外の微分 × 内の微分 → 。
- タイプ三角
- 式の形、
- の求め方外の微分(cos または −sin) × 内の微分。
- タイプルート
- 式の形
- の求め方外の微分 × 内の微分。
- タイプ対数
- 式の形
- の求め方外の微分 × 内の微分 → 。
- タイプ二次式の中
- 式の形 など
- の求め方内の微分は 。外の微分と掛ける。
| タイプ | 式の形 | の求め方 |
|---|---|---|
| べき乗 | 外の微分 × 内の微分 。 | |
| 指数 | 外の微分 × 内の微分 → 。 | |
| 三角 | 、 | 外の微分(cos または −sin) × 内の微分。 |
| ルート | 外の微分 × 内の微分。 | |
| 対数 | 外の微分 × 内の微分 → 。 | |
| 二次式の中 | など | 内の微分は 。外の微分と掛ける。 |
例(べき乗)
のとき での導関数の値を求めなさい。
解答
。 を代入 → 。→ 答 36
例(指数)
のとき での導関数の値を求めなさい。
解答
。 を代入 → 。→ 答 3
例(三角)
のとき での導関数の値を求めなさい。
解答
。 を代入 → 。→ 答 2
例(対数)
のとき での導関数の値を求めなさい。
解答
。 で なので 。→ 答 0