概要
偏微分と全微分についてベクトル解析の観点から説明する。偏微分に関してはまだギリでベクトル空間を仮定しなくても定義できる気がするが、全微分はノルムが定義された空間でないと難しいのでベクトル空間にならざるを得ない。
それならばいっそ、最初からベクトル空間を仮定して統一的な視点から偏微分と全微分を眺めたほうが美しいのではないかと思った。関数解析との繋がりもいいし。今回の内容は以下の通り。
- 多変数関数の微分
- おさらい:一変数関数の微分
- 二変数関数はどう微分したらいい?
- ベクトル解析の観点から
- 多価多変数関数の微分
一応この記事で単体で読めるよう配慮はしますが、前回のノートは読んでいる体で話を進めます。
参考:『全微分, 接平面, 合成関数の微分』
多変数関数の微分
偏微分や全微分とはなんなのか、を一言で説明すれば「多変数関数の微分」であると言えます。多変数関数の微分には$grad$や$div$などいろいろ考えられるのですが、その基礎となる重要な二つの微分が偏微分と全微分になります。
通常の教科書では偏微分$\rightarrow$全微分の順で解説されますし、「偏微分と全微分」と言ったほうが「全微分と偏微分」というよりもなんか語感がいいので、並べて書くときは私も「偏微分と全微分」と書くことにしますが本記事での解説の順序はまず全微分を定義し、その特殊な形として偏微分を導出します。
なぜそんな変わったことをするのかは以下の説明で納得いただけるかと思います。
偏微分は着目したい独立変数以外を固定して無理やり1変数関数とみなして微分します。1変数関数の微分の文脈をそっくり移植できるため、1変数関数の微分を定義したその足で偏微分の説明に向かうことが多いのですが、偏微分$\rightarrow$全微分の向きでの拡張はいささか無理があるので「全微分」があたかも「偏微分を寄せ集めたオバケ」のような不自然な存在に見えてしまいます。
しかし、多変数関数の微分として1変数関数の微分の自然な拡張になっているのは実は「全微分」のほうです。全微分$\rightarrow$偏微分の方向へは「全微分を偏微分によって展開する」という解釈が成立するので、これは「ベクトルを基底によって展開する」ことと同じ自然な発想として捉えることができます1。
おさらい:一変数関数の微分
独立変数$x$に任意の点$x, x_1$を考え、$\Delta x = x_1 - x$を定義します。変数$x$の関数$y=f(x)$の導関数を
$$
f'(x) = \lim_{\Delta x \to 0} \frac{\Delta y}{\Delta x} = \lim_{\Delta x \to 0}\frac{f(x+\Delta x) - f(x)}{\Delta x} \tag{1}
$$で定義します。この極限が存在するとき、$y$の微分を
$$
dy = f'(x) \Delta x \tag{2}
$$によって定義します。
さて、これから先に進む前に$(1)$式にちょっとだけ細工をします。もし$(1)$式の極限値が存在するならば、その極限値を$c$とおくと
$$
\lim_{\Delta x \to 0}\frac{f(x+\Delta x) - f(x)}{\Delta x} = c
$$と書くことができます。$c$を左辺へ移行して
$$
\lim_{\Delta x \to 0}\left(\frac{f(x+\Delta x) - f(x)}{\Delta x} \right) - c = 0
$$ですが、$c$は$\Delta x$には関係ないので括弧の中に入れることができて
$$
\begin{align}
\lim_{\Delta x \to 0}\left(\frac{f(x+\Delta x) - f(x)}{\Delta x} - c\right) = 0 \\
\therefore \lim_{\Delta x \to 0}\frac{f(x+\Delta x) - f(x) - c \Delta x}{\Delta x} = 0
\end{align}
$$と変形できます。さらに左辺の極限は右辺の$0$に収束するはずなので、分母の符号はどうでもよくなりますから、分母は絶対値をとって
$$
\lim_{\left| \Delta x \right| \to 0}\frac{f(x+\Delta x) - f(x) - c \Delta x}{\left| \Delta x \right|} = 0 \tag{3}
$$としても問題ありません。さて、いままで極限値$c$が勝手に存在することにして式変形をしてしまいましたから、また存在するかわからないことにして次のように宣言します。
「$(3)$式を成り立たせる$c$が存在するとき関数$f(x)$は点$x$において微分可能であるという。また、そのときの$c$を$f(x)$の点$x$における微分係数と呼ぶ」
微分係数は名前こそ違えど、点$x$における関数$f(x)$の導関数の値と同じものです。今後の説明の都合上、微分係数という呼び方を採用しているだけです。
どうしてこのような式変形をしたかといえば、分母から「点$x$への近づき方の情報」を消してしまいたかったからです。$\Delta x$は$\Delta x = x_1 - x$で定義されているので、$x_1 > x$をとれば$\Delta x > 0$、$x_1 < x$をとれば$\Delta x < 0$となるので、$(1)$式の分母にある$\Delta x$は「正の方向と負の方向のどちらから近づくか」という情報を持っていることになります。1次元だったら方向が2つしかなくて直線に沿って近づくしかないのでまだいいのですが、2次元以上では方向が無限にあり、近づき方もたとえば「目標の点$x$の周りをクルクル回りながら近づいていく」みたいな変態的な近づき方ができます。そういった複雑な情報を保持するには符号の概念を拡張してベクトルにする必要がありますが、ご存知の通りベクトルで割り算はできません。
そこで分母からは「近づき方」の情報を消してしまって「どれくらい近いか」という距離の情報だけを残し、近づき方の情報は分子に押し込めてしまう必要がありました。こうして得られたのが$(3)$式であるわけです。
いま説明した部分が今後の議論の肝になるので、ここさえわかってしまえばあとは簡単です。
二変数関数はどう微分したらいい?
一般の$n$変数関数の微分を説明するまえに、簡単のために独立変数$x,y$を引数に持つ二変数関数$z = f(x,y)$の微分について考察しましょう。いまから$(3)$式
$$
\lim_{\left| \Delta x \right| \to 0}\frac{f(x+\Delta x) - f(x) - c \Delta x}{\left| \Delta x \right|} = 0
$$を拡張していきます。
まず分子の$f(x), f(x+\Delta x)$はそれぞれ$f(x,y), f(x+\Delta x, y + \Delta y)$にするのが自然でしょう。また、$c\Delta x$も$(c_1 \Delta x + c_2 \Delta y)$に拡張すべきです。最後は$\left| \Delta x \right|$の部分ですが、これは点$(x, y), (x_1, y_1)$の距離
$$
\rho = \sqrt{(x_1 - x)^2 + (y_1 - y)^2} = \sqrt{(\Delta x)^2 + (\Delta y)^2}
$$を用いることにします。これは1変数関数のとき
$$
\rho = \sqrt{(x_1 - x)^2} = \sqrt{(\Delta x)^2} = \left| \Delta x \right|
$$となるものですから、順当な拡張です。これらの変更を適用して$(3)$式を書き直します。以下の方程式
$$
\lim_{\rho \to 0}\frac{f(x+\Delta x, y+ \Delta y) - f(x, y) - (c_1 \Delta x + c_2 \Delta y)}{\rho} = 0 \tag{4}
$$を成り立たせる数の組$(c_1, c_2)$が存在するとき、関数$z=f(x,y)$は点$(x, y)$で全微分可能であるといい、このときの$(c_1, c_2)$を関数$z=f(x,y)$の点$(x, y)$での全微分係数といいます。
通常の教科書ではまず最初に
$$
\left\{
\begin{align}
\lim_{\Delta x \to 0}\frac{f(x+\Delta x, y) - f(x, y) - a \Delta x}{\Delta x} = 0 \\
\lim_{\Delta y \to 0}\frac{f(x, y+ \Delta y) - f(x, y) - b \Delta y}{\Delta y} = 0
\end{align} \tag{5}
\right.
$$によって
$$
f_x(x, y)=\frac{\partial z}{\partial x} =a, \quad f_y(x,y)=\frac{\partial z}{\partial y}=b
$$のように$z$の$x,y$による偏導関数、偏微分係数を定義するところですが、$(4)$式と$(5)$式をよく見比べてみてください。
2次元以上では「目標の点への近づき方が無数にある」という話をしたかと思いますが、$(4)$式は「どんな近づき方をしてもいい」ように定義されていますので、「変数$x$の定める座標軸$x$に沿って近づく」という特殊な近づき方を勝手に定めてもOKです。このとき$y$軸の方向には動かさないので常に$\Delta y = 0$ですから、これを$(4)$式に代入すれば方程式は
$$
\begin{align}
&\lim_{\rho \to 0}\frac{f(x+\Delta x, y+ \Delta y) - f(x, y) - (c_1 \Delta x + c_2 \Delta y)}{\rho} \\
=& \lim_{\left|\Delta x\right| \to 0}\frac{f(x+\Delta x, y) - f(x, y) - c_1 \Delta x}{\left|\Delta x \right|} = 0
\end{align}
$$と変形できて、$(5)$式の第1式と等価なものが得られます。このことから、以下の重要な事実は自明となります。
- $z=f(x,y)$が点$(x,y)$で全微分可能ならば、同じ点でどの変数についても偏微分可能である。
- $z=f(x,y)$がある点で偏微分可能でも、同じ点で全微分可能であるとは限らない。
また、
$$
c_1 = \frac{\partial z}{\partial x}, \quad c_2 = \frac{\partial z}{\partial y}
$$も自明です。これを受けて$(c_1 \Delta x + c_2 \Delta y)$を
$$
dz = \frac{\partial z}{\partial x} \Delta x + \frac{\partial z}{\partial y} \Delta y \tag{6}
$$と書き直し、この$dz$を$z$の全微分と呼びます。この$dz$があくまでも点$(x,y)$におけるものであることをわかりやすくするために
$$
dz = f_x(x,y) \Delta x + f_y(x,y) \Delta y \tag{7}
$$と表記してもよいでしょう。こちらのほうが$(2)$式の$dy = f'(x) \Delta x$に近い形ですね。ちなみに全微分から一部の項を取り出して、
$$
\partial_x z= f_x(x,y) \Delta x \tag{8}
$$によって関数$z$の変数$x$による偏微分も定義しておきます。単に$\partial z$と書いてしまうと$\partial_x z \neq \partial_y z $が区別がつかなくなってしまうので$\partial$の右下にどの変数での偏微分なのかを明記します。この書き方は熱力学などで登場するのでどちらかといえば物理寄りの人に馴染み深い表記かもしれません。
前回のノートでは$\Delta y$と$dy$は誤差$\varepsilon$の分だけ微妙にズレたものであることを注意しましたが、今回も
$$
\Delta z = f(x+\Delta x, y+ \Delta y) - f(x, y)
$$と
$$
dz = c_1 \Delta x + c_2 \Delta y
$$はもちろんズレており、そのズレ
$$
\varepsilon = \Delta z - dz = f(x+\Delta x, y+ \Delta y) - f(x, y) - (c_1 \Delta x + c_2 \Delta y)
$$は$(4)$式の分子に乗っています。$(4)$式の極限が成り立つには、こいつが$\rho \to 0$の極限で、$\rho$よりも早く$0$に潰れることを意味しています。
最後に$(6)$式に仕上げをしてこのセクションを締めくくりましょう。前回のノートでは$dx$を計算したところ$\Delta x$に一致したので代入して最終的に$dy=f'(x)dx$の形まで持ち込みました。二変数関数の場合にも同様にこれを示したいですが、いま$dx$と書いたらこれはやはり$x$の全微分を表すことになります。
そこで前回同様に$t = g(x,y) = x$として、ただし今回はあくまで$t$は$x,y$を引数に持つ二変数関数であると定義して、
$$
dt = g_x(x,y) \Delta x + g_y(x,y) \Delta y = 1\cdot \Delta x + 0 \cdot \Delta y = \Delta x
$$を得ます。$t$は$x$をただ書き直したものにすぎないので、こうしてやはり
$$
dx = \Delta x
$$が導かれ、同様に$dy=\Delta y$が成り立ち、これらを代入することで$(6)$式はめでたく見慣れた形である
$$
dz = \frac{\partial z}{\partial x} dx + \frac{\partial z}{\partial y} dy \tag{9}
$$となりました。最高!!
ここまでくれば三変数関数だろうと$n$変数関数だろうと議論はまったく同じ2です。
ベクトル解析の観点から
$n$変数関数$f \colon \mathbb{R}^n \mapsto \mathbb{R}$を考えます。このとき$y=f(x)$の微分を考えるために$(4)$式を少しばかり修正しましょう。$n$次元数ベクトル$x=(x_1, x_2, \ldots, x_n)^\mathrm{T}, y=(y_1, y_2, \ldots, y_n)^\mathrm{T}$の和と内積がそれぞれ
$$
x + y =
\left(
\begin{matrix}
x _ 1 \\
x _ 2 \\
\vdots \\
x _ n
\end{matrix}
\right)
+
\left(
\begin{matrix}
y _ 1 \\
y _ 2 \\
\vdots \\
y _ n
\end{matrix}
\right)=\left(
\begin{matrix}
x_1 + y _ 1 \\
x _ 2 + y _ 2 \\
\vdots \\
x _ n + y _ n
\end{matrix}
\right)
$$
$$
\left< x, y \right> = x \cdot y = x^\mathrm{T} y = x_1 y_1 + x_2 y_2 + \cdots + x_n y_n
$$
で表されていることを利用すると、$h = (\Delta x_1, \Delta x_2, \ldots, \Delta x_n)^\mathrm{T}, c=(c_1, c_2, \ldots, c_n)^\mathrm{T}$を用いて、$(4)$式は
$$
\lim_{\left| \Delta x \right| \to 0}\frac{f(x+h) - f(x) - \left< c, h \right>}{\left| \Delta x \right|} = 0 \tag{10}
$$と書き直せます。ここでベクトル$c$は
$$
\begin{align}
c &= \left(
\frac{\partial y}{\partial x_1}, \frac{\partial y}{\partial x_2}, \cdots, \frac{\partial y}{\partial x_n}
\right) ^ \mathrm{T} \\
&= \left(
\frac{\partial f(x)}{\partial x_1}, \frac{\partial f(x)}{\partial x_2}, \cdots, \frac{\partial f(x)}{\partial x_n}
\right) ^ \mathrm{T} \\
&= \nabla f(x)
\end{align} \tag{11}
$$となっています。また、
$$
dx = \left(
\begin{matrix}
dx _ 1 \\
dx _ 2 \\
\vdots \\
dx _ n
\end{matrix}
\right) \tag{12}
$$を用いると、$y=f(x)$の全微分は
$$
dy = \nabla f(x) \cdot dx = \left< \nabla f(x), dx \right> \tag{13}
$$と表すことができます。この記事で意図している内容を超えてしまうので詳しくは説明しませんが、内積をとることで座標系の取り方の影響が消えるため、全微分は座標系の取り方に依存しません。
偏微分を行うには、偏微分を行いたい方向ベクトル$h$を特殊な形で指定します。たとえば$x_i$の方向で偏微分を取りたいならば
$$
h = (0, \ldots, 0, \Delta x_i, 0, \ldots, 0)^\mathrm{T} \tag{14}
$$と書くことができますが、一般に偏微分を取りたい方向を表す方向ベクトルを$\psi$とおくと、$\tau \psi ,, (\tau \to 0)$によって$\psi$方向から近づくことを表現できます。したがって通常教科書でよく見る偏導関数の定義
$$
\lim_{\Delta x \to 0}\frac{f(x+\Delta x, y) - f(x, y)}{\Delta x}
$$などはすべて
$$
\lim_{\tau \to 0}\frac{f(x+ \tau \psi) - f(x)}{\tau} \tag{15}
$$と書くことができます3。$(15)$式がたとえば$\frac{\partial f(x)}{\partial x_i}$のように綺麗な偏微分になるかは、$\psi$が$(14)$式の$h$のように綺麗な形で表現できる座標系に限られます4ので、偏微分は座標系の取り方に依存することになります。
多価多変数関数の微分
いよいよこの記事も大詰め、一般の$m$価$n$変数関数$f \colon \mathbb{R}^n \mapsto \mathbb{R}^m$の微分です。いままでと異なるのは、今度は関数の出口のほうが増えるという点です。$y=f(x)$と書いた場合、これは以下を意味します。
$$
\left(
\begin{matrix}
y _ 1 \\
y _ 2 \\
\vdots \\
y _ m
\end{matrix}
\right)
=\left(
\begin{matrix}
f _ 1(x _ 1, x _ 2, \ldots, x _ n) \\
f _ 2(x _ 1, x _ 2, \ldots, x _ n) \
\vdots \\
f _ m(x _ 1, x _ 2, \ldots, x _ n)
\end{matrix}
\right)
$$これを踏まえて$(10)$式を少しだけ拡張します。まず収束先が$0$であることから分子全体の符号はあまり関係ないため、分母と同様に絶対値をとっても問題ないので、
$$
\lim_{\left| \Delta x \right| \to 0}\frac{ \left| f(x+h) - f(x) - \left< c, h \right> \right|}{\left| \Delta x \right|} = 0 \tag{16}
$$として大丈夫です。また、$f(x)$などが$m$次元のベクトルになるので、$\left< c, h \right>$の部分が$A \in \mathbb{R}^{m \times n}$を用いて$Ah$と書き直されます。$\left| \cdot \right|$の意味は例のごとく絶対値から距離へと変わります。これだけ。
したがって
$$
\lim_{\left| \Delta x \right| \to 0}\frac{ \left| f(x+h) - f(x) - Ah \right|}{\left| \Delta x \right|} = 0 \tag{17}
$$を満たす行列$A$が存在するとき$f$は全微分可能である5といい、この行列$A$を関数$f$の点$x$における全微分係数といいます。少しいかめしい感じになりましたが、結局のところ$y_i = f_i(x_1, x_2, \ldots, x_n)$のようにそれぞれ着目すれば、一価多変数関数の場合と同様に
$$
A = \left(
\begin{matrix}
\frac{\partial y_1}{\partial x_1} & \frac{\partial y_1}{\partial x_2} & \cdots & \frac{\partial y_1}{\partial x_n} \\
\frac{\partial y_2}{\partial x_1} & \frac{\partial y_2}{\partial x_2} & \cdots & \frac{\partial y_2}{\partial x_n} \\
\vdots & \vdots & \ddots & \vdots \\
\frac{\partial y_m}{\partial x_1} & \frac{\partial y_m}{\partial x_2} & \cdots & \frac{\partial y_m}{\partial x_n} \\
\end{matrix}
\right)
$$が容易に求まります。これはみなさまご存知のJacobi行列そのものです。つまりJacobi行列なんてカッコいい名前がついていますが、正体はただの全微分係数だったわけです。
微分の連鎖律
(このセクションは2019/9/5に追記しました)
微分の連鎖律(chain rule)は$(9)$式を$dt$で割ることで簡単に導出することができます。
$$
\frac{dz}{dt} = \frac{\partial z}{\partial x} \frac{dx}{dt} + \frac{\partial z}{\partial y} \frac{dy}{dt}
$$この後の勉強ノートで使うのでより「関数を微分した」感じに書いて記法に慣れておくことにします。一価二変数関数$y=f(x _ 1, x _ 2)$の全微分は
$$
dy = df = \frac{\partial f}{\partial x _ 1} dx _ 1 + \frac{\partial f}{\partial x _ 2} d x _ 2
$$であり、変数$x$が変数$t$の関数になっているとき、すなわち$x(t) = (x _ 1 (t), x _ 2(t))$と表せるとき、$y$の$t$による微分は
$$
\frac{dy}{dt} = \frac{df}{dt} = \frac{\partial f}{\partial x _ 1} \frac{dx _ 1}{dt} + \frac{\partial f}{\partial x _ 2} \frac{d x _ 2}{dt} \tag{18}
$$と表すことができます。
ニューラルネットの誤差逆伝播(back propagation)では一変数$t$ではなく多変数で微分するので
$$
\frac{\partial z}{\partial x _ i} = \frac{\partial z}{\partial y _ 1} \frac{\partial y _ 1}{\partial x _ i} + \frac{\partial z}{\partial y _ 2} \frac{\partial y _ 2}{\partial x _ i} + \cdots + \frac{\partial z}{\partial y _ n} \frac{\partial y _ n}{\partial x _ i} \tag{19}
$$という少しだけ複雑な形になりますが、基本的には同じことです。ただし$dz$を$\partial x _ i$で割るのはちょっとズルいです。$\partial x _ i$で割るのは結果的には正しいように見えますが、この記事では$\partial z$とか$\partial x _ i$のように、変数に$\partial$をくっつけた量は定義していません($\partial _ x z$は定義していますが、これとは別物であることに注意です)。またこの場合「なぜ$dz$を$\partial x _ i$で割ると$\partial z$なってしまうのか」という点で誤魔化しが生じてしまうので、導出過程で少し工夫する必要があります。
では導出してみましょう。$(9)$式を一般の$m$変数である$x$に拡張すると
$$
dz = \frac{\partial z}{\partial x _ 1} dx _ 1 + \frac{\partial z}{\partial x _ 2} dx _ 2 + \cdots + \frac{\partial z}{\partial x _ m} dx _ m \tag{20}
$$となります。ここで同時に$z$は$n$変数である$y$の関数でもあるとき、
$$
dz = \frac{\partial z}{\partial y _ 1} dy _ 1 + \frac{\partial z}{\partial y _ 2} dy _ 2 + \cdots + \frac{\partial z}{\partial y _ n} dy _ n \tag{21}
$$と表すことができます。ここで任意の$i$について
$$
dy _ i = \frac{\partial y _ i}{\partial x _ 1} d x _ 1 + \frac{\partial y _ i }{\partial x _ 2} dx _ 2 + \cdots + \frac{\partial y _ i }{\partial x _ m} dx _ m
$$が成り立つのでこれを$(21)$式に代入して整理し、$(20)$式と合わせると
$$
\begin{align}
dz =& \frac{\partial z}{\partial x _ 1} dx _ 1 + \frac{\partial z}{\partial x _ 2} dx _ 2 + \cdots + \frac{\partial z}{\partial x _ m} dx _ m \\
=& \left(
\frac{\partial z}{\partial y _ 1} \frac{\partial y _ 1}{\partial x _ 1} + \frac{\partial z}{\partial y _ 2} \frac{\partial y _ 2}{\partial x _ 1} + \cdots + \frac{\partial z}{\partial y _ n} \frac{\partial y _ n}{\partial x _ 1}
\right) d x _ 1 \\
&+ \left(
\frac{\partial z}{\partial y _ 1} \frac{\partial y _ 1}{\partial x _ 2} + \frac{\partial z}{\partial y _ 2} \frac{\partial y _ 2}{\partial x _ 2} + \cdots + \frac{\partial z}{\partial y _ n} \frac{\partial y _ n}{\partial x _ 2}
\right) d x _ 2 \\
&+ \cdots \\
&+ \left(
\frac{\partial z}{\partial y _ 1} \frac{\partial y _ 1}{\partial x _ m} + \frac{\partial z}{\partial y _ 2} \frac{\partial y _ 2}{\partial x _ m} + \cdots + \frac{\partial z}{\partial y _ n} \frac{\partial y _ n}{\partial x _ m}
\right) d x _ m
\end{align}
$$となりますから、係数を比較すれば任意の$i$について
$$
\frac{\partial z}{\partial x _ i} =
\frac{\partial z}{\partial y _ 1} \frac{\partial y _ 1}{\partial x _ i} + \frac{\partial z}{\partial y _ 2} \frac{\partial y _ 2}{\partial x _ i} + \cdots + \frac{\partial z}{\partial y _ n} \frac{\partial y _ n}{\partial x _ i}
$$が成り立っていることがわかります。はい、一丁上がり。