XOR関数のニューラルネットの作成


8

1層ネットワークは線形分離可能ではないため、xor関数を予測できないことはよく知られている事実です。xorを予測するために、ロジスティックシグモイド関数とbackpropを使用して、2層ネットワークを作成しようとしました。私のネットワークには、入力層に2つのニューロン(および1つのバイアス)、非表示層に2つのニューロンと1つのバイアス、および1つの出力ニューロンがあります。驚いたことに、これは収束しません。新しいレイヤーを追加すると、入力(2 + 1)、hidden1(2 + 1)、hidden2(2 + 1)、出力の3レイヤーネットワークが機能します。また、2層ネットワークを維持しながら、非表示層のサイズを4ニューロン+ 1バイアスに増やした場合も、収束します。3つ以下の非表示ニューロンを持つ2層ネットワークがxor関数をモデル化できない理由はありますか?


2
その構造を使用してXORを予測できます。実際、バイアスも必要ありません(こちらを参照)。
krychu 2016年

収束させるために、特別な方法で重みを初期化する必要がありますか?I(-1,1)の間の重みを持つ単純なニューラルネットをランダムに初期化が、私は(も、バイアスを使用して)収束させるためにそれを得ることができないしよう
ユーザー

実際、ロジスティックシグモイドを使用すると、時々収束しますが、常に収束するわけではなく、ランダムな重みの最初の選択に依存します。
ユーザー

あなたの範囲はかなり大きいようです、(-0.1、0.1)を試してください。そうしないと、ニューロンへの入力信号が最初から大きくなる可能性があり、その場合、そのニューロンの学習が遅くなります。また、学習率を下げ、反復回数を増やすこともできます。
krychu 2016年

逆に、値が大きいほど収束が速くなります。私はより小さな学習率と多くの反復を試みました。以下のニール・スレーターの答えは問題を要約していると思いますが、なぜかはまだわかりません
ユーザー

回答:


6

はい、理由があります。ウェイトの初期化方法と関係があります。

0.5から1の間に収束する確率が最も高い16の極小値があります。

ここに画像の説明を入力してください

これは、xor問題を分析する論文です。


2
リンクが壊れているようです。
Adam Kingsley

@Emilでは、重みが非常に小さい場合、収束しないと言っていますか?リンクも修正しました。
ユーザー

@user正解です。
エミール

6

2つのニューロンを含む1つの非表示層を持つネットワークは、XOR問題を分離するのに十分です。最初のニューロンはORゲートとして機能し、2番目のニューロンはNOT ANDゲートとして機能します。両方のニューロンを追加し、それらが閾値を通過する場合、それは正です。しきい値のバイアスを調整することで、これに線形決定ニューロンを使用できます。NOT ANDゲートの入力は、0/1入力に対して負である必要があります。この図は、より明確にする必要があります。接続の値は重み、ニューロンの値はバイアス、決定関数は0/1決定として機能します(この場合も、符号関数だけが機能します)。

XORニューラルネットワーク

「Abhranilブログ」のおかげで画像


ありがとうございます。値を(0,1)に制限するため、ロジスティックシグモイドを使用してこれを行うことはできません
ユーザー

いいえ、ロジスティックシグモイドを使用してこれを学習することはまだ可能ではありません。しきい値/重みを異なる方法で学習する必要があります
Jan van der Vegt

NANDゲートのバイアスは必要があります。+1.5
マルク

4

基本的な勾配降下法(運動量などの他の最適化なし)、および最小ネットワーク2入力、2非表示ニューロン、1出力ニューロンを使用している場合、XORを学習するようにトレーニングすることは間違いなく可能ですが、トリッキーで信頼できない。

  • 学習率を調整する必要があるかもしれません。最も一般的な間違いは、設定が高すぎるため、ネットワークが学習する代わりに発振または発散することです。

  • バッチまたはオンライン勾配降下法を使用して最小ネットワークをトレーニングするには、驚くほど多くのエポックが必要になる場合があります。多分数千のエポックが必要になるでしょう。

  • ウェイトの数がこのように少ない場合(6のみ)、ランダムな初期化により、簡単にスタックする組み合わせが作成されることがあります。したがって、試行して結果を確認し、再起動する必要がある場合があります。初期化にはシードされた乱数ジェネレータを使用し、エラー値がスタックして改善されない場合はシード値を調整することをお勧めします。


はい、それは私が観察していることです、それは収束するいくつかのシード値で、他のものは収束しません。また、シグモイドの代わりに双曲線正接を使用した場合、シグモイドでは常に正常に機能し、観察したとおり、シードに依存します。それがとてもトリッキーになる理由は何ですか?
ユーザー

数学的な理由が何であるかは完全にはわかりませんが、これはxorの学習に関するテストスイートを作成した経験からのものです。私の場合、勢いを加えることは助けになりましたが、最も単純なネットワークやオプティマイザから離れた調整はほとんど助けになると思います。
Neil Slater
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.