ニューラルネットワークの学習方法として勾配下降法があります。
この学習法は損失関数の数値微分を用いることでニューラルネットワークの重みを変更し、任意の関数を表すようネットワークを学習させます。
今回はこの勾配下降法・損失関数・数値微分について調べました。
先日の記事では単純パーセプトロンの学習方法を調べました。
しかしこの誤り訂正学習ではニューラルネットワーク(多層パーセプトロン)学習を行うことができません。
そこでニューラルネットワークの学習に必要となるものが勾配下降法です。
勾配下降法
勾配下降法とは関数の微分を用いて、その関数の(局所的な)最小値を求める方法です。
簡単な例を次に示します。
図は関数f(x) = x2 / 2 と関数上の点Aを表しています。
この点Aを関数の最小値に移動させるためにはどのような計算をすればよいでしょうか?
勾配下降法では次の式を用いてこの点Aを、関数の最小値へ近づけます。
ここでηは学習量(例えばη=0.1)を表します。
例えば上記の例では x ← x – η(x) 、点Aの初期値x=2 を代入すると、点Aの位置は次のように移動します。
x ← 2 – 0.1 * 2 = 1.80 , y = 1.80 * 1.80 / 2 = 1.62
そして移動した点A(1.80,1.62)を再び先ほどの式に代入すると次のようになります。
x ← 1.80 – 0.1 * 1.80 = 1.62 , y = 1.62 * 1.62 /2 = 1.31
これを来る返すことで点Aは最終的に関数f(x)の最小値x= 0付近まで移動することができます。
このように関数の微分を用いてい関数の最小値を探る方法を 勾配下降法といいます。
そこでニューラルネットワークの学習では何の関数の最小値を勾配下降法で探るのでしょうか?
損失関数
損失関数はニューラルネットワークのの重みパラメータが、どれだけ適切な値であるか検討するための指標となるものです。
損失関数とは簡単に言えばニューラルネットワークの出力と教師データ(正解データ)の差が大きければ大きいほど、大きな値を示す関数です。
具体的な例を挙げるために、有名な二つの損失関数を上げます。
- 交差エントロピー誤差関数
- 二乗和誤差関数
交差エントロピー誤差関数
交差エントロピー誤差関数の定義を次に示します。
ここでyk をニューラルネットワークの出力値、tkをニューラルネットワークの入力の教師データを表しています。
二乗和誤差関数
二乗和誤差関数の定義を次に示します。
ここでyk をニューラルネットワークの出力値、tkをニューラルネットワークの入力の教師データを表しています。
勾配下降法の適用
交差エントロピー誤差関数・二乗和誤差関数ともに、ニューラルネットワークのの出力と教師データの出力の差が小さいとき出力の値が小さくなります。
つまりニューラルネットワークの正答率が高いとき、損失関数は低い値を示します。
ではこの損失関数の値を小さくするためにはどうすればいいでしょうか?
ここで先ほど挙げた勾配下降法をこのニューラルネットワークの損失関数に適用します。
上記の勾配下降法の式のx に重みWを、f(x)に損失関数L(w)を代入し、次の操作をすることで損失関数Lを減らす方向に重みWを学習させます。
数値微分
勾配下降法を用いて、損失関数が最少となる重みパラメータwを求めることでニューラルネットワークの学習を行うことができます。
しかし勾配下降法を使用するためには関数の微分を求める必要があります。
勾配下降法の例で挙げたy = x2 / 2 の微分は解析的に解くことができるので簡単に計算することができます。
しかし損失関数の重みwによる微分はどうでしょうか?
重みパラメータは時に何百個もニューラルネットワーク内に出てくるので、解析的に微分を行うことが難しいです。
そこで今回は数値微分によって微分値を近似的に求めます。
数値微分の方法を次に示します。
ここでhは微小な数値(例えばh=0.001)です。
f(x) = x2 / 2の場合で解析的微分と数値微分を比べます。点A(2,2)での微分値は次のようになります。
- 解析的微分 : df(x)/dx = x、よってx = 2での微分値は 2
- 数値微分 : x = 2, h = 0.001 で、 微分値は1.999
数値微分と解析的微分ではほぼ同じ値が計算されました。
損失関数Lの微分も同様にこの数値微分を用いて計算します。
まとめ
- 勾配下降法を用いれば関数の(局所的な)最小値を数値計算で求めることができる。
- 損失関数はニューラルネットワークの出力と教師データの差が大きいほど、大きな値を出力する関数である。
- 有名な損失関数として、交差エントロピー誤差関数・二乗和誤差関数がある。
- 勾配下降法を用いて損失関数が減少する方向に重みWを更新することによって、ニューラルネットワークを学習させることができる。
- 解析的に微分できない関数には、数値微分によって微分値を近似的に得る。
関連記事