XOR nicht gelernt mit keras v2.0

9

Ich habe seit einiger Zeit ziemlich schlechte Ergebnisse mit dem Tool Keras bekommen, und war nicht so suspisous über das Werkzeug so viel .. Aber ich fange an, ein bisschen besorgt jetzt sein.

Ich habe versucht zu sehen, ob es mit einem einfachen XOR-Problem umgehen kann, und nach 30000 Epochen hat es es immer noch nicht gelöst ...

code:

%Vor%

Hier ist ein Teil meines Ergebnisses:

%Vor%

Stimmt etwas nicht mit dem Werkzeug - oder mache ich etwas falsch?

Version verwende ich:

%Vor%

Aktualisierte Version:

%Vor%     
J.Down 03.05.2017, 02:57
quelle

3 Antworten

2

Ich kann Daniels Antwort nicht kommentieren, da ich nicht genug Reputation habe, aber ich glaube, er ist auf dem richtigen Weg. Obwohl ich persönlich nicht versucht habe, das XOR mit Keras zu betreiben, ist hier ein Artikel interessant, der die verschiedenen Bereiche lokaler Minima für ein 2-2-1-Netzwerk analysiert und zeigt, dass eine höhere numerische Genauigkeit zu weniger Fällen führen würde auf einem Gradienten-Algorithmus.

Das lokale Minimum der Fehleroberfläche des 2-2-1 XOR-Netzwerks (Ida G. Sprinkhuizen-Kuyper und Egbert JW Boers)

Als Nebenbemerkung werde ich kein 2-4-1-Netzwerk in Betracht ziehen, um das Problem zu überbrücken. 4 lineare Schnitte auf der 0-1 - Ebene (Schneiden in ein 2x2 - Gitter) anstatt 2 Schnitte (diagonales Abschneiden der Ecken) trennt nur die Daten auf eine andere Weise, aber da wir nur 4 Datenpunkte und kein Rauschen in der Daten, das neuronale Netzwerk, das 4 lineare Schnitte verwendet, beschreibt nicht "Rauschen" anstelle der XOR-Beziehung.

    
Yu Jia Cheong 16.05.2017, 20:57
quelle
1

Ich denke, es ist ein "lokales Minimum" in der Verlustfunktion.

Warum?

Ich habe den gleichen Code ein paar Mal wiederholt ausgeführt, und manchmal geht es richtig, manchmal bleibt es in einem falschen Ergebnis stecken. Beachten Sie, dass dieser Code das Modell jedes Mal neu erstellt, wenn ich es ausführe. (Wenn ich darauf bestehe, ein Modell zu trainieren, das die falschen Ergebnisse gefunden hat, wird es einfach für immer dort aufbewahrt).

%Vor%

Ich habe diesen Code ausgeführt und verschiedene Ausgaben gefunden:

  • Falsch: [[0.00392423], [0.99576807], [0.50008368], [0.50008368]]
  • Rechts: [[0.08072935], [0,95266515], [0,95266813], [0,09427474]]

Welche Schlussfolgerung können wir daraus ziehen?

Der Optimierer behandelt dieses lokale Minimum nicht ordnungsgemäß. Wenn es Glück hat (eine korrekte Gewichtsinitialisierung), wird es in einem guten Minimum fallen und die richtigen Ergebnisse bringen.

Wenn es unglücklich wird (eine schlechte Gewichtsinitialisierung), wird es in ein lokales Minimum fallen, ohne wirklich zu wissen, dass es in der Verlustfunktion bessere Stellen gibt, und seine learn_rate ist einfach nicht groß genug, um diesem Minimum zu entkommen. Der kleine Gradient dreht sich immer wieder um denselben Punkt.

Wenn Sie sich die Zeit nehmen zu studieren, welche Gradienten im falschen Fall erscheinen, werden Sie wahrscheinlich sehen, dass sie auf denselben Punkt zeigt, und wenn Sie die Lernrate ein wenig erhöhen, kann dies dazu führen, dass sie dem Loch entgeht.

Intuition lässt mich denken, dass solche sehr kleinen Modelle mehr prominente lokale Minima haben.

    
Daniel Möller 15.05.2017 19:18
quelle
1
___ qstnhdr ___ XOR nicht gelernt mit keras v2.0 ___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ tag123numpy ___ NumPy ist eine wissenschaftliche und numerische Erweiterung der Programmiersprache Python. ___ tag123neuralnetwork ___ Netzwerkstruktur inspiriert von vereinfachten Modellen biologischer Neuronen (Gehirnzellen). Neuronale Netze werden trainiert, um durch überwachte und unbeaufsichtigte Techniken zu "lernen" und können verwendet werden, um Optimierungsprobleme, Approximationsprobleme, Klassifikationsmuster und Kombinationen davon zu lösen. ___ tag123keras ___ Keras ist eine minimalistische, hochgradig modulare neuronale Netzwerkbibliothek, die eine Python-API auf hohem Niveau bietet, die Rapid Prototyping ermöglicht und die Verwendung eines von mehreren rechnergestützten Back-Ends ermöglicht. ___ answer43987224 ___

Ich denke, es ist ein "lokales Minimum" in der Verlustfunktion.

Warum?

Ich habe den gleichen Code ein paar Mal wiederholt ausgeführt, und manchmal geht es richtig, manchmal bleibt es in einem falschen Ergebnis stecken. Beachten Sie, dass dieser Code das Modell jedes Mal neu erstellt, wenn ich es ausführe. (Wenn ich darauf bestehe, ein Modell zu trainieren, das die falschen Ergebnisse gefunden hat, wird es einfach für immer dort aufbewahrt).

%Vor%

Ich habe diesen Code ausgeführt und verschiedene Ausgaben gefunden:

  • Falsch: [[0.00392423], [0.99576807], [0.50008368], [0.50008368]]
  • Rechts: [[0.08072935], [0,95266515], [0,95266813], [0,09427474]]

Welche Schlussfolgerung können wir daraus ziehen?

Der Optimierer behandelt dieses lokale Minimum nicht ordnungsgemäß. Wenn es Glück hat (eine korrekte Gewichtsinitialisierung), wird es in einem guten Minimum fallen und die richtigen Ergebnisse bringen.

Wenn es unglücklich wird (eine schlechte Gewichtsinitialisierung), wird es in ein lokales Minimum fallen, ohne wirklich zu wissen, dass es in der Verlustfunktion bessere Stellen gibt, und seine learn_rate ist einfach nicht groß genug, um diesem Minimum zu entkommen. Der kleine Gradient dreht sich immer wieder um denselben Punkt.

Wenn Sie sich die Zeit nehmen zu studieren, welche Gradienten im falschen Fall erscheinen, werden Sie wahrscheinlich sehen, dass sie auf denselben Punkt zeigt, und wenn Sie die Lernrate ein wenig erhöhen, kann dies dazu führen, dass sie dem Loch entgeht.

Intuition lässt mich denken, dass solche sehr kleinen Modelle mehr prominente lokale Minima haben.

    
___ answer44011455 ___

Ich kann Daniels Antwort nicht kommentieren, da ich nicht genug Reputation habe, aber ich glaube, er ist auf dem richtigen Weg. Obwohl ich persönlich nicht versucht habe, das XOR mit Keras zu betreiben, ist hier ein Artikel interessant, der die verschiedenen Bereiche lokaler Minima für ein 2-2-1-Netzwerk analysiert und zeigt, dass eine höhere numerische Genauigkeit zu weniger Fällen führen würde auf einem Gradienten-Algorithmus.

Das lokale Minimum der Fehleroberfläche des 2-2-1 XOR-Netzwerks (Ida G. Sprinkhuizen-Kuyper und Egbert JW Boers)

Als Nebenbemerkung werde ich kein 2-4-1-Netzwerk in Betracht ziehen, um das Problem zu überbrücken. 4 lineare Schnitte auf der 0-1 - Ebene (Schneiden in ein 2x2 - Gitter) anstatt 2 Schnitte (diagonales Abschneiden der Ecken) trennt nur die Daten auf eine andere Weise, aber da wir nur 4 Datenpunkte und kein Rauschen in der Daten, das neuronale Netzwerk, das 4 lineare Schnitte verwendet, beschreibt nicht "Rauschen" anstelle der XOR-Beziehung.

    
___ antwort43817740 ___

Anstatt nur die Anzahl der Epochen zu erhöhen, verwenden Sie relu für die Aktivierung Ihrer versteckten Ebene anstelle von tanh . Wenn Sie nur diese Änderung an den von Ihnen bereitgestellten Code vornehmen, kann ich nach nur 2000 Epochen (Theano Backend) folgendes Ergebnis erhalten:

%Vor%

Es könnte leicht zu dem Schluss kommen, dass dies auf das Problem des verschwindenden Farbverlaufs zurückzuführen ist. Die Einfachheit dieses Netzwerks deutet jedoch darauf hin, dass dies nicht der Fall ist. In der Tat, wenn ich das Optimierungsprogramm von 'adam' auf SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False) (die Standardwerte) ändere, kann ich das folgende Ergebnis nach 5000 Epochen mit tanh Aktivierung in der versteckten Ebene sehen.

%Vor%

Bearbeiten: 17.05.17 - Enthaltener vollständiger Code, um die Reproduktion zu ermöglichen

    
___ qstntxt ___

Ich habe seit einiger Zeit ziemlich schlechte Ergebnisse mit dem Tool Keras bekommen, und war nicht so suspisous über das Werkzeug so viel .. Aber ich fange an, ein bisschen besorgt jetzt sein.

Ich habe versucht zu sehen, ob es mit einem einfachen XOR-Problem umgehen kann, und nach 30000 Epochen hat es es immer noch nicht gelöst ...

code:

%Vor%

Hier ist ein Teil meines Ergebnisses:

%Vor%

Stimmt etwas nicht mit dem Werkzeug - oder mache ich etwas falsch?

Version verwende ich:

%Vor%

Aktualisierte Version:

%Vor%     
___
dhinckley 06.05.2017 07:04
quelle

Tags und Links