Chapter 07

連鎖律

関数を重ねて書いたものを微分するときは外の微分 × 内の微分をかければよいです。逆伝播の核心です。

home.mathDiagramTitle

home.mathDiagramDescription

重なった関数は xx → 内側 → 外側 → yy連鎖しています。外の微分 × 内の微分をかけると全体の微分になります。

例で見る計算の順番(一度に一つずつ強調)

1.例:上のグラフのように u=g(x)=2x+1u = g(x) = 2x+1y=f(u)=u2y = f(u) = u^2 のとき y=(2x+1)2y = (2x+1)^2xx で微分する。
2.① 内の微分(左グラフ):u=g(x)=2x+1u = g(x) = 2x+1xx で微分 → 22
3.② 外の微分(右グラフ):y=f(u)=u2y = f(u) = u^2uu で微分 → 2u=2(2x+1)2u = 2(2x+1)
4.③ かける:2×2(2x+1)=4(2x+1)2 \times 2(2x+1) = 4(2x+1) → 答え

点が連鎖に沿って動くように、変化率がかけ算されて伝わります。逆伝播もこのかけ算の繰り返しです。

連鎖律とは

一言で関数を重ねたものが合成関数です。xx をまず一つの関数に入れ、出てきた値をまた別の関数に入れて最終結果にします。この重なった関数を微分するときのルールが連鎖律です。
ディープラーニングでは層がいくつもつながっています。入力が1層、2層、…と通り、最後に損失が出ます。この損失を各重みで微分して学習します。
誤差逆伝播は損失から入力側へ一歩ずつ微分を渡す方法です。各段で「次から来た値」に「この段の微分」をかけて前に渡します。このかけ算が連鎖律です。
まとめると連鎖律は逆伝播の骨組みです。Ch06で導関数を学んでいれば、ここでは「重なった関数」に当てはめるだけです。
一般に一つを変えると他が連鎖的に変わる状況で全体の変化率を求めるときに使います。連鎖的につながった変化率はすべてかければよいです。下の表はいろいろな分野で同じやり方が使われる例です。
状況求めるもの連鎖律(全体の変化率)
コストが生産量に、生産量が時間に依存するときコストが時間に対してどれだけ速く変わるか(コスト/生産量) ×\times (生産量/時間)
風船の半径が時間で変わるとき体積が時間に対してどれだけ速く変わるか(体積/半径) ×\times (半径/時間)
速度が位置に、位置が時間に依存するとき加速度との関係(速度/位置) ×\times (位置/時間)
AI学習では損失が何層も経て出るので、各重みで微分するとき連鎖律で一層ずつかけます。この章を終えればCh08偏微分・勾配に自然につなげられます。
重なった関数を微分するときは内側を一つの塊と見て、外を微分したものと内を微分したものをかけるだけ。内側がまた重なっていればそこでも同じように繰り返します。コツ:まず「内側=何」とおき、外の関数だけ微分してから、内側を xx で微分したものをかければよいです。