Ich versuche, ein neuronales Netzwerk von Grund auf neu aufzubauen. In der gesamten KI-Literatur besteht Konsens darüber, dass Gewichte mit Zufallszahlen initialisiert werden sollten, damit das Netzwerk schneller konvergiert.
Aber warum werden Anfangsgewichte neuronaler Netze als Zufallszahlen initialisiert?
Ich hatte irgendwo gelesen, dass dies getan wird, um "die Symmetrie zu brechen" und dies das neuronale Netzwerk schneller lernen lässt. Wie kann das Brechen der Symmetrie schneller lernen?
Wäre es nicht besser, die Gewichte auf 0 zu initialisieren? Auf diese Weise könnten die Gewichte ihre Werte (ob positiv oder negativ) schneller finden?
Gibt es eine andere zugrunde liegende Philosophie hinter der Randomisierung der Gewichte, abgesehen von der Hoffnung, dass sie bei der Initialisierung nahe an ihren optimalen Werten liegen würden?
quelle
Antworten:
Das Brechen der Symmetrie ist hier wesentlich und nicht aus Gründen der Leistung. Stellen Sie sich die ersten zwei Schichten mehrschichtigen Perzeptrons vor (Eingabe- und versteckte Schichten):
Während der Vorwärtsausbreitung erhält jede Einheit in der verborgenen Schicht ein Signal:
Das heißt, jede versteckte Einheit erhält die Summe der Eingaben multipliziert mit dem entsprechenden Gewicht.
Stellen Sie sich nun vor, Sie initialisieren alle Gewichte mit demselben Wert (z. B. Null oder Eins). In diesem Fall erhält jede versteckte Einheit genau das gleiche Signal . Wenn beispielsweise alle Gewichte auf 1 initialisiert werden, erhält jede Einheit ein Signal, das der Summe der Ein- (und Ausgänge
sigmoid(sum(inputs))
) entspricht. Wenn alle Gewichte Nullen sind, was noch schlimmer ist, erhält jede versteckte Einheit ein Nullsignal. Egal was die Eingabe war - wenn alle Gewichte gleich sind, sind auch alle Einheiten in der verborgenen Ebene gleich .Dies ist das Hauptproblem in Bezug auf Symmetrie und Grund, warum Sie Gewichte zufällig (oder zumindest mit unterschiedlichen Werten) initialisieren sollten. Beachten Sie, dass dieses Problem alle Architekturen betrifft, die Einzelverbindungen verwenden.
quelle
symmetry
nicht verwendencorrelation
? Wer hat das Wort zuerst benutzt?Analogie:
Ich hoffe es ist eine gute Analogie. Ich habe versucht, es so einfach wie möglich zu erklären.
Stellen Sie sich vor, jemand hat Sie von einem Hubschrauber auf einen unbekannten Berggipfel gebracht und Sie sind dort gefangen. Überall ist beschlagen. Das einzige, was Sie wissen, ist, dass Sie irgendwie auf den Meeresspiegel gelangen sollten. Welche Richtung sollten Sie einschlagen, um zum niedrigstmöglichen Punkt zu gelangen?
Wenn Sie keinen Weg zum Meeresspiegel finden könnten und der Hubschrauber Sie wieder aufnehmen würde und Sie auf dieselbe Berggipfelposition bringen würde. Sie müssten wieder die gleichen Richtungen einschlagen, weil Sie sich auf die gleichen Startpositionen "initialisieren" .
Jedes Mal, wenn der Hubschrauber Sie irgendwo zufällig auf den Berg fallen lässt, würden Sie unterschiedliche Richtungen und Schritte einschlagen. Es besteht also eine bessere Chance für Sie, den niedrigstmöglichen Punkt zu erreichen.
Dies ist gemeint, indem die Symmetrie gebrochen wird . Die Initialisierung ist asymmetrisch ( was unterschiedlich ist ), sodass Sie unterschiedliche Lösungen für dasselbe Problem finden können.
In dieser Analogie sind die Gewichte , wo Sie landen . Bei unterschiedlichen Gewichten besteht also eine bessere Chance, den niedrigsten ( oder niedrigeren ) Punkt zu erreichen.
Außerdem wird die Entropie im System erhöht , sodass das System mehr Informationen erstellen kann, um die unteren Punkte ( lokale oder globale Mindestwerte ) zu finden.
quelle
Die Antwort ist ziemlich einfach. Die grundlegenden Trainingsalgorithmen sind von Natur aus gierig - sie finden nicht das globale Optimum, sondern - "nächste" lokale Lösung. Wenn Sie also von einer festen Initialisierung ausgehen, wird Ihre Lösung auf einen bestimmten Satz von Gewichten ausgerichtet. Wenn Sie es zufällig (und möglicherweise oft) tun, ist es viel weniger wahrscheinlich, dass Sie in einem seltsamen Teil der Fehleroberfläche stecken bleiben.
Das gleiche Argument gilt für andere Algorithmen, die kein globales Optimum finden können (k-Mittel, EM usw.), und gilt nicht für die globalen Optimierungstechniken (wie den SMO-Algorithmus für SVM).
quelle
Wie Sie bereits erwähnt haben, ist der entscheidende Punkt , die Symmetrie zu brechen . Denn wenn Sie alle Gewichte auf Null initialisieren, führen alle versteckten Neuronen (Einheiten) in Ihrem neuronalen Netzwerk genau die gleichen Berechnungen durch. Dies ist nicht etwas, was wir uns wünschen, weil wir wollen, dass verschiedene versteckte Einheiten verschiedene Funktionen berechnen. Dies ist jedoch nicht möglich, wenn Sie alle mit demselben Wert initialisieren.
quelle
Wenn Sie alle Gewichte so initialisieren, dass sie Null sind, führen alle Neuronen aller Ebenen dieselbe Berechnung durch, wobei sie dieselbe Ausgabe liefern und das gesamte tiefe Netz unbrauchbar machen . Wenn die Gewichte Null sind, wäre die Komplexität des gesamten tiefen Netzes dieselbe wie die eines einzelnen Neurons, und die Vorhersagen wären nichts besseres als zufällig.
Knoten, die nebeneinander in einer verborgenen Schicht liegen, die mit denselben Eingaben verbunden ist, müssen unterschiedliche Gewichte haben, damit der Lernalgorithmus die Gewichte aktualisiert.
Wenn Sie Gewichte als ungleich Null festlegen (aber nahe 0 wie 0,1 usw.), lernt der Algorithmus die Gewichte in den nächsten Iterationen und bleibt nicht hängen. Auf diese Weise wird die Symmetrie gebrochen.
Stochastische Optimierungsalgorithmen wie der stochastische Gradientenabstieg verwenden Zufälligkeit bei der Auswahl eines Startpunkts für die Suche und beim Fortschreiten der Suche.
Das Fortschreiten der Suche oder des Lernens eines neuronalen Netzwerks wird als Konvergenz bezeichnet. Die Entdeckung einer suboptimalen Lösung oder lokaler Optima führt zu einer vorzeitigen Konvergenz.
Anstatt sich auf ein lokales Optima zu verlassen, besteht die beste Möglichkeit, globale Optima zu finden, ohne bei lokalen Optima hängen zu bleiben, wenn Sie Ihren Algorithmus mehrmals mit unterschiedlichen Zufallsgewichten ausführen.
Nach 2015 wird aufgrund der Fortschritte in der Forschung zum maschinellen Lernen die Initialisierung von He-et-al eingeführt, um die zufällige Initialisierung zu ersetzen
Die Gewichte sind immer noch zufällig, unterscheiden sich jedoch im Bereich in Abhängigkeit von der Größe der vorherigen Neuronenschicht.
Zusammenfassend helfen uns zufällige Gewichte ungleich Null
quelle
Zusätzlich zur Initialisierung mit zufälligen Werten sollten Anfangsgewichte nicht mit großen Werten beginnen. Dies liegt daran, dass wir häufig die Tanh- und Sigmoid-Funktionen in verborgenen Ebenen und Ausgabeebenen verwenden. Wenn Sie sich die Diagramme der beiden Funktionen ansehen, führt die Vorwärtsausbreitung bei der ersten Iteration zu höheren Werten, und diese Werte entsprechen den Stellen in den Sigmoid- und Tanh-Funktionen, die die Ableitung gegen Null konvergieren. Dies führt zu einem Kaltstart des Lernprozesses und einer Verlängerung der Lernzeit. Wenn Sie also Gewichte nach dem Zufallsprinzip starten, können Sie diese Probleme vermeiden, indem Sie diese Werte mit Werten wie "0,01" oder "0,001" multiplizieren.
quelle
Sei mathematischer. Der Grund, warum ich antworte, ist, dass mir dieses Bit in den anderen Antworten fehlte. Angenommen, Sie haben 2 Schichten. Wenn wir uns den Back-Propagation-Algorithmus ansehen, ist die Berechnung von
dZ2 = A2 - Y.
dW2 = (1 / m) * dZ2 * A2.T.
Ignorieren wir db2. (Sorry nicht sorry;))
dZ1 = W2.T * dZ2. * g1 '(Z1)
...
Das Problem, das Sie sehen, ist fett gedruckt. Das Berechnen von dZ1 (das zur Berechnung von dW1 erforderlich ist) enthält W2, das 0 ist. Wir hatten nie die Möglichkeit, die Gewichte auf etwas über 0 zu ändern, und wir werden es niemals tun. Das neuronale Netzwerk lernt also im Wesentlichen nichts. Ich denke, es ist schlimmer als die logistische Regression (einzelne Einheit). Bei der logistischen Regression lernen Sie mit mehr Iterationen, da Sie dank X unterschiedliche Eingaben erhalten. In diesem Fall geben die anderen Ebenen immer die gleiche Ausgabe aus, sodass Sie überhaupt nicht lernen.
quelle
Ich habe eines gelernt: Wenn Sie das Gewicht auf Null initialisieren, ist es offensichtlich, dass die Aktivierungseinheiten in derselben Ebene gleich sind, dh sie haben dieselben Werte. Wenn Sie zurückbropfen, werden Sie feststellen, dass auch alle Zeilen des Gradienten dW gleich sind, daher sind alle Zeilen der Gewichtsmatrix W nach Aktualisierungen des Gradientenabfalls gleich. Im Allgemeinen führt das Initialisieren aller Gewichte auf Null dazu, dass das Netzwerk die Symmetrie nicht unterbricht. Dies bedeutet, dass jedes Neuron in jeder Schicht dasselbe lernt, und Sie können genauso gut ein neuronales Netzwerk
n[l]=1n[l]=1
für jede Schicht trainieren , und das Netzwerk ist nicht leistungsfähiger als ein linearer Klassifikator wie die logistische Regression. Andrew Ng Kurs:quelle