ディープラーニングのための数学勉強結果「多変数関数の微分」

本シリーズでは、以下の本に沿って数学を解説している。

Bitly

前回は微分編2回目ということで、合成関数の微分と、関数の最小値に関する原理を説明した。

各種公式だったり、記号なんかも出てきたが、理解できただろうか。

特に記号は今回もガンガン使っていくので、早いうちに慣れてしまおう。

以下がその記事だ。

さて、今回は多変数関数の微分を解説していく。

ここからは恐らく大学以降の内容になる。

直感的に分かりづらい部分も出てくると思うので、落ち着いて確実に進めていこう。

スポンサーリンク

多変数関数

さて、微分の話に入る前に、これを少し触れておこう。

関数の復習

本シリーズの初回で解説した関数だが、ちょっと期間が空いてしまったので軽く復習しておく。

ある変数\(x\)の値を決めたときに、それに伴って別の変数\(y\)の値が一意に定まるとき、\(y\)は\(x\)の関数である、という説明をした。

その具体例として、一次関数\(y = ax + b\)や二次関数\(y = ax^2 + bx + c\)などがあった。

また、このときの\(x\)を独立変数、\(y\)を従属変数と呼ぶことも書いたと思う。

さて、ここまでの内容では、独立変数が一つだけだった。

つまり、ある変数1つだけを決めれば、その関数自体の値も一つに定まったのだ。

これから解説する内容は、この独立変数の種類が増える。

多変数関数

多変数関数とは、独立変数が2つ以上の関数のことだ。

例えば、\(x_1\)、\(x_2\)の二つが決まれば\(y\)の値が決まるような、以下の関数が該当する。

$$y = ax_1 + bx_2 + c$$

これは、2つの変数を持つ多変数関数の一番簡単な例だろう。

今は二つで考えているが、もちろん三つ以上でも同じだ。

そして、一つの独立変数の場合は、\(y = f(x)\)という表記をしていた。

これも、多変数関数の場合は、\(y = f(x_1, x_2)\)といった表記になる。

2変数関数の具体例を挙げるとすると、郵便物のサイズ決定だろうか。

荷物の3辺の長さの合計\(x_1\)と、その荷物の重さ\(x_2\)が決定すれば、その荷物のサイズ\(y\)が決まる。

式にしようと思うとちょっと複雑になるので避けるが、2変数関数のイメージはこんな感じだ。

なお、ニューラルネットワークでは、この独立変数の数は1万を超えることが多い。

その場合でも同じ考え方が使えるので、まずは2変数で感覚を掴んでいこう。

多変数関数の微分

では、微分の話に進んでいこう。

独立変数が一つであるような関数の場合、単に微分すると言えば、その独立変数に対する微分だと分かる。

前回まで解説していたものがそうだ。

それに対し、多変数となると、そのどれに対して微分するかを決めなければいけない

このように、多変数関数\(y = f(x_1, x_2, …, x_n)\)に含まれるある独立変数\(x_i\)について微分することを、\(x_i\)で偏微分すると呼ぶ。

説明を簡単にするために、ここでは2変数関数\(y = f(x_1, x_2)\)で考えてみよう。

これを\(x_1\)で偏微分する、ということを記号で表すと以下の通りだ。

$$\frac{\partial y}{\partial x_1} = \frac{\partial f(x_1, x_2)}{\partial x_1}$$

こうすることで、どの変数で微分したいかが分かるようになる。

また、この導関数は以下の式で定義できる。

$$\frac{\partial f(x_1, x_2)}{\partial x_1} = \lim_{\Delta x_1 \to 0} \frac{f(x_1 + \Delta x_1, x_2) – f(x_1, x_2)}{\Delta x_1}$$

式だけ見ても分かりづらいので、言葉で説明しよう。

多変数関数で、微分したい独立変数\(x_1\)以外を定数と見なして、その\(x_1\)で微分すること偏微分と呼ぶのだ。

そう、結局はこれまでの微分がメインとなる。

ちょっと、具体的な関数で計算をしてみよう。

以下の2変数関数で考えてみる。

$$y = f(x_1, x_2) = 2x_1^2 + 4x_2^2$$

これで、\(x_1\)、\(x_2\)それぞれについて偏微分をしてみよう。

まずは\(x_1\)から。

$$\frac{\partial y}{\partial x_1} = \frac{\partial}{\partial x_1}(2x_1^2 + 4x_2^2)$$

今、注目していない\(x_2\)は定数と見なせるので…

$$\frac{\partial y}{\partial x_1} = 4x_1$$

となる。

同じように、\(x_2\)について偏微分すると…

$$\frac{\partial y}{\partial x_2} = 8x_2$$

となるのだ。

多変数関数の合成関数の微分

1変数関数のときに考えていた合成関数の微分も、多変数関数に拡張してみよう。

ただし、これも2変数関数で見ていく。

ちょっと文字の種類が一気に増えるが、なんとか追い付いてきてもらいたい。

ある変数\(z\)が\(u, v\)の関数で、さらに\(u, v\)がそれぞれ\(x, y\)の関数だったとする。

ちょっと書き換えると、\(f, g, h\)がそれぞれ関数として、以下のように表せる。

$$z = f(u, v)$$

$$u = g(x, y)$$

$$v = h(x, y)$$

このとき、以下のように書き直せるので、結局\(z\)は\(x, y\)の関数ということが分かる。

$$z = f(g(x, y), h(x, y))$$

このとき、合成関数の偏微分は以下のように書き表せる。

$$\frac{\partial z}{\partial x} = \frac{\partial z}{\partial u} \frac{\partial u}{\partial x} + \frac{\partial z}{\partial v} \frac{\partial v}{\partial x}$$

$$\frac{\partial z}{\partial y} = \frac{\partial z}{\partial u} \frac{\partial u}{\partial y} + \frac{\partial z}{\partial v} \frac{\partial v}{\partial y}$$

ちょっと、具体例で計算をしてみよう。

今、以下の関数があったとする。

$$z = (3x + y)^2 + (2x^2 – y)^2$$

このとき、\(u, v\)を以下のように置いてみよう。

$$u = 3x + y$$

$$v = 2x^2 – y$$

すると、\(z\)は以下のように置き直せる。

$$z = u^2 + v^2$$

これで、それぞれ\(x, y\)について偏微分をしてみよう。

先に、両方で使う\(z\)を\(u, v\)それぞれで偏微分したものを求めておく。

$$\frac{\partial z}{\partial u} = 2u$$

$$\frac{\partial z}{\partial v} = 2v$$

では、まず\(x\)による偏微分から求めていく。

公式によると、\(u\)を\(x\)で偏微分したもの、\(v\)を\(x\)で偏微分したものが分かればいいので、これらを求めていく。

$$\frac{\partial u}{\partial x} = 3$$

$$\frac{\partial v}{\partial x} = 4x$$

これで、公式に当てはめてみよう。

$$
\begin{eqnarray}
\frac{\partial z}{\partial x} & = & 2u \times 3 + 2v \times 4x \\
& = & 6(3x + y) + 8x(2x^2 – y) \\
& = & 16x^3 + 18x – 8xy + 6y
\end{eqnarray}
$$

と求めることができた。

同じように、今度は\(y\)で偏微分していく。

$$\frac{\partial u}{\partial y} = 1$$

$$\frac{\partial v}{\partial y} = -1$$

$$
\begin{eqnarray}
\frac{\partial z}{\partial y} & = & 2u – 2v \\
& = & 2(3x + y) – 2(2x^2 – y) \\
& = & 4y – 4x^2 +6x
\end{eqnarray}
$$

こうなる。

…さて、これで本当に合っているのだろうか。

ちょっと、ゴリゴリ展開して、普通に偏微分をしてみよう。

$$
\begin{eqnarray}
z & = & (3x + y)^2 + (2x^2 – y)^2 \\
& = & 9x^2 + 6xy + y^2 + 4x^4 – 4x^2y + y^2 \\
& = & 4x^4 + 9x^2 – 4x^2y + 6xy + 2y^2
\end{eqnarray}
$$

これについて、それぞれで偏微分した結果が以下の通り。

$$\frac{\partial z}{\partial x} = 16x^3 + 18x – 8xy + 6y$$

$$\frac{\partial z}{\partial y} = 4y – 4x^2 + 6x$$

これで、両方とも一致することが分かった。

このように、2変数関数でも合成関数の微分を考えることができる。

これは3変数以上でも同じだ。

最後に、3変数の場合の式だけ紹介して今回は終わりにしよう。

ある変数\(z\)が\(t, u, v\)の関数で、この\(t, u, v\)がそれぞれ\(x, y, w\)の関数だったとしよう。

つまり、以下の関係になっている、ということだ。

$$z = f(t, u, v)$$

$$t = g(x, y, w)$$

$$u = h(x, y, w)$$

$$v = k(x, y, w)$$

このとき、最終的に\(z\)は以下のように書き直せ、\(x, y, w\)の3変数を持つ関数だと分かる。

$$z = f(g(x, y, w), h(x, y, w), k(x, y, w))$$

具体例だと…

$$z = (x + 2y + w)^2 + (3x – y + 2w)^2 + (4x + 5y – w)^2$$

というような感じ。

この、それぞれ\(x, y, w\)による偏微分は以下のようになる。

$$\frac{\partial z}{\partial x} = \frac{\partial z}{\partial t} \frac{\partial t}{\partial x} + \frac{\partial z}{\partial u} \frac{\partial u}{\partial x} + \frac{\partial z}{\partial v} \frac{\partial v}{\partial x}$$

$$\frac{\partial z}{\partial y} = \frac{\partial z}{\partial t} \frac{\partial t}{\partial y} + \frac{\partial z}{\partial u} \frac{\partial u}{\partial y} + \frac{\partial z}{\partial v} \frac{\partial v}{\partial y}$$

$$\frac{\partial z}{\partial w} = \frac{\partial z}{\partial t} \frac{\partial t}{\partial w} + \frac{\partial z}{\partial u} \frac{\partial u}{\partial w} + \frac{\partial z}{\partial v} \frac{\partial v}{\partial w}$$

…紹介はしたものの、かなり複雑なので使用時には補足することとしよう。

おわりに

今回は、多変数関数の微分について解説した。

結局は、注目する変数のみを変数、それ以外を定数と見て微分しよう、というお話だ。

合成関数の偏微分も紹介したが、やはり慣れないとなかなか計算は難しい。

今後使う例が出てくると思うので、その時に再度解説することとしよう。

さて、次回はようやくニューラルネットワークっぽい話題に入る。

これまでにも何度か名前を出していた、勾配降下法というものを解説しよう。

…実は幾つか本の内容を飛ばしてしまったところもある。

それらについては、必要時に随時解説を入れていこう。

2020/11/08追記

勾配降下法の解説を公開した。

一回で理解するのは恐らく難しいので、何度か繰り返し読んでみよう。

コメント

タイトルとURLをコピーしました