Posted at

ニューラルネットワークをざっくりと理解する 損失関数、誤差逆伝播法編

前回、ニューラルネットワークをざっくりと理解する パーセプトロン、活性化関数編でパーセプトロン、活性化関数についてざっくりと解説しました。今回では損失関数、誤差逆伝播法(バックプロパゲーション)について紹介していきます。


学習とは

そもそも学習するとは、予測と正解ラベルが最大限に一致するように重みパラメータを最適に調整することです。では最適とはどのように判断するのでしょうか。


  • モデルの当てはまりの良さを考える

スクリーンショット 2019-03-03 21.21.03.png

上のグラフの二本の線はどちらの当てはまりが良いでしょうか?

下の線の当てはまりが良さそうですが、この当てはまりを定量的に計る必要があります。


損失関数

予測値と正解値にどれくらいの誤差(損失)があるのかを示す関数で、誤差(損失)とはモデルの当てはまり(精度)の悪さを示している。

つまり、誤差(損失)が小さいほど、そのモデルは優秀であるといえます。この誤差(損失)が最小になっている状態を最適と言い学習の目標は、この損失関数を最小化(最適化)することです。


損失関数の種類

扱うデータ、モデル、分析の目的に応じて正しく損失関数を定義する。


  • 回帰問題:二乗誤差

二乗誤差を最小化するように重みパラメータを決定する手法を最小二乗法と呼びます。数式は以下の通りです。

スクリーンショット 2019-03-03 22.07.30.png


  • 分類問題:交差エントロピー

尤度関数というモデルの当てはまりの良さを示す関数の負の対数を撮ったもの。予測値と正解値が一致していると0になります。数式は以下の通りです。

・二値分類

スクリーンショット 2019-03-03 22.09.20.png

・多値分類

スクリーンショット 2019-03-03 22.05.20.png

多値分類の具体例:

2つのモデルを使ってある人の服のサイズ(S,M,L)を予測したい。

出力はそれぞれ以下のようになった。なお正解ラベルはMです。

y = (S, M, L)

1, y=(0.01, 0.98, 0.01)

2, y=(0.25, 0.60, 0.15)

それぞれの交差エントロピーを計算すると

1, y = -(0 * log0.01 + 1 * log0.98 + 0 * log0.01)=-{0 + (-0.02) + 0} = 0.02

2, y = -(0 * log0.25 + 1 * log0.60 + 0 * log0.15)=-{0 + (-0.51) + 0} = 0.51

となり、1番の出力の誤差の方が小さいため最適であると言えます。


損失関数の最小化方法と種類

一般に、ある関数の最小値を求めたいというときは、それぞれの変数について偏微分したものを0と置いて連立方程式を解く。偏微分によって得られた関数は接戦の傾きを表しており、最小値では接戦の傾きが0になるため=0とおけます。


  • 勾配降下法

・重みパラメータを少しずつ更新していって最適値を探す方法。

・損失関数を重みパラメータで偏微分すると、接戦の傾きを求めることができる。またどちらの方向に重みを変化させると損失が減少するかがわかります。

スクリーンショット 2019-03-03 22.43.58.png

※矢印は更新方向

接戦の傾きがマイナスなら重みを増加し、接戦の傾きがプラスなら減少させると最小値に近づく。

更新式は以下の通りになります。

スクリーンショット 2019-03-03 22.58.20.png


  • ミニバッチ勾配降下法

膨大なデータを取り扱うことが多い近年、そうなるとすべてのデータについての誤差を計算することが計算コストの観点から難しく、また非効率です。ミニバッチ勾配降下法はランダムにいくつかのデータ集合(ミニバッチ)を使って、実際には勾配降下法を適応します。

ミニバッチの大きさはデータによって変わるが、32,64,128,256など2の累乗が使われることが多い。

では実際に勾配降下法をニューラルネットワーク(多層パーセプトロン)に適用させてみる。

スクリーンショット 2019-03-04 21.16.39.png

なお重みパラメータは次のように見ます。

スクリーンショット 2019-03-04 21.18.53.png

最終的な予測値image.pngimage.png(正解ラベル)の二乗誤差を考えると以下のようになります。

スクリーンショット 2019-03-04 21.23.45.png

この損失関数をそれぞれの重みパラメータで偏微分した形image.pngを求める。今回は例としてimage.pngで偏微分してみます。

スクリーンショット 2019-03-04 21.36.06.png

この数式はimage.pngという予測値に対して一番はじめの重みパラーメータimage.pngをどれだけ変化させるのかという式です。一つの重みパラメータを求めるだけで一苦労ですが、すべての重みパラメータについて、さらにデータN個分計算することになります。つまり偏微分の具体的な結果を求めることが困難であるため、偏微分の結果をもっと簡単に得る工夫が必要となります。


誤差逆伝播法(バックプロバゲーション)

誤差逆伝播法(バックプロバゲーション)の前に微分の連鎖律について解説しておきます。


微分の連鎖律

今回の目標は、image.pngを簡単に求めることですが、そこで微分の連鎖律を使います。

微分の連鎖律とは、関数image.pngimage.pngがある時、image.pngimage.pngでの微分は以下の通りになります。

image.png

多変数関数の場合を考えてみる。image.pngimage.png,image.pngの関数でimage.png,image.pngimage.png,image.pngの関数であるとき

image.png

となります。

より一般的ににするとimage.pngimage.pngの関数でimage.pngimage.pngの関数のとき

image.png

となります。

以上が微分の連鎖律の説明でした。


誤差逆伝播法

以下のようなニューラルネットワークで考えてみる。

スクリーンショット 2019-03-05 22.13.48.png

なおimage.pngは重み付き和でimage.pngは活性化関数による変換後の値でimage.pngは活性化関数を示しています。

スクリーンショット 2019-03-04 22.15.35.png

つまり、重み付き和image.png

スクリーンショット 2019-03-04 22.21.18.png

活性化関数による変換後のimage.png

スクリーンショット 2019-03-04 22.28.23.png

と表すことができます。

例,image.pngを求めてみる。

スクリーンショット 2019-03-04 22.25.30.png

では本題に入りまして、誤差逆伝播法を適用していきましょう。

ここでは考えやすいように損失関数に2乗誤差を、出力層の活性化関数に恒等関数を用いた回帰問題について考えていきます。

今知りたいのは、損失関数image.pngを重みパラメータimage.pngで偏微分したimage.pngを求めることです。

まず出力層の重みパラメータを考え、微分の連鎖律を使うと以下のようになります。

image.png

求める値が右辺に2項に分解したので1項ずつ求めます。

まずは2項目image.pngについて分子を考えると

image.png

よって

image.png

となる。

続いて1項目image.pngと置く。

微分の連鎖律を使ってimage.pngを変形していくと

image.png

さらにimage.pngであるから

image.png

となり、出力層の活性化関数に恒等関数を用いているため、2項目は1となります。よって求めるべきは1項目であるから

image.png

となり、損失関数は2乗誤差を用いているため

image.png

であるから

image.png

よって

image.png

となります。

同様に中間層についても考えてみる。

image.png

image.pngかつimage.pngであるからimage.pngと置き換えることができ、以下のような式になります。

image.png

image.pngについて補足しておくと以下の図のような関係になっています。

スクリーンショット 2019-03-05 23.16.03.png

では1項目について考えてみると、image.png

image.png

と置いているから

image.png

となり、3項目image.pngimage.pngであるから

image.png

となり、最後に2項目image.pngについて考えると

image.png

よって

image.png

すべての項を合わせると

image.png

image.png番目のimage.pngは常にimage.png番目のimage.pngから求めることができる。

image.png番目、つまり1つ先のimage.pngをずっと辿っていくと出力層のimage.pngにたどり着く。

なお出力層のimage.pngは以下の式のように簡単に求められました。

image.png

image.pngにおける勾配を求めるためには出力層からimage.png(誤差)を伝達してくれば良い。

このimage.pngが出力層から伝わってくる様子から逆伝播と呼ばれています。

難しい数式だらけでしたが以上が誤差逆伝播法の解説でした。