誤差逆伝搬法

 前回、神経細胞をモデル化し、学習させる方法について学びました。しかし、神経細胞の数がひとつだったので、あまり複雑な分類はできないこともわかりました。今回は、神経細胞を増やすことで、より複雑なシステムを設計できるようにします。

定義と数式化

 以下のような多層構造を考えます。

層

はじめの入力に当たる部分を入力層といいます。そして、最後にある出力を出す項を出力層といいます。入力層と出力層の間にあるのが、中間層と呼ばれるものです。

入力層(l=1)→中間層(l=2)→出力層(l=3)

の順番に情報が流れていくのが特徴です。

数式化

では、さっそくモデル化します。まず、中間層に対する入力u_{1}^{(2)},u_{2}^{(2)},u_{3}^{(2)}

 \displaystyle u_{1}^{(2)}=\sum_{i=0}^{3}w_{1,i}^{(2)}x_{i}^{(1)}=w_{1,i}^{(2)}x_{i}^{(1)},\\u_{2}^{(2)}=\sum_{i=0}^{3}w_{2,i}^{(2)}x_{i}^{(1)}=w_{2,i}^{(2)}x_{i}^{(1)},\\u_{3}^{(2)}=\sum_{i=0}^{3}w_{3,i}^{(2)}x_{i}^{(1)}=w_{3,i}^{(2)}x_{i}^{(1)}

となります。ここで、x_{0}^{(1)}=1,w_{0,1}^{(2)}=b_{1}^{(2)},w_{0,2}^{(2)}=b_{2}^{(2)},w_{0,3}^{(2)}=b_{3}^{(2)}です。b_{1}^{(2)},b_{2}^{(2)},b_{3}^{(2)}は神経細胞のバイアスです。第3項は総和記号を書くのが面倒なので、省略しました。添字iがある場合は総和記号を省くというルールをよくテンソル解析で使います。ここでもその表記を使用することにします。そして、中間層の出力は

 x_{1}^{(2)}=f(u_{1}^{(2)}),\\x_{2}^{(2)}=f(u_{2}^{(2)}),\\x_{3}^{(2)}=f(u_{3}^{(2)})

となります。fは活性化関数です。次に、出力層への入力の総和u_{1}^{(3)},u_{2}^{(3)},u_{3}^{(3)}

 \displaystyle u_{1}^{(3)}=\sum_{i=0}^{3}w_{1,i}^{(3)}x_{i}^{(2)}=w_{1,i}^{(3)}x_{i}^{(2)},\\u_{2}^{(3)}=\sum_{i=0}^{3}w_{2,i}^{(3)}x_{i}^{(2)}=w_{2,i}^{(3)}x_{i}^{(2)},\\u_{3}^{(3)}=\sum_{i=0}^{3}w_{3,i}^{(3)}x_{i}^{(2)}=w_{3,i}^{(3)}x_{i}^{(2)}

となります。ここで、x_{0}^{(2)}=1,w_{0,1}^{(3)}=b_{1}^{(3)},w_{0,2}^{(3)}=b_{2}^{(3)},w_{0,3}^{(3)}=b_{3}^{(3)}です。b_{1}^{(3)},b_{2}^{(3)},b_{3}^{(3)}は閾値です。第三式はテンソルでよく使用する縮約で総和を省いています。そして、出力層の出力は恒等写像なので

 \displaystyle z_{1}=u_{1}^{(3)},\\z_{2}=u_{2}^{(3)},\\z_{3}=u_{3}^{(3)}

となります。

 上記をまとめると

 \displaystyle z_{i}=w_{i,j}^{(3)}f(w_{j,k}^{(2)}x_{k}),i=1,2,3

となります。ここで、縮約を使用しています。詳しく書くと

 \displaystyle z_{i}=\sum_{j=0}^{3}w_{i,j}^{(3)}f\left(\sum_{k=0}^{3}w_{j,k}^{(2)}x_{k}\right),i=1,2,3

となります。縮約は便利です。

学習

 では、学習させてw_{i,j}を決定させていきます。

  • 入力:x_{i}^{(d)},i=1,2,3,p=1,2,\cdots,N
  • 出力:d_{i},i=1,2,3

とします。p番目の入出力に対する誤差は

 \displaystyle E=\frac{1}{2}\sum_{i=1}^{N}(w_{i,j}^{(3)}f(w_{j,k}^{(2)}x_{k}^{(d)})-d_{i})^{2}

となります。この値を最小にするようなw^{(2)},w^{(3)}を見つけるわけです。そのために勾配を計算する必要があります。では、w^{(3)},w^{(2)}と順に勾配を計算していきましょう。

w_{m,n}^{(3)}の勾配を計算すると

 \displaystyle\frac{\partial E}{\partial w_{m,n}^{(3)}}=\frac{\partial}{\partial w_{m,n}^{(3)}}\frac{1}{2}\sum_{i=1}^{N}(w_{i,j}^{(3)}f(w_{j,k}^{(2)}x_{k}^{(d)})-d_{i})^{2}\\=\sum_{i=1}^{N}(w_{i,j}^{(3)}f(w_{j,k}^{(2)}x_{k}^{(d)})-d_{i})\frac{\partial}{\partial w_{m,n}^{(3)}}w_{i,j}^{(3)}f(w_{j,k}^{(2)}x_{k}^{(d)})\\=\sum_{i=1}^{N}(w_{i,j}^{(3)}f(w_{j,k}^{(2)}x_{k}^{(d)})-d_{i})\delta_{m,i}\delta_{n,j}f(w_{j,k}^{(2)}x_{k}^{(d)})\\=\sum_{i=1}^{N}(w_{i,j}^{(3)}f(w_{j,k}^{(2)}x_{k}^{(d)})-d_{i})\delta_{m,i}f(w_{n,k}^{(2)}x_{k}^{(d)})\\=\left(w_{m,j}^{(3)}f(w_{j,k}^{(2)}x_{k,p})-d_{i}\right)f(w_{n,k}^{(2)}x_{k}^{(d)})

となります。ここで、\delta_{i,j}i=jのとき1でそれ以外0となる行列です。この行列により

 \delta_{i,j}a_{j}=a_{i}

となり計算が簡単になります。また、

 \displaystyle\frac{\partial}{\partial w_{m,n}^{(3)}}w_{i,j}^{(3)}=\delta_{m,i}\delta_{n,j}

です。

 次に、w_{m,n}^{(2)}の勾配を面倒ですが計算すると

 \displaystyle\frac{\partial E}{\partial w_{m,n}^{(2)}}\\=\left(f^{\prime}(w_{m,k}^{(2)}x_{k}^{(d)})\sum_{i}w_{i,m}^{(3)}\left(w_{i,j}^{(3)}f(w_{j,k}^{(2)}x_{k}^{(d)})-d_{i}\right)\right)x_{n}^{(d)}

となります。ここで、f^{\prime}は活性化関数の微分です。

 あとはこれらの計算した勾配を用いて勾配降下法でパラメタの最適化を行っていくという流れになります。次回は上記を一般化したケースについて考えます。

著者:安井 真人(やすい まさと)