2016-09-22 23 views
5

私はニューラルネットワークで遊んでいます。私は自分自身を実装しました。学習アルゴリズムとしてRPROPを基本的なデザインと比較して唯一の「プラス」として使用するのは些細なフォワードネットワークです。ニューラルネットワークとXOR関数

MNISTや画像圧縮を試したときにネットワークの評価がうまくいくのですが、XOR関数と同じように単純なモデルを作成しようとすると、学習中にローカルミニマムにトラップされ、真理値表以下:

0 XOR 0 = 1.4598413968251171e-171 
1 XOR 0 = 0.9999999999999998 
0 XOR 1 = 0.9999999999999998 
1 XOR 1 = 0.5 

はしばしばトレーニング後の結果は、それが必要として正しい、時には1 XOR 1つの出力0.5の代わりに1です。それはXOR(1,1)では実際には常に起こるわけではありませんが、他の入力でも起こります。バックプロパゲーションの文章でXOR機能を「古典的」にすることは、私のネットワークがより複雑な(しかしおそらく非線形性の少ない)タスクをうまく学ぶように見えることを考えれば、ここで何が起こっているのだろうかと思います。

私の野生の推測は、それが偏見に何か間違っているということです。

ヒント?

注1:上のネットワークレイアウトは2 | 3 | 1ですが、さらに隠れたユニットを使用するとあまり変化しません。

注2:私は要旨に実装を置く:出力ユニットが正しく計算されませんでした直前NNのバイアス部:https://gist.github.com/antirez/e45939b918868b91ec6fea1d1938db0d

+0

あなたはどの機能を使用していますか?共有することはできますか? – ACV

+0

私はここに全体の実装をgisti-fiedしました:https://gist.github.com/antirez/e45939b918868b91ec6fea1d1938db0dこれは非常に基本的なものです。 EDIT:ヘッダーファイルも追加されました。 – antirez

+0

実際にテストすると、XOR(1,1)が失敗するだけでなく、0.5が出力されることが分かりました。 – antirez

答えて

2

問題は、私の実装のバグによるものでした。コードを修正した後、XOR関数は常に正しく計算されます。

関連する問題