バックプロパゲーション(6)

バックプロパゲーション(5)」では、ある層w+1とそのひとつ前の層wの間の\delta_{w,k}の関係を示した式(52)

  • \delta_{w,k}=\Bigsum_{m=1}^{N(w+1)}\left[\delta_{w+1,k}{\cdot}s_{w+1,m}(k)\right]z_{w,k}(1-z_{w,k})・・・・(52)

を導き出しましたが、これを見直してみると誤差Eの中身について何も問題にしていないことに気づきました。このことはEをどのように設定しようとも式(53)が成り立つことを意味します。


私は「バックプロパゲーションに向けて(3)」においてバックプロパゲーションの収束が標準デルタ則に比べて遅くなることを述べましたが、私はその時点では、誤差に何を採用するかが問題だと思っておりました。つまり誤差として

  • E=\Bigsum_{k=1}^q(r_k-y_k)^2・・・・(6)

を採用するのではなく「バックプロパゲーション(2)」で標準デルタ則を勾配法からで導く時に使った

  • E=(y-r)u・・・・(27)

を採用すればもっとよくなるのではないか、と考えておりました。しかし「バックプロパゲーション(5)」の結果からは誤差Eに何を採用しても

  • z_{w,k}(1-z_{w,k})・・・・(54)

の項、つまりz(1-z)の項が現れることを意味しています。よって「バックプロパゲーションに向けて(3)」に書いたように、本来シナプス係数の大きな変更が必要な場面において変化量\Delta{s}が小さくなるという欠点は表れてしまいます。z(1-z)の項が現れる原因を探ってみるとこれは

  • z=f(u)

f()シグモイド関数

  • f(u)=\frac{1}{1+e^{-u}}・・・・(55)

を用いたことが原因になっています。つまり、

  • \frac{df(u)}{du}=z(1-z)・・・・(56)

となるためにz(1-z)の項が現れたのです。であるならばf()に別の関数を採用すればこの欠点を克服出来るのでしょうか? しかし元々ニューロンの出力は0か1でしかないのを、計算の都合上、微分可能なシグモイド関数を採用したのでした。別な関数を採用するにしても

  • u\rightar{-\infty}f(u)\rightar{0}
  • u\rightar{\infty}f(u)\rightar{1}

でなければなりません。さらに、勾配法を用いるためにはf(u)は単調増加でなければなりません。そうすると、

  • u\rightar{-\infty}\frac{df(u)}{du}\rightar{0}
  • u\rightar{\infty}\frac{df(u)}{du}\rightar{0}

になるので、やはりuを大きく変更する必要がある時に、かえって勾配が小さくなる、という問題が発生します。つまりz(1-z)という項は表れないかもしれませんが、やはり同じ問題が発生するということになります。


以上から、バックプロパゲーションでの収束が遅いという問題は解決が難しそうなことが分かります。