Es ist eine bekannte Tatsache, dass ein 1-Schicht-Netzwerk die xor-Funktion nicht vorhersagen kann, da es nicht linear trennbar ist. Ich habe versucht, ein 2-Layer-Netzwerk mit der logistischen Sigmoid-Funktion und Backprop zu erstellen, um xor vorherzusagen. Mein Netzwerk hat 2 Neuronen (und eine Vorspannung) auf der Eingangsschicht, 2 Neuronen und 1 Vorspannung in der verborgenen Schicht und 1 Ausgangsneuron. Zu meiner Überraschung wird dies nicht konvergieren. Wenn ich eine neue Ebene hinzufüge, also ein 3-Ebenen-Netzwerk mit Eingabe (2 + 1), versteckt1 (2 + 1), versteckt2 (2 + 1) und Ausgabe habe, funktioniert es. Wenn ich ein 2-Schicht-Netzwerk behalte, aber die Größe der verborgenen Schicht auf 4 Neuronen + 1 Vorspannung erhöhe, konvergiert es ebenfalls. Gibt es einen Grund, warum ein 2-Schicht-Netzwerk mit 3 oder weniger versteckten Neuronen die xor-Funktion nicht modellieren kann?
quelle
Antworten:
Ja, es gibt einen Grund. Es hängt damit zusammen, wie Sie Ihre Gewichte initialisieren.
Es gibt 16 lokale Minima mit der höchsten Konvergenzwahrscheinlichkeit zwischen 0,5 und 1.
Hier ist ein Artikel, der das xor-Problem analysiert.
quelle
Ein Netzwerk mit einer verborgenen Schicht, die zwei Neuronen enthält, sollte ausreichen, um das XOR-Problem zu trennen. Das erste Neuron fungiert als ODER-Gatter und das zweite als NICHT-UND-Gatter. Fügen Sie beide Neuronen hinzu und wenn sie die Schwelle überschreiten, ist dies positiv. Sie können hierfür einfach lineare Entscheidungsneuronen verwenden, indem Sie die Verzerrungen für die Schwellenwerte anpassen. Die Eingänge des NOT AND-Gatters sollten für die 0/1-Eingänge negativ sein. Dieses Bild sollte es klarer machen, die Werte auf den Verbindungen sind die Gewichte, die Werte in den Neuronen sind die Verzerrungen, die Entscheidungsfunktionen wirken als 0/1-Entscheidungen (oder nur die Vorzeichenfunktion funktioniert auch in diesem Fall).
Bild dank "Abhranil Blog"
quelle
Wenn Sie einen grundlegenden Gradientenabstieg (ohne andere Optimierung, wie z. B. Impuls) und ein minimales Netzwerk mit 2 Eingängen, 2 versteckten Neuronen und 1 Ausgangsneuron verwenden, ist es definitiv möglich, es zu trainieren, um XOR zu lernen, aber es kann durchaus sein knifflig und unzuverlässig.
Möglicherweise müssen Sie die Lernrate anpassen. Der häufigste Fehler besteht darin, ihn zu hoch einzustellen, damit das Netzwerk schwingt oder divergiert, anstatt zu lernen.
Es kann eine überraschend große Anzahl von Epochen dauern, um das minimale Netzwerk mithilfe von Batch- oder Online-Gradientenabstieg zu trainieren. Möglicherweise sind mehrere tausend Epochen erforderlich.
Bei einer so geringen Anzahl von Gewichten (nur 6) kann eine zufällige Initialisierung manchmal zu einer Kombination führen, die leicht hängen bleibt. Möglicherweise müssen Sie versuchen, die Ergebnisse zu überprüfen und dann neu zu starten. Ich schlage vor, dass Sie für die Initialisierung einen gesetzten Zufallszahlengenerator verwenden und den Startwert anpassen, wenn die Fehlerwerte hängen bleiben und sich nicht verbessern.
quelle