プログラムの使い方
アプレットを起動すると、まず「学習モード」の画面が現れて、上部に学習するパターンが表示され、実行中の「外部サイクルの回数」と「二乗誤差の合計」が表示されます。「外部サイクルの回数」は、200回(0から199まで)に設定されています。
学習が終わると、学習結果が表示されます。斜めに赤色の「YES」が、それ以外は青色の「NO」になれば、学習は正しく行われています。もし誤りや黒色の「?」があれば、[再学習]ボタンをクリックします。
学習に成功すれば、[学習終了]ボタンをクリックして「認識モード」に移ります。
プログラムの実行結果
図2は、「学習モード」で学習が終わった状態を示しています。二乗誤差は、10-4程度と十分小さくなっており、結果の確認でも良好な結果が得られています。
図3は、図2の状態で[学習終了]ボタンをクリックして「認識モード」に移り、数字の「8」を手書きで入力してから[認識]ボタンをクリックした結果を示します。手書き入力を丁寧にしなかったため、「8」との一致が81%と示されています。学習に使用したパターンに近く丁寧に入力すると、100%の一致が得られます。
まとめ
ニューラルネットワークのシミュレーションの例として、車両のナンバープレートの読み取りを試みました。ナンバープレートの画像をサンプルとして使用しないで、手書きによる入力で代用しましたので、手書き文字(数字)認識装置のように見えますが、学習に使用した文字は、ナンバープレート用のものです。
内外のウエブ上に、本稿に似たアプレットが公開されていますが、私が試した範囲の限られた例では、満足に動作するものは見当たりませんでした(Java Runtimeのバージョンの違いもあるかも?)。
ニューラルネットの研究者からみると、本稿で紹介したものはオモチャのようなものですが、専門家以外の方にも関心を持ってもらい、別な角度から新しい応用や改善を提案していただければ幸いです。
参考資料
この記事は、筆者のウエブサイト「Visual C++ 6.0の易しい使い方(17)-ニューロンをシミュレーションして排他的論理和を実現する-(ただし、現在はVisual C++ 2005 Express Edition版に改定)」を改良してJava言語に書き直し、分かりやすく加筆したものです。
ウエブ上には、多数の優れた資料があり、下記は一例です。
- バックプロパゲーション理論
- 文字認識への応用の具体例
著書では、下記が比較的分かりやすいと思われます。
- 『シリーズ非線形科学入門-ニューラルネットワーク』 吉冨康成 著、朝倉書店、2002年7月
- 『NEUROSIM/Lによるニューラルネットワーク入門(CD-ROM付き)』 田辺和俊 著、日刊工業新聞社、2003年6月


![図3 「認識モード」で文字を入力し、[認識]ボタンをクリックした画面 図3 「認識モード」で文字を入力し、[認識]ボタンをクリックした画面](http://cz-cdn.shoeisha.jp/static/images/article/372/figure3_s.jpg)