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

トップページ研究分野と周辺ニューラルネットワーク

誤差逆伝播法(BP:バック・プロパゲーション)は1986年、米スタンフォード大学のラメルハート教授らが発表した多層階層型ニューラルネットワークの学習方法。入力層へ或る情報が与えられたら、出力層はそれに対応した或る情報を出力しなければならない場合の学習方法となる。
最初は入力層→中間層→出力層への結合係数はランダムに与えられるので、或る入力情報に対し、出力層はそれに対応した出力をするとは限らない。望ましい出力との誤差を教師信号として与える事により、次第に結合係数を変化させ、最終的に正しい出力が得られるようにする。ここでは、結合係数を変えて行く事を学習と呼ぶ。
この学習方法には、最急降下法(勾配法)という計算方法が使われる。

最急降下法(勾配法)

図の2次関数でyの極小値を与えるxが2である事は、計算で求められる。しかし、ここでは敢えて別の方法で求める。
最初にxの値を適当に決める(例えば3とする)。xで微分した導関数2x-4は、或るxに於ける元の2次関数の接線の傾きを与える。3を代入すると2となり正なので、yの極小値を与えるxは3より小さい事が予測される。そこで、α(2x-4)を引いてみる事にする。
ここで、αはあまり大きくxを動かさないための学習係数で、仮に0.1とする。従って、xを0.2小さくする。
xを変化させた結果、導関数に代入した値が負になれば、逆にxを増やす事とする。これを繰り返すと、xは次第に2に近づいていく。

では関数f(x,y)について、f(x,y)の極値を求めてみる。図のような3次元のグラフとなる。
zをx、yで其々、偏微分する。偏微分は∂(デルという記号)を使い、分子にあるzを分母のxまたはyで偏微分した事を示す。
偏微分は、偏微分する変数以外の変数は定数と看做して微分するため、其々の偏導関数は以下のようになる。
これは例えば、x軸とz軸から作る平面に平行な任意の平面で立体グラフを切った場合の、x軸とz軸から成る2次元グラフの接線の傾きを示す。
偏導関数には他の変数も残っているため、実際には他の変数の値(どの位置で切るか)によって傾きは変わってくる。
2次元の場合と同じく、xとyを適当に決める。そこからスタートして、其々の偏導関数に代入して正なら減らし、負なら増やせばよい。
このとき、xとyの数値の変化は其々の偏導関数に従って同時に変化させればよい。
これを繰り返す事によって、f(x,y)の極値へ近づいていく。

我々の脳は通常、3次元空間までしか思い描く事は出来ない。しかし、変数がいくつになっても、この方法で極値に近づこうとするのが最急降下法で、イメージとしては、斜面から最も勾配の激しい方向に大きく落ちていく計算方法と言えるだろう。

合成関数の微分の連鎖律(チェインルール)

BPの学習方法では、合成関数の微分の連鎖律も使われる。
(1)のような合成関数があるとき、その導関数は(2)のような積の形で記述出来る。
また(3)のような複雑な合成関数の場合でも、xi(x1~xnのうちどれか)での偏微分は、式(4)のようになる。

シグモイド関数の導関数

BPの学習方法で使われる各細胞の出力関数は、微分可能な関数でなければならない。
(1)式のシグモイド関数は微分可能であり、導関数が元の関数を使った形になるという便利なところがある。

教師信号と誤差関数

人工知能の学習(機械学習)は、正解を示す「教師あり学習」、示さない「教師なし学習」、正解ではないが何らかの報酬等を与える「強化学習」の三つに大別される(強化学習を教師なし学習とする場合もある)。
誤差逆伝播法の学習は教師あり学習で、図は上から1,0,1の入力があった場合、正解は上から1,1,0の出力の例となる。ネットワークの結合係数は最初はランダムに与えられるので上から0.3,0.2,0.9となり、誤差が発生している。
正解を教師信号とし、現在の出力との差の二乗の総和を誤差関数Eとして定義する(必須ではないが慣例的に1/2する事が多い)。
この誤差関数を小さくし、ゼロになるように結合係数(例えば、中間層h1から出力層o1までの結合係数をwh1o1とここでは表現する)を変えていく学習を行なう。
ここでは例として入力層が3、中間層が4、出力数が3の細胞数としたが、いくつでも計算方法は同じとなる。

中間層と出力層の結合係数の学習

例えば出力層の一つの細胞の出力o1は、誤差関数Eを構成する変数なので(1)のような関数として記述出来る。
出力o1はその細胞の内部状態(u1とする)をシグモイド関数に通したものだから、(2)のように置ける。
内部状態u1は、その細胞に繋がる結合係数(例えばwh1o1)の関数になるので、(3)のように置ける(ここでfやgは何らかの関数、sigmoidはシグモイド関数を示す)。
誤差関数、一つの細胞の出力値、その細胞の内部状態、その細胞に繋がる一つの結合係数は、(4)式のような合成関数の関係になっている。

誤差逆伝播法では、各結合係数が一斉に最急降下法により学習(値の変更)を行なう。
例えば、wh1o1の場合は、(4)式のように誤差関数Eを構成する変数になるので、wh1o1でEを偏微分して、最急降下法に従ってwh1o1の値を更新すればよい。
その修正量(⊿wh1o1とする)は、合成関数の微分の連鎖律によって、(5)式のように展開できる。
ここで-αは、修正量をあまり大きくしないための学習係数となる。
(5)式の偏微分を其々計算すると、(6)~(8)式となり、⊿wh1o1は(9)式のように求められる(他の結合係数についても同様に求められる)。
(7)式では、シグモイド関数の導関数により、この形となる。
ここで中間層1番目の細胞の出力h1も、既に出力しているので既知の値となる。

入力層と中間層の結合係数の学習

例えばwIn1h1のような、入力層から中間層への結合係数の更新は若干、複雑になる。
中間層の或る細胞の出力h1は、出力層の全ての細胞に影響するので、h1を誤差関数Eを構成する変数と捉えた場合、誤差関数Eは出力層の全ての細胞を考慮した式となる。
⊿wIn1h1は結局、(10)式のようになる(連鎖律の式(3),(4)による)。ここでuiは出力層の細胞iの内部状態、uh1は中間層1の細胞の内部状態としている。
{ }の中は、最初の2項が(6),(7)式と同じで、最後の項は(11)式で計算出来る。
(12)式は、シグモイド関数の導関数による。(13)式は中間層h1の内部状態uh1をwIn1h1で偏微分している。
⊿wIn1h1を計算すると、(14)式のようになる(他の結合係数も同様に計算出来る)。