Warum sollten Gewichte neuronaler Netze mit Zufallszahlen initialisiert werden?

105

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?

Shayan RC
quelle
7
Dies scheint besser für Cross Validated zu passen .
Sycorax

Antworten:

140

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):

Geben Sie hier die Bildbeschreibung ein

Während der Vorwärtsausbreitung erhält jede Einheit in der verborgenen Schicht ein Signal:

Geben Sie hier die Bildbeschreibung ein

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.

Freund
quelle
1
Tolle Erklärung. Aber warum das Wort symmetrynicht verwenden correlation? Wer hat das Wort zuerst benutzt?
nn0p
1
@ nn0p: Korrelation impliziert, dass sich 2 Signale in eine ähnliche Richtung ändern, jedoch nicht immer und nicht mit genau derselben Größe. Zumindest soweit ich weiß, hat Symmetrie keine formale Definition und wird hier verwendet, um genau dieselben Signale über alle Verbindungen zwischen Knoten darzustellen , was das Training nutzlos macht.
Freund
@ffriend als für den Fall, dass wir Dropout verwenden, ist die Randomisierung nicht mehr erforderlich. Liege ich falsch?
Emanuele
1
@emanuele Dropout ist selbst eine Art Randomisierung, also sollte es funktionieren. Alle Verbindungen, die nicht bei jeder Iteration "abgebrochen" werden, werden dennoch symmetrisch aktualisiert. Ich denke, das Lernen wird ziemlich langsam sein und daher empfehlen, in jedem praktischen Netzwerk weiterhin eine zufällige Initialisierung zu verwenden.
Freund
Dies erklärt Forwardprop gut, aber was ist mit Backprop?
Zell
74

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.

Geben Sie hier die Bildbeschreibung ein

Inanc Gumus
quelle
10
Es scheint, dass der Hubschrauber Sie mehrmals zufällig irgendwo auf den Berg fallen lässt, aber beim tiefen Lernen initialisieren wir die Gewichte nur einmal zufällig.
YuFeng Shen
1
Dies ist eine wirklich intuitive Erklärung. Wir sollten auch beachten, dass NNs fast nie konvex sind - daher ist die Randomisierung der ideale Weg -, aber wenn Sie eine konvexe Verlustfunktion haben, spielt es natürlich keine Rolle, auf was Sie Ihre Gewichte initialisieren.
Kingz
4
Es ist eine gute Analogie - aber es ist sinnvoller anzunehmen, dass Sie und Ihre Freunde auf den Berg fallen (dh Knoten in einem Netzwerk) - entweder an derselben Stelle oder an verschiedenen Personen an verschiedenen Stellen. Und nehmen wir an, Sie könnten alle miteinander kommunizieren. Verschiedene Kommunikationspunkte ermöglichen einen schnelleren Abstieg. Gleicher Punkt bedeutet, dass wahrscheinlich jeder den gleichen Weg einschlagen wird.
Ahmedhosny
26

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).

Lejlot
quelle
Es ist also nicht garantiert, dass es nicht nur durch Randomisierung in lokalen Minima stecken bleibt? Aber nach mehreren Läufen mit unterschiedlichen zufälligen Gewichten könnte es das globale Minimum bekommen?
Shayan RC
1
Es gibt keine Garantie, aber mehrere Initialisierungen können dazu beitragen, zumindest das wahre Optimum zu erreichen.
Lejlot
Gibt es eine Standardformel oder -regel, um einen Wert zum Initialisieren der Gewichte festzulegen? Ich habe ein mehrschichtiges neuronales Feed-Forward- und Back-Propagation-Netzwerk, in dem die Sigmoid-Funktion verwendet wird.
lkkkk
Es gibt einige Faustregeln im S. Haykin-Buch "Neuronale Netze"
Lejlot
3
Dies ist nicht der Grund, warum Benutzer eine zufällige Initialisierung verwenden, da die meisten Benutzer das Training nicht oft mit unterschiedlichen zufälligen Initialisierungen neu starten und das Netz immer noch in der Lage ist, gute lokale Optima zu erreichen.
Cesarsalgado
4

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.

Alican Şafak Özdek
quelle
2
  1. 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?

  2. Wie kann das Brechen der Symmetrie schneller lernen?

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.

  1. 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?

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

w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])

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

  1. Komme aus lokalen Optima heraus
  2. Die Symmetrie brechen
  3. Erreichen Sie globale Optima in weiteren Iterationen
Ravindra Babu
quelle
1

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.

mustafamuratcoskun
quelle
0

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.

Muhammad Mubashirullah Durrani
quelle
0

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]=1für jede Schicht trainieren , und das Netzwerk ist nicht leistungsfähiger als ein linearer Klassifikator wie die logistische Regression. Andrew Ng Kurs:

abdoulsn
quelle