世の中のAIブームの影響を受けて、何年かぶりにニューラルネットワークNNをやってみたのですが・・・
思いの外うまくいかない。
【手書き数字の文字認識】
digits(8*8),MNIST(28*28)の手書き数字の文字認識をやってみたのですが、バックプロパゲーションの出力が0ばかりになってしまった。
【対処法】
正解の時は、バックプロパゲーションをしない。
間違えた時だけ、バックプロパゲーションを行う。
ネットに書いてありました・・・(T . T)
【なぜこんなことになったのか】
手書き数字の文字認識は、入力に対して、1〜10の10種類の出力を出すわけですが・・・
出力の設計は、
0ならば[1 0 0 0 0 0 0 0 0 0 ] 1ならば[0 1 0 0 0 0 0 0 0 0 ]
みたいになるわけです。
一つだけ1で、残りの9が0となるわけです。
このようなのをwinner-take-allというらしいのですが・・・
ニューロの立場で考えた場合、1になる確率は10%で0になる確率は90%です。
0を出力していれば、9割近く正解するわけです。
バックプロバゲーションを常に有効にした場合、
なまじ出力をしても、9割の確率で出力を0にしろと言われるわけです。
1にしろと言われるのは1割だけ、そのため、ニューロは0出力になってしまったわけです。