HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > ゼロから作るDeep Learning

ゼロから作るDeep Learning
準備3:多変数関数の数値微分と極小値の探索

文責:遠藤 理平 (2017年4月12日) カテゴリ:ゼロから作るDeep Learning(49)

昨今注目を集めているAI(人工知能)を学びたいと思い立ち、ディープラーニング(Deep Learning、深層学習)と呼ばれるAIの数理モデルである多層構造のニューラルネットワークを書籍「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」を参考にを独習していきたいと思います。本書籍ではプログラミング言語としてPythonが利用されていますが、本項ではJavaScriptで実装していきます。

目次


Deep Learning では、損失関数と呼ばれる正解からのズレを最小化することを学習と位置づけています。 損失関数はパラメータの数分の引数をもつ多変数関数で定義され、入力に対して多変数関数が小さくなるようにパラメータを調整します。 その際に必要となるのが多変数関数の数値微分です。本項では次の2変数関数の数値微分の計算方法と最小値を探索する計算アルゴリズムについて解説します。

多変数関数の数値微分

多変数関数の数値微分の題材として次の2変数関数を取り上げます。

f(x,y) = x^2 + y^2

多変数関数の数値微分の定義

多変数関数の微分の定義は次のとおりです。

\frac{\partial f(x,y)}{\partial x} = \lim_{d\to0} \frac{f(x+d,y)-f(x,y)}{d}
\frac{\partial f(x,y)}{\partial y} = \lim_{d\to0} \frac{f(x,y+d)-f(x,y)}{d}

上記の関数のように関数形があらかじめ分かっている場合には微分を解析的に計算することができますが、関数形が未知の場合には数値的に計算するしかありません。 コンピュータでは無限小を扱うことができないため、微分をdを小さな値として次のとおりに定義します。

\frac{\partial f(x,y)}{\partial x} = \frac{f(x+d,y)-f(x,y)}{d}
\frac{\partial f(x,y)}{\partial y} = \frac{f(x,y+d)-f(x,y)}{d}

これで(x,y)地点における勾配を得ることができます。原理的にはdは小さいほど真の値に近づくはずですが、コンピュータが扱うことのできる有効桁数が倍精度で15桁程度なので、小さすぎると桁落ちのために精度が反対に悪化します。 ニューラルネットワークでは正確な勾配は必要ないので探索する領域の1/1000程度で十分たと思います。ただし、上記のアルゴリズムは(x,y)地点の勾配を(x,y)と(x+d,y)と(x,y+d)の地点の値を用いていて対称性が悪いです。 次のように定義を変更することで対称性を良くなり、計算精度がdの1次分だけ上がります。

\frac{\partial f(x,y)}{\partial x} = \frac{f(x+d/2,y)-f(x-d/2,y)}{d}
\frac{\partial f(x,y)}{\partial y} = \frac{f(x,y+d/2)-f(x,y-d/2)}{d}

先の計算アルゴリズムは前進差分による数値微分、後は中心差分による数値微分と呼ばれます。

勾配法による極小値の探索

勾配を計算することができると、任意の地点から出発して勾配の下向きに向かって移動することで極小値にたどり着くことができます。 具体的には初期値(x_0, y_0)からスタートして次の計算アルゴリズムに従って計算します。

x_{n+1}=x_{n}-\eta\left.\frac{\partial f(x,y)}{\partial x}\right|_{x=x_n,\ y=y_n}
y_{n+1}=y_{n}-\eta\left.\frac{\partial f(x,y)}{\partial y}\right|_{x=x_n,\ y=y_n}

上記の計算アルゴリズムを用いて極小値の探索を実行してみましょう。極小値(x_\min, y_\min)からのズレを

L_n = \frac{1}{2}\left[(x_n-x_\min)^2+(y_n-y_\min)^2\right]

で評価した結果が次のグラフです。

2つのグラフは前進差分と中心差分における結果です。中心差分の方が極小値の真の値へ向うことが確認できました。



▲このページのトップNPO法人 natural science トップ

関連記事

ゼロから作るDeep Learning







▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました