誤差逆伝播法【backpropagation】バックプロパゲーション
概要
次

ニューラルネットワーク
ニューラルネットワークは、脳の神経細胞を模したノードが層状に多数配置された構造を持っている。各ノードは固有のパラメータに基いて比較的単純な計算を行う能力を持ち、上位層の各ノードの計算結果を入力として所定の計算(活性化関数)を行う。
計算結果は下位層の各ノードへそれぞれ固有の重み付けを行った上で出力され、上位層の各ノードから重み付き和を受け取ったノードは、自身の持つ「バイアス」という固有の値を加算して下層の各ノードへ伝達する。最上位の入力層は外部からデータを受け取り、最下位の出力層は外部へデータを出力する。
学習過程では、訓練データの入力値と対応する出力値(正解)を与え、内部の各ノードの持つパラメータ(重みとバイアス)を調整することで、訓練データに適応した状態を作り出す。ある入力値に対する現在のネットワークの出力値と正解の差を「誤差」(あるいは損失)と呼び、誤差が少なくなるように調整を行う。
勾配降下法
最適なパラメータを得るには、誤差を、パラメータを入力する関数の出力であると考え(誤差関数)、この関数の出力が最小になるときのパラメータの値を求めれば良い。誤差関数が多項式などで定式化できるなら、微分した導関数が0になる方程式を解くといった解析的(式の変形や変換)な手法が使えるが、ニューラルネットワークのような複雑な構造では難しい。
このような場合、関数に様々な数値を与えてみて出力を調べ、値が減る方向に少しずつパラメータを更新していく数値的な解法が用いられる。これを「勾配降下法」という。具体的には、数値微分などの手法で現在のパラメータにおける誤差関数の微分値(勾配:接線の傾き)を求め、出力がより小さくなる方向に向かってパラメータに一定の値(学習率)を加減算する。
これを何度も繰り返すと、関数の描く曲線を底に向かって下っていくように、出力が徐々に小さくなっていく。出力が最小となる底にたどり着くと勾配が0に近い値になり、それ以上パラメータの値が変動しなくなるため、繰り返しを打ち切ってパラメータを確定する。
誤差逆伝播法
誤差逆伝播法では、誤差は現在の各層のパラメータの歪みが蓄積された結果生じていると考え、出力層で得られた誤差の値を、ネットワークを逆にたどって入力層まで順番に伝達していく。各ノードは伝達された誤差をもとに、勾配降下法で自らの持つパラメータを誤差を減らす方向に更新する。
このとき、入力から出力を得る際の各層で計算の値の伝達(順伝播)を合成関数と捉え、微分における連鎖率の考え方を用いる。各層では下層から受け取った誤差と自らのパラメータから偏微分値(この層における勾配)を算出して勾配降下法を実行するが、連鎖率により下層の偏微分値を使えば簡単にこれを計算できる。
出力側から入力側に向かって一層ずつ順番に偏微分値の算出と誤差の伝達を繰り返すことで、各層のノードは自らが寄与した誤差を打ち消すようにパラメータの更新を行うことができる。本来、ネットワークの層が増えると微分値の計算量が爆発的に多くなり学習困難になっていたが、誤差逆伝播法により効率的に計算可能になったため、層の深いネットワーク(ディープニューラルネットワーク)が実用化されるようになった。