質問: 入力の順序をニューラルネットワークにランダム化する効果 私のAdvanced Algorithms and Data Structuresクラスでは、私の教授が私たちに興味のあるトピックを選ぶように頼んだ。彼はまた、私たちにそれを研究し、その中で解決策を試して実行するように指示しました。私は神経ネットワークを選びました。なぜなら、これは長い間学習したかったからです。 私は、ニューロンがアクチベータのためのステップ関数を使用するニューラルネットワークを使って、AND、OR、およびXORを実装することができました。その後、私はXOR演算子(シグモイド関数をアクティベータとして使用する)を認識することを学ぶ逆伝搬ニューラルネットワークを実装しようとしました。私は3-3-1ネットワーク(入力と隠れ層で1つのバイアス、無作為に初期化された重み付き)を使用することで、これを90%の時間で動作させることができました。他の時には、私はローカルミニマムだと思うものにこだわっているようですが、私は確信が持てません(私はこれまでに質問してきました。 `[0、0]、[0、1]、[1、0]、[1、0]` の順番で入力を一貫して提示していました。期待される出力は `[0、1、1、0]` に設定されています。一貫して同じ順序で値を提示すると、ネットワークは最終的にパターンを学習します。私はそれを送信する順番は実際には関係ありません。 その後、トレーニングセットのランダム化を実装しました。今回は、入力の順序が十分にランダム化されています。私の神経ネットワークが詰まり、エラーが減少しているが、非常に小さいレート(各エポックで小さくなっている)になったことに気付いた。しばらくすると、エラーはある値の周りを振動し始めます(エラーは減少しなくなります)。 私はこのトピックの初心者で、これまでに知っていることはすべて自己学習しています(チュートリアル、論文などを読む)。入力の提示順序がネットワークの動作を変えるのはなぜですか?それは、エラーの変化がある入力から次の入力まで一貫しているからです(順序が一致しているため)。これはネットワークの学習を容易にしますか? これを修正するにはどうすればよいですか?私はそれを正しく実装したかどうかを確認するために、私のバックプロパゲーションアルゴリズムを調べます。現在、学習率と勢いで実装されています。私は適応学習率のような他の強化を検討することを検討しています。しかし、XORネットワークはしばしば非常に単純なネットワークとして描かれているので、洗練されたバックプロパゲーションアルゴリズムを使う必要はないはずです。
回答: ネットワークにあなたのトレーニングセットを含む観測値(入力ベクトル)を提示する順序は、*無作為配置*の観測変数*応答変数*順序付けられた配置に対して強く好ましい。 たとえば、トレーニングセットを含む150の観測値があり、応答変数ごとに3つのクラスラベル(クラスI、II、またはIII)のいずれかであり、観察1-50がクラスI、51-100がクラスIIでは101-50、クラスIIIでは101-50であった。あなたがしたくないことは、それらをネットワークにその順序で提示することです。言い換えれば、ネットワークがクラスIの全50回の観測を見ることを望んでいません。その後、クラスIIで50回、クラスIIIで50回の観測をすべて見ることはできません。 あなたのクラシファイアのトレーニング中に何が起こったのですか?最初はあなたのネットワークに4つの観測点を提示していました。順序は[0,1,1,0]です。 あなたのネットワークが収束しなかったインスタンスで入力ベクトルの順序がどうなったのでしょうか?それが[1,1,0,0]、または[0,1,1,1]の場合、これは上記の経験的なルールiとよく似ています。 On the other hand, i have to wonder whether this rule even applies in your case. The reason is that you have so few training instances that even if the order is [1, 1, 0, 0], training over multiple epochs (which i am sure you must be doing) will mean that this ordering looks more "randomized" rather than the exemplar i mentioned above (i.e., [1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0] is how the network would be presented with the training data over three epochs). Some suggestions to diagnose the problem: 1. 上記のように、非コンバージェンスの場合の入力ベクトルの順序を見てください - それらは応答変数でソートされていますか? 2. 収束していないケースでは、あなたの体重行列を見てください(私はそれらの2つがあると仮定します)。非常に大きい値を探します(他の値は100倍、初期化された値の100倍など)。大きなウェイトはオーバーフローを引き起こす可能性があります。