私の高度なアルゴリズムとデータ構造のクラスでは、教授から興味のあるトピックを選択するように求められました。彼はまた、それを研究し、それに解決策を実装しようと私たちに言いました。長い間学びたかったので、ニューラルネットワークを選びました。
ニューロンがアクティベーターのステップ関数を使用するニューラルネットワークを使用して、AND、OR、およびXORを実装することができました。その後、XOR演算子の認識を学習する逆伝播ニューラルネットワークを実装しようとしました(シグモイド関数をアクティベーターとして使用)。3-3-1ネットワークを使用することで、これを90%の時間で機能させることができました(入力層と隠れ層で1つのバイアス、重みはランダムに初期化されます)。また、極小値と思われるものにとらわれているように見えることもありますが、よくわかりません(これについては以前に質問したことがあり、極小値はないはずだと言われています)。
それが機能していた時間の90%で、私は一貫して次の順序で入力を提示していました:[0, 0], [0, 1], [1, 0], [1, 0]
期待される出力をに設定しました[0, 1, 1, 0]
。一貫して同じ順序で値を提示すると、ネットワークは最終的にパターンを学習します。各エポックでまったく同じ順序である限り、実際に送信する順序は重要ではありません。
次に、トレーニングセットのランダム化を実装したので、今回は入力の順序が十分にランダム化されています。ニューラルネットワークがスタックし、エラーが減少していることに気づきましたが、速度は非常に小さいです(各エポックで小さくなっています)。しばらくすると、エラーは値の周りで振動し始めます(したがって、エラーは減少しなくなります)。
私はこのトピックの初心者であり、これまでに知っていることはすべて独学です(チュートリアルや論文などを読む)。入力の表示順序によってネットワークの動作が変わるのはなぜですか?これは、エラーの変化が1つの入力から次の入力まで一貫しているため(順序が一貫しているため)、ネットワークが学習しやすくなるためですか?
これを修正するにはどうすればよいですか?バックプロパゲーションアルゴリズムを調べて、正しく実装されていることを確認します。現在、学習率と勢いで実装されています。適応学習率のような他の拡張機能を検討しています。ただし、XORネットワークは非常に単純なネットワークとして表現されることが多いため、高度なバックプロパゲーションアルゴリズムを使用する必要はないと考えています。