Warum kann diese Backpropagation-Implementierung Gewichte nicht richtig trainieren?

9

Ich habe die folgende Backpropagation-Routine für ein neuronales Netzwerk geschrieben, indem ich den Code hier als Beispiel verwende. Das Problem, mit dem ich konfrontiert bin, verwirrt mich und hat meine Debugging-Fähigkeiten an ihre Grenzen gebracht.

Das Problem, vor dem ich stehe, ist ziemlich einfach: Während das neuronale Netzwerk trainiert, werden seine Gewichte auf null trainiert, ohne dass die Genauigkeit zunimmt.

Ich habe versucht, es mehrmals zu beheben, indem ich Folgendes überprüft habe:

  • die Trainingssätze sind korrekt
  • die Zielvektoren sind korrekt
  • Der Vorwärtsschritt zeichnet Informationen korrekt auf
  • die Rückwärtsschritt-Deltas zeichnen richtig auf
  • die Zeichen auf den Deltas sind korrekt
  • Die Gewichte werden tatsächlich angepasst
  • Die Deltas der Eingabeebene sind alle null
  • Es gibt keine anderen Fehler oder Überlaufwarnungen

Einige Informationen:

  • Die Trainingseingaben sind ein 8x8 Raster von [0,16) Werten, die eine Intensität darstellen; Dieses Gitter stellt eine Ziffer dar (konvertiert in einen Spaltenvektor)
  • Der Zielvektor ist eine Ausgabe, die 1 an der Position ist, die der richtigen Zahl
  • entspricht
  • Die ursprünglichen Gewichte und Verzerrungen werden durch die Gaußsche Verteilung zugewiesen
  • Die Aktivierungen sind ein Standard-Sigmoid

Ich bin mir nicht sicher, wohin ich von hier aus gehen soll. Ich habe überprüft, dass alle Dinge, die ich überprüfen kann, korrekt funktionieren, und es funktioniert immer noch nicht, also frage ich hier. Der folgende Code ist der Code, den ich für die Rückpropagierung verwende:

%Vor%

Nach dem Vorschlag von Shep habe ich überprüft, was passiert, wenn ich ein Netzwerk mit der Form [2, 1, 1] trainiere, um immer 1 auszugeben, und in diesem Fall trainiert das Netzwerk richtig. Meine beste Vermutung an diesem Punkt ist, dass der Gradient sich zu stark für die Nullen und schwach auf den Nullen einstellt, was zu einer Nettoabnahme trotz eines Anstiegs bei jedem Schritt führt - aber ich bin mir nicht sicher.

    
Zyerah 27.05.2015, 19:19
quelle

1 Antwort

1

Ich nehme an, Ihr Problem besteht in der Wahl der Anfangsgewichte und in der Wahl der Initialisierung des Gewichtungsalgorithmus. Jeff Heaton Autor von Encog behauptet, dass es in der Regel schlechter abschneidet als andere Initialisierungsmethoden. Hier sind weitere Ergebnisse der Gewichtungsinitialisierungsalgorithmus-Leistung. Auch aus eigener Erfahrung empfehlen wir Ihnen, Ihre Gewichte mit unterschiedlichen Vorzeichenwerten zu initiieren. Selbst in Fällen, in denen ich alle positiven Ergebnisse hatte, wurden Gewichte mit verschiedenen Zeichen besser als mit dem gleichen Vorzeichen.

    
Yura Zaletskyy 10.09.2015, 08:37
quelle