はじめに
前回の記事では、定数倍・和・積・商の微分公式を、微分の定義から導きました。これらの公式を使えば、複数の関数を足したり、掛けたり、割ったりした関数を微分できます。
では、関数の中に別の関数が入っている場合は、どのように微分すればよいのでしょうか?
たとえば、次の関数を考えます。
$$
y=(x^2+1)^3
$$
この関数は、単に \(x\) を3乗するのではありません。まず \(x^2+1\) を計算し、その結果を3乗しています。
このように、ある関数の出力を別の関数の入力として使うものを、合成関数といいます。
合成関数の微分では、内側の関数と外側の関数、それぞれの変化率を考える必要があります。その関係を表すのが連鎖律(chain rule)です。
この記事では、合成関数の仕組みを理解し、入力から出力へ伝わる変化を考えることで、連鎖律がなぜ成り立つのかを微分の定義から導きます。
この記事でわかること
この記事では、次の内容の理解を目指します。
- 合成関数とは、どのような関数なのか?
- 入力の変化が中間変数を通して出力へ伝わるとは、どういうことか?
- 連鎖律では、なぜ2つの導関数を掛けるのか?
- 微分の定義から連鎖律をどのように導くのか?
- 複雑な合成関数をどのように微分するのか?
- 連鎖律はAIの誤差逆伝播法とどうつながるのか?
1.合成関数とは何か?
まず、合成関数の意味を具体例から考えてみましょう。
1.1.関数の出力を別の関数に入力する
次の2つの関数を考えます。
$$
\begin{aligned}
u&=g(x)=x^2+1\\
y&=f(u)=u^3
\end{aligned}
$$
最初の関数 \(g\) は、入力 \(x\) を受け取って \(u\) を計算します。次の関数 \(f\) は、その \(u\) を受け取って \(y\) を計算します。
たとえば、\(x=2\) なら、
$$
x=2\quad\longrightarrow\quad u=5
\quad\longrightarrow\quad y=125
$$
となります。
この2段階の計算を1つの式にまとめると、
$$
y=f(g(x))=(x^2+1)^3
$$
です。
このように、\(g(x)\) の計算結果を \(f\) に入力する関数を、合成関数といいます。

1.2.内側の関数と外側の関数
合成関数では、どちらの関数が内側で、どちらが外側なのかを区別することが重要です。
$$
y=(x^2+1)^3
$$
この場合、
- 内側の関数:\(g(x)=x^2+1\)
- 外側の関数:\(f(u)=u^3\)
です。
外側の関数は \(x\) を直接受け取るのではなく、内側の関数が計算した \(u\) を受け取ります。
したがって、合成関数を微分するときも、外側の関数の変化率だけでなく、内側の関数の変化率も考える必要があります。
2.合成関数では、変化が連鎖する
では、合成関数の変化率をどのように考えればよいのでしょうか?
2.1.入力の変化は2段階で伝わる
先ほどの関数をもう一度考えます。
$$
u=x^2+1,\quad y=u^3
$$
ここで、入力 \(x\) を少し変化させると、まず中間変数 \(u\) が変化します。そして、\(u\) が変化することで、出力 \(y\) も変化します。
つまり、変化は次の順番で伝わります。
$$
x\longrightarrow u\longrightarrow y
$$
このとき、2つの変化率を考えることができます。
$$
\frac{du}{dx}
$$
は、\(x\) の変化に対して \(u\) がどのくらい変化するかを表します。
一方、
$$
\frac{dy}{du}
$$
は、\(u\) の変化に対して \(y\) がどのくらい変化するかを表します。
では、\(x\) の変化に対して \(y\) がどのくらい変化するかを表す \(\frac{dy}{dx}\) は、どうなるのでしょうか?
2.2.変化率を掛けると全体の変化率になる
たとえば、ある点の近くで、\(x\) の小さな変化に対して \(u\) はその約2倍変化し、\(u\) の小さな変化に対して \(y\) はその約3倍変化するとしましょう。
したがって、\(x\) に対する \(y\) の変化率は、およそ、
$$
2\times3=6
$$
になると考えられます。
つまり、2段階の変化率を掛け合わせることで、入力から出力までの変化率を求められるのです。
この関係を一般的に表したものが、連鎖律です。
$$
\frac{dy}{dx}
=
\frac{dy}{du}\frac{du}{dx}
$$
ここで重要なのは、この式が単なる分数の約分ではないことです。微分可能な関数を合成したときに成り立つ、変化率の関係を表しています。
3.連鎖律はなぜ成り立つのか?
ここから、連鎖律を微分の定義から導いてみましょう。
3.1.変化量を使って考える
次の合成関数を考えます。
$$
y=f(g(x))
$$
中間変数を、
$$
u=g(x)
$$
とおけば、\(y=f(u)\) です。
入力 \(x\) を \(h\) だけ変化させたとき、中間変数の変化量を \(\Delta u\)、出力の変化量を \(\Delta y\) とします。
$$
\begin{aligned}
\Delta u&=g(x+h)-g(x)\\
\Delta y&=f(u+\Delta u)-f(u)
\end{aligned}
$$
微分の定義から、求めたい導関数は、
$$
\frac{dy}{dx}
=
\lim_{h\to0}\frac{\Delta y}{h}
$$
です。
ここで、\(\Delta u\ne0\) の場合には、次のように式を分けられます。
$$
\frac{\Delta y}{h}
=
\frac{\Delta y}{\Delta u}
\frac{\Delta u}{h}
$$
この式は、\(x\) から \(u\)、\(u\) から \(y\) という2段階の変化を表しています。

3.2.極限をとると連鎖律が得られる
\(g\) が微分可能なら連続なので、\(h\to0\) のとき \(\Delta u\to0\) となります。
また、\(f\) が \(u=g(x)\) で微分可能なら、\(\Delta u\ne0\) の範囲で、
$$
\frac{\Delta y}{\Delta u}
\longrightarrow f'(u)
$$
です。
一方、
$$
\frac{\Delta u}{h}
\longrightarrow g'(x)
$$
となります。
したがって、2つの変化率を掛け合わせると、
$$
\frac{dy}{dx}
=f'(u)g'(x)
$$
が得られます。
ここで \(u=g(x)\) を代入すると、
$$
\frac{d}{dx}f(g(x))
=f'(g(x))g'(x)
$$
となります。これが連鎖律です。
3.3.【発展】中間変数の変化量が0になる場合
先ほどの計算では、
$$
\frac{\Delta y}{h}
=
\frac{\Delta y}{\Delta u}
\frac{\Delta u}{h}
$$
と変形しました。
しかし、この式は \(\Delta u\ne0\) の場合にしか使えません。関数によっては、\(h\ne0\) でも \(\Delta u=0\) となる場合があります。
たとえば、
$$
u=g(x)=x^2
$$
について、\(x=0\) から \(h\) だけ変化させると、\(\Delta u=h^2\) となり、\(h\ne0\) なら \(\Delta u\ne0\) です。
一方、定数関数 \(g(x)=1\) では、\(x\) をどれだけ変化させても \(\Delta u=0\) となります。
連鎖律は、このような場合にも成り立つ必要があります。
そこで、\(\Delta u\) で割らずに計算する方法を考えましょう。
3.3.1.微分の定義を別の形で表す
まず、外側の関数 \(f(u)\) の微分を考えます。
\(u\) を \(k\) だけ変化させたとき、微分の定義から、
$$
f'(u)
=
\lim_{k\to0}
\frac{f(u+k)-f(u)}{k}
$$
です。
これは、\(k\) が十分小さければ、
$$
\frac{f(u+k)-f(u)}{k}
$$
が \(f'(u)\) に近い値になることを意味します。
ただし、\(k\ne0\) のとき、この2つの値が完全に一致するとは限りません。
そこで、その差を \(r(k)\) とおきます。
$$
r(k)
=
\frac{f(u+k)-f(u)}{k}-f'(u)
$$
この式を変形すると、
$$
\frac{f(u+k)-f(u)}{k}
=
f'(u)+r(k)
$$
です。
さらに、両辺に \(k\) を掛けると、
$$
f(u+k)-f(u)
=
f'(u)k+r(k)k
$$
が得られます。
つまり、この式は新しい公式ではありません。微分の定義を、導関数による近似と、その誤差に分けて書き直したものです。
ここで、微分の定義から、
$$
\lim_{k\to0}r(k)=0
$$
となります。
ここまで、\(r(k)\) は \(k\ne0\) の場合について定義しました。もとの定義式には \(k\) による割り算があるため、\(k=0\) をそのまま代入することはできません。
しかし、変形後の式、
$$
f(u+k)-f(u)=f'(u)k+r(k)k
$$
では、\(k=0\) の場合も考えることができます。
実際に \(k=0\) を代入すると、
$$
f(u)-f(u)=f'(u)\cdot0+r(0)\cdot0
$$
となり、両辺はともに \(0\) です。
したがって、\(r(0)=0\) と定めておけば、この式は \(k=0\) の場合にも成り立ちます。
また、\(k\to0\) のとき \(r(k)\to0\) なので、\(r(0)=0\) と定めることで、\(r(k)\) は \(k=0\) でも連続になります。
これにより、\(k\) が0になる場合も含めて、同じ式を使えるようになります。
3.3.2.中間変数の変化量を代入する
ここで、\(k=\Delta u\) を代入します。
第3.1節で定義したように、\(u\) が \(\Delta u\) だけ変化したとき、出力 \(y\) の変化量は、
$$
\Delta y=f(u+\Delta u)-f(u)
$$
です。
したがって、先ほどの式は、
$$
\Delta y
=
f'(u)\Delta u+r(\Delta u)\Delta u
$$
となります。
両辺を \(h\) で割ると、
$$
\frac{\Delta y}{h}
=
f'(u)\frac{\Delta u}{h}
+
r(\Delta u)\frac{\Delta u}{h}
$$
となります。
この式では、\(\Delta u\) で割っていないことに注目してください。したがって、\(\Delta u=0\) の場合にも使えます。
ここで \(h\to0\) とすると、\(g\) が微分可能なので、
$$
\frac{\Delta u}{h}\to g'(x)
$$
です。
また、微分可能な関数は連続なので、\(\Delta u\to0\) となり、
$$
r(\Delta u)\to0
$$
です。
したがって、
$$
\begin{aligned}
\frac{dy}{dx}
&=f'(u)g'(x)+0\\
&=f'(g(x))g'(x)
\end{aligned}
$$
が得られます。
このように、微分の定義を「導関数による近似と誤差」に分けて表すことで、\(\Delta u=0\) となる場合も含めて連鎖律を導くことができます。
4.連鎖律を使って実際に微分してみよう
連鎖律の仕組みがわかったところで、具体的な関数を微分してみましょう。
4.1.基本例:3乗の中に関数がある場合
最初に登場した関数を考えます。
$$
y=(x^2+1)^3
$$
内側の関数を、
$$
u=x^2+1
$$
とおくと、外側の関数は \(y=u^3\) です。
それぞれを微分すると、
$$
\begin{aligned}
\frac{dy}{du}&=3u^2\\
\frac{du}{dx}&=2x
\end{aligned}
$$
となります。
連鎖律を使うと、
$$
\begin{aligned}
\frac{dy}{dx}
&=\frac{dy}{du}\frac{du}{dx}\\
&=3u^2\cdot2x\\
&=6x(x^2+1)^2
\end{aligned}
$$
です。
このように、外側を微分した結果に、内側の導関数を掛けることで、合成関数を微分できます。
4.2.一般的なべき関数の合成
同じ考え方を使えば、次のような関数も微分できます。
$$
y=(g(x))^n
$$
ここでは \(n\) を正の整数とします。
\(u=g(x)\) とおけば、\(y=u^n\) なので、
$$
\frac{dy}{du}=nu^{n-1}
$$
です。
連鎖律を使うと、
$$
\begin{aligned}
\frac{dy}{dx}
&=nu^{n-1}g'(x)\\
&=n(g(x))^{n-1}g'(x)
\end{aligned}
$$
となります。
したがって、
$$
\frac{d}{dx}(g(x))^n
=
n(g(x))^{n-1}g'(x)
$$
です。
これは、前回学んだべき関数の微分公式を、合成関数へ拡張したものです。
4.3.3段階の合成関数
連鎖律は、2つの関数だけでなく、3つ以上の関数を合成した場合にも使えます。
たとえば、
$$
y=\bigl((x^2+1)^3+2\bigr)^2
$$
を考えます。
この関数は、次の3段階で計算できます。
$$
\begin{aligned}
u&=x^2+1\\
v&=u^3+2\\
y&=v^2
\end{aligned}
$$
それぞれの導関数は、
$$
\begin{aligned}
\frac{du}{dx}&=2x\\
\frac{dv}{du}&=3u^2\\
\frac{dy}{dv}&=2v
\end{aligned}
$$
です。
したがって、
$$
\begin{aligned}
\frac{dy}{dx}
&=\frac{dy}{dv}\frac{dv}{du}\frac{du}{dx}\\
&=2v\cdot3u^2\cdot2x\\
&=12x(x^2+1)^2\bigl((x^2+1)^3+2\bigr)
\end{aligned}
$$
となります。
このように、関数の合成が何段階になっても、各段階の変化率を順番に掛け合わせることで、全体の導関数を求められます。
5.連鎖律と積の微分は何が違うのか?
前回学んだ積の微分と、今回の連鎖律は、どちらも複数の関数を組み合わせた場合の微分です。しかし、関数の組み合わせ方が異なります。
積の微分は、次のような関数に使います。
$$
y=f(x)g(x)
$$
2つの関数がそれぞれ \(x\) に依存しており、その積を計算しています。この場合は、
$$
\frac{dy}{dx}=f'(x)g(x)+f(x)g'(x)
$$
となります。
一方、合成関数は、
$$
y=f(g(x))
$$
という形です。内側の関数の出力が、外側の関数の入力になります。この場合は、
$$
\frac{dy}{dx}=f'(g(x))g'(x)
$$
です。
つまり、積の微分では2つの関数の変化による寄与を足すのに対し、連鎖律では2段階の変化率を掛け合わせるという違いがあります。
ただし、複雑な関数では両方の公式を組み合わせる場合もあります。
たとえば、
$$
y=x(x^2+1)^3
$$
は、積の微分と連鎖律の両方を使う関数です。
$$
\begin{aligned}
y’
&=(x^2+1)^3+x\cdot3(x^2+1)^2\cdot2x\\
&=(x^2+1)^3+6x^2(x^2+1)^2
\end{aligned}
$$
このように、まず関数全体の構造を見て、どの公式を使うべきかを判断することが重要です。
6.連鎖律はAIの誤差逆伝播法の基礎になる
連鎖律は、AIのニューラルネットワークでも重要な役割を持っています。
ニューラルネットワークでは、入力から出力まで、複数の計算が順番に行われます。そして、学習では最終的な出力から計算した損失を小さくするために、各パラメータに対する損失の変化率を求めます。
この計算に使われるのが連鎖律です。
6.1.簡単な計算の流れを考える
たとえば、入力 \(x\) に重み \(w\) を掛け、その結果を2乗して出力する計算を考えます。
$$
\begin{aligned}
z&=wx\\
y&=z^2
\end{aligned}
$$
ここで、\(x\) は固定し、重み \(w\) を変化させるとします。
\(w\) が変化すると、まず \(z\) が変化し、その結果として \(y\) も変化します。
$$
w\longrightarrow z\longrightarrow y
$$
それぞれの変化率は、
$$
\begin{aligned}
\frac{dz}{dw}&=x\\
\frac{dy}{dz}&=2z
\end{aligned}
$$
です。
したがって、連鎖律から、
$$
\begin{aligned}
\frac{dy}{dw}
&=\frac{dy}{dz}\frac{dz}{dw}\\
&=2zx\\
&=2wx^2
\end{aligned}
$$
となります。
この結果は、\(y=(wx)^2=w^2x^2\) を直接微分した場合と一致します。
6.2.損失から重みへ変化率を伝える
実際のニューラルネットワークでは、出力 \(y\) から損失 \(L\) を計算します。
たとえば、目標値を \(t\) として、
$$
L=(y-t)^2
$$
とします。
このとき、計算の流れは、
$$
w\longrightarrow z\longrightarrow y\longrightarrow L
$$
です。
損失 \(L\) を重み \(w\) で微分するには、各段階の導関数を掛け合わせます。
$$
\frac{dL}{dw}
=
\frac{dL}{dy}
\frac{dy}{dz}
\frac{dz}{dw}
$$
それぞれの導関数は、
$$
\begin{aligned}
\frac{dL}{dy}&=2(y-t)\\
\frac{dy}{dz}&=2z\\
\frac{dz}{dw}&=x
\end{aligned}
$$
なので、
$$
\frac{dL}{dw}=4(y-t)zx
$$
となります。
このように、最終的な損失から各計算段階をさかのぼって導関数を掛け合わせる考え方が、誤差逆伝播法(Backpropagation)の基礎になっています。

なお、実際のニューラルネットワークでは、複数の入力や重み、活性化関数などが組み合わさっています。また、損失の微分には偏微分も使われます。詳しい仕組みはAI編の誤差逆伝播法の記事で説明します。
まとめ
今回は、合成関数の意味と、連鎖律が成り立つ理由を学びました。
- 合成関数は、ある関数の出力を別の関数の入力として使う関数である。
- 入力の変化は、中間変数を通して出力へ順番に伝わる。
- 連鎖律では、内側の関数と外側の関数の変化率を掛け合わせる。
- 連鎖律は、微分の定義から導くことができる。
- 3つ以上の関数を合成した場合も、各段階の導関数を掛け合わせればよい。
- 連鎖律は、AIの誤差逆伝播法の基礎となる。
連鎖律を式で表すと、
$$
\frac{d}{dx}f(g(x))
=
f'(g(x))g'(x)
$$
です。
連鎖律の本質は、変化率が連鎖することです。内側の関数の変化が外側の関数に伝わるため、各段階の変化率を掛け合わせることで全体の変化率を求められます。
次回は、指数関数と対数関数の微分を扱います。これらの関数がなぜ特別な微分公式を持つのかを理解し、シグモイド関数などのAIで使われる関数の微分にもつなげていきます。
関連記事


(準備中)

シリーズ全体を理解する
(準備中)
関連書籍
合成関数の微分をさらに深く理解したい方には、微分積分の入門書がおすすめです。特に、連鎖律を微分の定義から導く過程や、複数の変数を通して変化率が伝わる仕組みを確認すると、理解が深まります。



コメント