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

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

Bitly

前回は、ベクトルについて解説を行った。

ベクトルとは、通常の数ではなく、向きと大きさを持つ量だった。

イメージは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) = 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) = 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追記

次回の内容を公開した、のだが。

またしても長くなってしまったので、合成関数の微分と、関数の最小値に関する原理の紹介に留めた。

やはり重要なところが多いので、確実に進めてもらいたい。

コメント

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