Chapter 06

微分と導関数

微分はある点での瞬間の変化率(傾き)を表します。導関数はそれを関数にしたもので、ディープラーニングの勾配降下法・誤差逆伝播の基礎になります。

home.mathDiagramTitle

home.mathDiagramDescription

左: 接線 — 曲線上の一点で一点だけ接する直線です。その傾きがその点での微分です。右: 二点を結ぶ線 — 曲線上の二点を結ぶ線です。二点を近づけるとこの線は接線に近づき、その極限が微分です。

曲線 y=x2y=x^2 上に一点 (2, 4) を取ります。この点で「傾き」を測りたいのです。

微分は接線の傾きです。「二点を結ぶ線の傾き」を二点を重ねたときの極限が接線の傾きです。

微分と導関数とは何か

一言で言うと:微分は、ある一点で曲線がどれだけ急か(傾き)を測るものです。グラフ上の一点で接線を引いたとき、その接線の傾きがその点での微分です。横が少し動いたときに縦がどれだけ速く変わるかを数で表した値です。
式で書くと:その傾きは「ごく近い2点間の平均の傾き」の極限で求めます。この極限があるとき微分可能といい、その値を微分係数f(a)f'(a) と書く)といいます。上のビジュアルの接線の傾きがこの微分係数です。
導関数は、各点での微分係数を集めた関数です。点ごとに接線の傾きが一つあるので、それをまとめたのが導関数です。導関数を求めることを微分するといいます。
区分説明
以下よく使う微分公式です。
'微分(導関数)を表します。
公式説明
定数微分すると 0
べき乗 xnx^n前に nn を出し、指数は n1n-1
自然指数 exe^x微分してもそのまま exe^x
一般の指数 axa^xaxlnaa^x \ln a
自然対数 lnx\ln x1/x1/x
対数(底 a)1/(xlna)1/(x \ln a)
sin微分すると cos
cos微分すると sin-\sin
tan微分すると 1/cos21/\cos^2
和・差それぞれ微分して足すか引く
定数倍定数はそのまま、中だけ微分
積の微分(1つ目微分)×2つ目 + 1つ目×(2つ目微分)
商の微分(上微分×下 − 上×下微分) / 下の2乗
直感(積)「1つ目を微分×2つ目」+「1つ目×2つ目を微分」。極限で分けると二つの変化が足されて2項になります。
直感(商)商を「上×(1/下)」と見て積の微分を使う。(1/下)の微分を代入して整理すると上の公式になります。
公式数値例解き方
定数(5)'=0、(-3)'=0微分すると 0
xnx^n(x3)=3x2(x^3)'=3x^2x=2x=2 で 12指数を前に、指数は n1n-1
exe^xx=0x=0 で 1、x=1x=1ee微分してもそのまま
axa^x(2x)=2xln2(2^x)'=2^x \ln 2axa^xlna\ln a をかける
lnx\ln xx=5x=51/51/5微分すると 1/x1/x
sinx=0x=0 で 1sin → cos
cosx=0x=0 で 0cos → sin-\sin
(x2+x3)=2x+3x2(x^2+x^3)'=2x+3x^2項ごとに微分して足す
定数倍(5x2)=10x(5x^2)'=10x定数そのまま、x2x^2 だけ微分
(xex)=ex(1+x)(x\cdot e^x)'=e^x(1+x)(1つ目微分)×2つ目 + 1つ目×(2つ目微分)
x/(x2+1)x/(x^2+1)x=1x=1 で 0(上微分×下−上×下微分)/下の2乗 に代入
日常でも「傾き」は「どちらの方向に、どれだけ速く変わっているか」を表します。例えば山を下るとき、いちばん急な方向が「傾きがいちばん大きい方向」です。反対に谷底(最小値)山の頂上(最大値)では、上がるでも下がるでもないので、その場所では傾きは0です。だから「いちばん低いところ」「いちばん高いところ」を探すのは「傾きが0のところ」を探すのと同じです。こういう「傾き」を式ではっきり表したのが微分です。微分がわかると、「どこがいちばん低い・高いか」だけでなく「どちらに進むと一番速く下れるか」まで計算できます。
ディープラーニングではまず「予測が正解に近いほどよい」という点数(損失)を一つ決めます。この点数が低いほどモデルがよく当たっていることになります。その点数を下げるために、モデルの中のたくさんの数(重み)を少しずつ変えます。でも数が多すぎて、「これを増やそう、あれを減らそう」と全部試すことはできません。そこで勾配(グラディエント)を使います。勾配は「各数を少し増やすと点数が下がるか上がるか、少し減らすとどうなるか」を一度に教えてくれる値で、導関数と同じ考え方です。それを見て「点数を下げるにはこの数は増やして、あの数は減らそう」と決めます。微分を知っていると「AIがなぜこう数字を変えるか」を説明できます。
誤差逆伝播は「答え(出力)側から入力側へ逆向きに」一歩ずつ進みながら、各数(重み)について「損失がどれだけ変わるか(微分)」を一つずつ計算する方法です。モデルは何段も重なっている(入力→第1層→…→出力)ので、重みを一つ変えると次の段が順に変わり、最後に損失が変わります。この「連鎖的に変わる」関係をたどって微分するには合成関数の微分(連鎖律)が必要です。この章で学ぶ導関数と公式がそのまま使われるので、ここでしっかり覚えておくとあとが楽です。
ふつう微分は「この値を少し変えたとき、結果がどれだけ変わり、どちら向き(増えるか減るか)に変わるか」を測る道具です。だから「この数字を増やすのがよいか、減らすのがよいか」を決めるときに使います。例えば気温が上がると売上が増えるか減るか、価格を上げると需要がどれだけ減るか、広告費を増やすと売上がどれだけ増えるか—こういう「一つを少し変えたとき、もう一つがどれだけ・どちらに変わるか」は、全部微分で測れます。
AIの学習では「各重みをどれだけ・どの方向に変えるか」が損失をその重みで微分した値で決まります。損失(点数)を下げたいけれど、重みが何千・何万もあるので一つずつ試すことはできません。だから「この重みを少し増やすと損失が下がるか上がるか」を微分で求めるのです。この章の微分公式(和・積・商・連鎖律)を知っていると逆伝播の式を読めるし、あとで偏微分・勾配(Ch08)に広げていけます。
導関数を求めるには、どの公式が使えるか(べき乗、指数、対数、三角、積・商・連鎖)を見て、公式通りに書き、整理します。
例題解答を表にまとめました。
問題解答
例1. f(x)=x32xf(x)=x^3-2x の導関数べき・和: f(x)=3x22f'(x)=3x^2-2
例2. g(x)=exlnxg(x)=e^x \ln x の導関数積の微分: exlnx+ex1xe^x \ln x + e^x \cdot \frac{1}{x}
例3. h(x)=sinxxh(x)=\frac{\sin x}{x} の導関数商の微分: cosxxsinxx2\frac{\cos x \cdot x - \sin x}{x^2}