前書き
第一歩
標準的な逆伝播ニューラルネットワークを作成し、それをテストするために、XORをマップすることにしました。
2-2-1ネットワークです(tanhアクティベーション機能付き)
X1 M1
O1
X2 M2
B1 B2
テストのために、手動で上部中間ニューロン(M1)をANDゲートに設定し、下部ニューロン(M2)をORゲートに設定します(真の場合は出力1、偽の場合は-1)。
また、接続M1-O1を手動で-.5、M2-O1を1、B2を-.75に設定しました。
したがって、M1 = 1およびM2 = 1の場合、合計は(-0.5 +1 -0.75 = -.25)tanh(0.25)= -0.24
M1 = -1およびM2 = 1の場合、合計は((-0.5)*(-1)+1 -0.75 = .75)tanh(0.75)= 0.63
M1 = -1およびM2 = -1の場合、合計は((-0.5)*(-1)-1 -0.75 = -1.25)tanh(1.25)= -0.8
これは、「最初の反復」では比較的良い結果です。
ステップ2
次に、これらの重みを少し変更し、エラー伝播アルゴリズム(勾配降下法に基づいて)を使用してそれらをトレーニングしました。この段階では、入力ニューロンと中間ニューロンの間の重みをそのままにして、中間(およびバイアス)と出力の間の重みを変更します。
テストでは、重みを.5 .4 .3に設定します(それぞれM1、M2、バイアス)
ただし、ここで問題が発生し始めます。
私の質問
学習率を.2に設定し、10000回以上の反復のためにプログラムにトレーニングデータ(ABA ^ B)を反復させます。
ほとんどの場合、重みは良い結果に収束します。ただし、時々、それらの重みは(たとえば)1.5、5.7、および.9に収束し、{1、1}の入力に対して+1出力(偶数)になります(結果が-1の場合)。
ソリューションがまったく収束しない比較的単純なANNが可能か、実装にバグがありますか?