本シリーズでは、以下の本に沿って数学を解説している。
前回は、ベクトルについて解説を行った。
ベクトルとは、通常の数ではなく、向きと大きさを持つ量だった。
イメージは2次元や3次元であればしやすいが、なかなか4次元以上となると難しい。
とはいえ、同じ考え方で進めることができるので、しっかり身に付けておこう。
以下がその記事だ。
さて、今回は微分を解説していこう。
微分はなかなかに難しく、何をしているのかをしっかり意識しないと迷子になってしまう。
計算も複雑になってくるので、一個一個慎重に進めていこう。
微分
では、早速始めよう。
そもそもなぜ微分をやるかについて、軽く触れておこう。
ニューラルネットワークで何かを学習する際、その中にあるパラメータという数値を調整していくことになる。
その調整のことを最適化と呼ぶのだが、これをするために微分が必要なのだ。
で、その微分なのだが、言葉で説明すると「導関数を求めること」となる。
…というわけで、その導関数を説明していこう。
導関数
これが表しているものは後で解説するとして、先に公式だけ出してしまおう。
ある関数\(f(x)\)の導関数は、以下の式で与えられる。
$$f'(x) = \lim_{\Delta x \to 0}\frac{f(x + \Delta x) – f(x)}{\Delta x}$$
先に各記号の説明を。
左辺にある\(f'(x)\)が、導関数を表す記号だ。
この点には、プライムという名前がついている。
次に\(\Delta x\)、この三角みたいなやつはデルタと読む。
後で解釈を説明するが、ここではごく小さな値のようなイメージを持っておいてもらえるといいだろう。
そして、極限を表す\(\lim\)、これは下に書かれている変数が矢印の値に近づくとき、その右側がどんな値に近づくかを表している。
ということで、これで導関数が定義できた…のだが、いきなりこれで計算しろなんていうのも難しいと思う。
そこで、幾つか具体的にグラフを出しながらこの導関数を求めてみよう。
まずは、\(f(x) = 2x + 1\)で計算してみよう。
このグラフを出すと以下の通りだ。
単純な一次関数なので、図のように直線になる。
さて、これの導関数を求めてみよう。
ちょっと丁寧に進めていきたいので、先に導関数の定義式を再掲しておく。
$$f'(x) = \lim_{\Delta x \to 0}\frac{f(x + \Delta x) – f(x)}{\Delta x}$$
これで、右辺の\(f(x)\)を具体的な中身に置き換えよう。
$$f'(x) = \lim_{\Delta x \to 0}\frac{2(x + \Delta x) + 1 – (2x + 1)}{\Delta x}$$
分数の分子を展開して、整理する。
$$f'(x) = \lim_{\Delta x \to 0}\frac{2x + 2\Delta x + 1 – 2x – 1}{\Delta x}$$
$$f'(x) = \lim_{\Delta x \to 0}\frac{2\Delta x}{\Delta x}$$
\(\Delta x\)で約分をする。
$$f'(x) = \lim_{\Delta x \to 0}2$$
これで、極限を求めるのだが、極限の中に変数が無くなったので、そのまま取ればいい。
ということで、最終的に…
$$f'(x) = 2$$
と求めることができた。
次に、ちょっと次数を増やして\(f(x) = 2x^3 + 3x^2 – 12x – 3\)の導関数を求めてみよう。
先に、これもグラフを出しておく。
三次関数なので、ちょっと見慣れない形になっていると思う。
では、この導関数を同じように求めていこう。
まず、同じように定義を再掲しておく。
$$f'(x) = \lim_{\Delta x \to 0}\frac{f(x + \Delta x) – f(x)}{\Delta x}$$
右辺の関数部分に、実際の関数の中身を入れてみる。
$$f'(x) = \lim_{\Delta x \to 0}\frac{2(x + \Delta x)^3 + 3(x + \Delta x)^2 – 12(x + \Delta x) – 3 – (2x^3 + 3x^2 – 12x – 3)}{\Delta x}$$
分子をゴリゴリ展開して整理すると、以下のようになる。
$$f'(x) = \lim_{\Delta x \to 0}\frac{6x^2\Delta x + 6x\Delta x^2 + 2\Delta x^3 + 6x\Delta x + 3\Delta x^2 – 12\Delta x}{\Delta x}$$
分子の各項に\(\Delta x\)が掛けられているので、約分ができる。
$$f'(x) = \lim_{\Delta x \to 0}(6x^2 + 6x\Delta x + 2\Delta x^2 + 6x + 3\Delta x – 12)$$
あとは極限の計算で、各\(\Delta x\)に0を代入すればいいので…
$$f'(x) = 6x^2 + 6x – 12$$
と求めることができた。
導関数の意味
さて、上でゴリゴリ計算する過程を見せたが、そもそも何をしているのか、というのが疑問だと思う。
ここから、感覚的な話にはなるが、導関数の意味を説明していこう。
ずばり、導関数とは、その\(x\)における接線の傾きを求めていることになる。
どういうことか、詳しく見ていこう。
中学の復習だが、2点\(x = (x_1, x_2)\)と\(y = (y_1, y_2)\)を通る直線の傾き\(a\)は以下の式で求めることができた。
$$a = \frac{y_2 – x_2}{y_1 – x_1}$$
そして、この二つの点が、ある関数\(f(x)\)上にあるとしよう。
つまり、点の座標は\(x = (x_1, f(x_1))\)、\(y = (y_1, f(y_1))\)と置き換えることができる。
この状態で、この2点を通る直線の傾きも書き直してみよう。
$$a = \frac{f(y_1) – f(x_1)}{y_1 – x_1}$$
ここで、文字を置き換える。
\(x_1\)を改めて\(x\)、\(y_1\)は\(x\)とこの二つの間のズレを足すイメージで、\(x + \Delta x\)と置いてみる。
そして、傾きの式を改めてこれらで書き直してみよう。
$$a = \frac{f(x + \Delta x) – f(x)}{x + \Delta x – x}$$
$$a = \frac{f(x + \Delta x) – f(x)}{\Delta x}$$
なにか、見覚えのあるような形になってきた。
今、\(\Delta x\)は、2点間のx座標のズレを表している。
これを0に近づけるとどうなるかというと、ある点\(x\)における接線の傾きを求めることができる。
それを数式で表したものが以下、つまり導関数なのだ。
$$f'(x) = \lim_{\Delta x \to 0}\frac{f(x + \Delta x) – f(x)}{\Delta x}$$
これを求められると何が嬉しいかというと、ある\(x\)において、その関数が増加しているのか、減少しているのか、あるいは真横を向いているのか、といった判別ができるようになる。
ある\(x\)で傾きが正ならそこでは増加傾向にあると分かるし、逆に負なら減少傾向。
もちろん、傾きが0ならそこでは横を向いている。
この性質が、とても重要になる。
導関数の主要な公式
導関数の求め方と意味は分かった。
しかし、毎回あんな面倒な計算をするのも時間がかかるだろう。
そこで、幾つか非常に使える公式が用意されている。
ざっと、本に載っているものを紹介してしまおう。
まず、\(n\)を定数として、\(f(x) = x^n\)のとき、導関数は以下のようになる。
$$f'(x) = nx^{n – 1}$$
元々の次数を掛け、その次数は1少なくしてあげればいい。
なお、この\(n\)が0、つまり定数を微分した場合、その導関数の値は0だ。
次に、関数のところでちょっと紹介したネイピア数\(e\)に関するもの。
\(f(x) = e^x\)という指数関数を微分すると、以下のようになる。
$$f'(x) = e^x$$
そう、微分しても形が変化しないのだ。
これが、名前を紹介したときに書いた性質だ。
ここまでが、具体的な関数に対する微分の公式だ。
もう二つ、覚えておくと便利な公式を紹介しておこう。
まず、二つの関数\(f(x)\)と\(g(x)\)が足されていた場合。
これ全体を微分するときは、それぞれ微分したものを足し合わせればよくなる。
$$\{f(x) + g(x)\}’ = f'(x) + g'(x)$$
また、関数全体が定数倍されていたときは、微分した後に定数倍しても問題ない。
$$\{cf(x)\}’ = cf'(x)$$
ちなみに、最後の二つは合わせて線形性と呼ばれる性質だ。
シグマも同じ性質を持っているので、併せて覚えておこう。
計算練習
最後に、このあたりを使った計算練習をして終わりにしよう。
上でゴリゴリ計算していた関数\(f(x) = 2x^3 + 3x^2 – 12x – 3\)を、今度は公式を使って微分してみる。
まずは線形性の一つ目、和の微分は微分の和を使って、4つの項をそれぞれで微分すればいいと分かる。
\(2x^3\)について、定数の2が掛けられているので、\(x^3\)を微分してから2を掛ければいい。
一つ目に出した公式から、\(x^3\)を微分すると\(3x^2\)となる。
これに2を掛ければいいので、一つ目の項は\(6x^2\)となる。
同じように二つ目の項、\(3x^2\)を見ていこう。
定数で3が掛けられているので、まずは\(x^2\)を微分する。
これは\(2x\)になるので、3を掛けて\(6x\)だ。
同じように第三項は\(-12\)、第四項は定数の微分なので0だ。
最後にこれらを足し合わせ、\(f'(x) = 6x^2 + 6x – 12\)と求めることができた。
上で求めた式と一致していると思う。
おわりに
今回は微分について解説をしてきた。
…のだが、実はまだ解説する内容が残っている。
しかし、記事の長さが長くなってきたし、密度もだいぶ高いので、一旦区切ることにしよう。
ということで、次回は微分の続きを解説していく。
具体的には、合成関数の微分や、複数の変数が入った関数の微分などを解説していく。
ここからさらに難しくなってくるので、今回までの内容はしっかり頭に入れた状態で進んでいこう。
2020/11/03追記
次回の内容を公開した、のだが。
またしても長くなってしまったので、合成関数の微分と、関数の最小値に関する原理の紹介に留めた。
やはり重要なところが多いので、確実に進めてもらいたい。
コメント