Warum ist es gefährlich, Gewichte mit Nullen zu initialisieren? Gibt es ein einfaches Beispiel, das dies demonstriert?
Warum ist es gefährlich, Gewichte mit Nullen zu initialisieren? Gibt es ein einfaches Beispiel, das dies demonstriert?
Antworten:
edit siehe alfas kommentar unten. Ich bin kein Experte für neuronale Netze, daher schiebe ich mich zu ihm.
Mein Verständnis unterscheidet sich von den anderen Antworten, die hier gepostet wurden.
Ich bin mir ziemlich sicher, dass Backpropagation das Hinzufügen zu den vorhandenen Gewichten und nicht das Multiplizieren beinhaltet. Der Betrag, den Sie hinzufügen, wird durch die Delta-Regel festgelegt . Beachten Sie, dass wij nicht auf der rechten Seite der Gleichung angezeigt wird.
Meines Erachtens gibt es mindestens zwei gute Gründe, die anfänglichen Gewichte nicht auf Null zu setzen:
Erstens stecken neuronale Netze in der Regel in lokalen Minima fest. Daher ist es eine gute Idee, ihnen viele verschiedene Startwerte zuzuweisen. Sie können das nicht tun, wenn sie alle bei Null beginnen.
Zweitens, wenn die Neuronen mit den gleichen Gewichten beginnen, folgen alle Neuronen dem gleichen Gradienten und tun immer dasselbe.
Wenn Sie sich die Gewichte wie in einem Bayesianischen Netzwerk als vorrangig angesehen haben, haben Sie jede Möglichkeit ausgeschlossen, dass diese Eingaben möglicherweise das System beeinflussen könnten. Eine andere Erklärung ist, dass die Rückübertragung die Menge von Gewichten identifiziert, die die gewichtete quadratische Differenz zwischen dem Ziel- und dem beobachteten Wert (E) minimiert. Wie könnte dann ein Algorithmus zur Gradientenabsenkung in Bezug auf die Bestimmung der Richtung des Systems ausgerichtet sein? Sie setzen sich auf einen Sattelpunkt des Parameterraums.
In jeder Iteration Ihres Backpropagation-Algorithmus aktualisieren Sie die Gewichte, indem Sie das vorhandene Gewicht mit einem Delta multiplizieren, das durch Backpropagation bestimmt wird. Wenn der anfängliche Gewichtungswert 0 ist, wird das Gewicht durch Multiplizieren mit einem beliebigen Wert für Delta nicht geändert, was bedeutet, dass jede Iteration keine Auswirkung auf die zu optimierenden Gewichte hat.
Es scheint mir, dass ein Grund, warum es schlecht ist, Gewichtungen auf die gleichen Werte (nicht nur auf Null) zu initialisieren, darin besteht, dass dann für eine bestimmte verborgene Ebene alle Knoten in dieser Ebene genau die gleichen Eingaben haben und daher jeweils gleich bleiben würden andere.
Die Antwort darauf ist nicht ganz "Local Minima / Maxima".
Wenn Sie mehr als eine ausgeblendete Ebene haben und alle Gewichte Nullen sind, bewirkt eine Änderung von Weight_i keine Änderung der Ausgabe, unabhängig davon, wie groß oder klein sie ist.
Dies liegt daran, dass Delta Weight_i von der nächsten ausgeblendeten Ebene absorbiert wird.
Wenn es keine Änderung in der Ausgabe gibt, gibt es keine Steigung und damit keine Richtung.
Dies hat die gleichen Eigenschaften wie ein lokales Minima / Maxima, liegt jedoch an den 0en, was technisch anders ist
Das Hauptproblem bei der Initialisierung aller Gewichte auf Null führt mathematisch dazu, dass entweder die Neuronenwerte Null sind (für Mehrfachschichten) oder das Delta Null wäre. In einem der Kommentare von @alfa in den obigen Antworten wird bereits ein Hinweis gegeben, dass das Produkt aus Gewicht und Delta Null sein muss. Dies würde im Wesentlichen bedeuten, dass sich die Steigung auf der Spitze des Hügels befindet und die Symmetrie nicht durchbrochen werden kann. Zufälligkeit wird diese Symmetrie durchbrechen und man würde das lokale Minimum erreichen. Selbst wenn wir die Gewichte ein wenig stören würden, wären wir auf der Strecke. Referenz: Aus Daten lernen Vorlesung 10.
Es ist aus zwei Gründen eine schlechte Idee:
Wenn Sie Sigmoid-Aktivierung haben oder irgendetwas, wo dann bewegen sich die Gewichte "zusammen", wodurch die Kraft der Rückübertragung begrenzt wird, um den gesamten Raum zu durchsuchen, um die optimalen Gewichte zu finden, die den Verlust / die Kosten senken.
Wenn Sie haben oder ReLu Aktivierung oder irgendetwas wo dann werden alle Ausgänge 0 sein und die Steigungen für die Gewichte werden immer 0 sein. Daher werden Sie überhaupt kein Lernen haben.
Lassen Sie uns dies demonstrieren (der Einfachheit halber nehme ich eine letzte Ausgabeschicht von 1 Neuron an):
Vorwärtsvorschub : Wenn alle Gewichte Nullen sind, ist die Eingabe für die 2. Ebene für alle Knoten gleich. Die Ausgaben der Knoten sind die gleichen, obwohl sie mit der nächsten Menge von Gewichten multipliziert werden, die 0 ist, und daher sind die Eingaben für die nächste Schicht Null usw. usw. Also alle Eingaben (mit Ausnahme der ersten) Die Ebene, die die tatsächlichen Eingaben annimmt, ist 0, und alle Ausgaben sind gleich (0,5 für Sigmoid-Aktivierung und 0 für und ReLu Aktivierung).
Rückausbreitung : Untersuchen wir nur die letzte Schicht. Der endgültige Verlust () hängt von der endgültigen Ausgabe des Netzwerks ab (, wobei L die letzte Ebene bezeichnet), die von der letzten Eingabe vor der Aktivierung abhängt (), abhängig vom Gewicht der letzten Schicht (). Jetzt wollen wir finden:
Punkt 2 lässt sich daran ablesen, dass wird gleich Null sein. Daher dein Der Vektor ist voller Nullen, und es kann kein Lernen erreicht werden.