0

これはかなり奇妙な問題です。

次のように、完全に機能する逆伝播のコードがあります。

アンBP

現在、バッチ学習を行うと、単純なスカラー関数の近似に関係する場合でも、間違った結果が得られます。

トレーニング後、ネットワークはすべての入力パターンに対してほぼ同じ出力を生成します。

この瞬間までに私は試しました:

  1. バイアス重みの導入
  2. 入力重みの更新の有無にかかわらず試してみました
  3. バッチ学習でパターンをシャッフル
  4. 各パターンの後に更新を試み、蓄積
  5. 考えられるさまざまな方法で初期化された重み
  6. コードを 10 回ダブルチェックした
  7. パターン数で正規化された累積更新
  8. 別のレイヤー、ニューロン数を試しました
  9. さまざまなアクティベーション関数を試しました
  10. さまざまな学習率を試した
  11. 50 から 10000 までの異なる数のエポックを試しました
  12. データの正規化を試みました

たった 1 つのパターンに対して一連の逆伝播を行った後、ネットワークは多種多様な入力に対してほぼ同じ出力を生成することに気付きました。

関数を近似しようとすると、常に直線 (ほぼ直線) になります。このような:

ANNフィット

関連する質問:ニューラル ネットワークは常に任意の入力に対して同じ/類似の出力を生成し ます。バイアス ニューロンを追加するという提案は、私の問題を解決しませんでした。

次のような投稿を見つけました。

When ANNs have trouble learning they often just learn to output the
average output values, regardless of the inputs. I don't know if this 
is the case or why it would be happening with such a simple NN.

これは私の状況を十分に詳しく説明しています。しかし、どのように対処するのですか?

私が遭遇する状況には、そうあるべきだという結論に達しています。実際には、ネット構成ごとに、出力レイヤーまでのすべての接続を「カット」することができます。これは実際に可能です。たとえば、非表示レイヤーを過飽和にして出力を入力から独立させるために、すべての非表示の重みをほぼゼロに設定するか、バイアスを異常な値に設定します。その後、入力とは独立して出力をそのまま再現するように、出力レイヤーを自由に調整できます。バッチ学習では、勾配が平均化され、ネットはターゲットの平均だけを再現します。入力は何の役割も果たしません。

4

1 に答える 1

1

perceptron(...)関数との内容を投稿していないため、私の答えは完全に正確ではありませんbackpropagation(...)

しかし、私が推測するところによると、ネットワークを 1 つのデータで何度もトレーニングし、次に別の 1 つのループで完全にトレーニングするため、for data in training_dataネットワークは最後のデータのみを記憶することになります。代わりに、すべてのデータでネットワークを 1 回トレーニングしてから、それを何度も繰り返します (ネストされたループの順序を逆にします)

つまり、for I = 1:number of patternsループは関数のループ内にある必要があるbackpropagation(...)ため、この関数には 2 つのループが含まれている必要があります。


(C#):

ここにバックプロパゲーション関数の一部を示します。ここでは簡略化しています。重みとバイアスが更新されるたびに、ネットワーク全体が「伝播」されます。次のコードは、https ://visualstudiomagazine.com/articles/2015/04/01/back-propagation-using-c.aspx の URL にあります。

public double[] Train(double[][] trainData, int maxEpochs, double learnRate, double momentum)
{
    //...
    Shuffle(sequence); // visit each training data in random order
    for (int ii = 0; ii < trainData.Length; ++ii)
    {
        //...
        ComputeOutputs(xValues); // copy xValues in, compute outputs 
        //...
        // Find new weights and biases
        // Update weights and biases
        //...
    } // each training item
}

Batch learnうまくいかないのは、このコメントの後のすべてを (例として) 2 次ループで囲み、for複数の学習エポックを実行することです。

%--------------------------------------------------------------------------
%% Get all updates
于 2015-05-02T05:24:13.827 に答える