ニューラル ネットワーク (バックプロパゲーション) に関するいくつかの記事を読んだ後、単純なニューラル ネットワークを自分で作成しようとしています。
XORニューラルネットワークを決定しました。私の問題は、ネットワークをトレーニングしようとしているときです。ネットワークをトレーニングするために1つの例のみを使用する場合、1,1,0(input1、input2、targetOutputとして)としましょう。500 本の列車の後 +- ネットワークの回答は 0.05 です。しかし、私が複数の例を試している場合(2つの異なる可能性または4つの可能性すべてを考えてみましょう)、ネットワークは出力として0.5を目指しています:(私はGoogleで自分の間違いを検索しましたが、結果はありませんでした:Sはできるだけ多くの詳細を提供しようとします何が間違っているかを見つけるのを助けるために:
- 2,2,1 および 2,4,1 (inputlayer、hiddenlayer、outputlayer) のネットワークを試しました。
- 以下によって定義されるすべてのニューラルの出力:
double input = 0.0;
for (int n = 0; n < layers[i].Count; n++)
input += layers[i][n].Output * weights[n];
一方、「i」は現在のレイヤーで、重みは前のレイヤーのすべての重みです。
- 最後のレイヤー (出力レイヤー) エラーは次のように定義されます。
value*(1-value)*(targetvalue-value);
一方、'value' はニューラル出力で、'targetvalue' は現在のニューラルのターゲット出力です。
-他のニューラルのエラーは次のように定義されます:
foreach neural in the nextlayer
sum+=neural.value*currentneural.weights[neural];
-ネットワーク内のすべての重みは、この式によって適応されます (ニューラルからの重み -> ニューラル 2)
weight+=LearnRate*neural.myvalue*neural2.error;
LearnRate はネットワーク学習率です (私のネットワークでは 0.25 と定義されています)。-各ニューラルのバイアス重みは次のように定義されます。
bias+=LearnRate*neural.myerror*neural.Bias;
バイアスは const value=1 です。
出力はさまざまなトレーニング例で0.5になることを目指していると言ったので、私が詳細に説明できることはほとんどすべてです:(
大変お世話になりました^_^。