2

私は(今日から)ニューラルネットワークを学習しており、1セットの入力に対してAND演算を学習できる2x2x1ネットワーク(前方データフィードと後方エラー伝播)を完成させることができました。また、ランダム化されたパラメーターを使用して、局所的な最小値を回避します。このための私の最初のソースは次のとおりです

問題は、入力 (0,0) を使用して 0 AND 0 を学習するが、(0,1) を与えると 0 AND 0 を忘れてから 0 AND 1 を学習することです。これは一般的な初心者のバグですか?

私が試したこと:

loop for 10000 times
learn 0 and 0
end loop

loop for 10000 times
learn 0 and 1 (forgets 0 and 0)
end loop

loop for 10000 times
learn 1 and 0 (forgets 0 and 1)
end loop

loop for 10000 times
learn 1 and 1 (forgets 1 and 0)
end loop 

only one set is learned 

fail

試行 2:

loop for 10000 times
learn 0 and 0
learn 0 and 1
learn 1 and 0
learn 1 and 1
end loop

gives same result for all input combinations.

fail.

各ニューロンの活性化関数: 双曲線正接

2x2 構造: 全ペア

2x1構造:オールペア

ランダム化された学習率: はい、爆発的な反復から遠ざけるのに十分小さい (反復ごと)

ニューロンごとのランダム化されたバイアス: はい、-0.5 から +0.5 の間 (開始時)

ランダム化された重み付け: はい、-0.5 から +0.5 の間 (開始時)

編集:バイアスと重みの更新は、非表示レイヤーと出力レイヤーのすべてのペアに対して行われます。

編集:すべてのニューロン (非表示 + 出力) は同じ活性化関数を使用します。

4

1 に答える 1

3

特定のコードがなければ、確かなことは言えませんが、問題は一度に 1 つのケースしか学習させていないことだと思います。予想される結果ベクトルを使用して、さまざまな学習例のマトリックスを指定する必要があります。次に、重みとバイアスを更新すると、すべてのケースのネットワーク出力とすべてのケースの期待される出力の間の誤差を最小化する値が見つかります。

ゲートの場合AND、入力は次のようになります (MATLAB コードでは、使用している言語はわかりませんが、その構文は理解しやすいです)。

input = [0, 0;
         0, 1;
         1, 0;
         1, 1];

そして、期待される出力は次のようになります。

output = [0;
          0;
          0;
          1];

あなたが今やっていることは、基本的に、ネットワーク出力と期待される出力との間のエラーを 1 つの入力ケースだけで最小化する重みとバイアスを見つけてから、それらの重みとバイアスを再トレーニングして 2 番目のケースのエラーを最小化することだと思います。次に 3 番目、次に 4 番目。このように配列に配置すると、すべてのケースで全体的なエラーを最小限に抑えることができます。続行するコードはありませんが、これは私の最善の推測です。

于 2013-08-29T21:33:21.453 に答える