忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

Silverlightでニューラルネットワーク(バックプロパゲーション)

今回はニューラルネットワークです。
バックプロパゲーションという、「ある出力を出すように学習する」ネットワークです。
ここではXORを学習させることにします。

XOR

0 0 -> 0
0 1 -> 1
1 0 -> 1
1 1 -> 0


なぜXORなのか?

もともとこれは普通のシンプルなニューラルネットワークである2層の単純パーセプトロンで、XORを学習できないことから考えだされました。
単純なXORさえできないからニューラルネットワークはもうダメだ!ということが昔言われていたのです。
これを言ったのはミンスキーという人で、このおかげで研究が下火になったといいます。
しかし、3層のバックプロパゲーションで、今までうまく出来なかったXOR計算ができるようになった!
そこでバックプロパゲーションの例題としてXORを学習することが多いのです。

かつてニューラルネットワーク研究を復活させたバックプロパゲーション。
それをSilverlightで再現してみました。



左は入力、右の数字は出力です。
はじめのうちは出力の数字は適当です。
しかし右の学習ボタンを押すと、次第に出力値が補正されていき、最後にはほとんどXORのようになります。
学習が終わるとストップします。

ただ、最初の結合の重み(ランダムに割り当てられる)によっては、上手く学習が進まないこともあります。
その時はリセットボタンを押して結合荷重をリセットしてください。


おまけ

プロジェクトファイルです。

拍手[0回]

PR