Die Idee ist, dass Sie die Gewichte auf eine Weise initialisieren möchten, die einen guten Datenfluss vorwärts und rückwärts durch das Netzwerk gewährleistet. Das heißt, Sie möchten nicht, dass die Aktivierungen im Verlauf des Netzwerks ständig kleiner oder größer werden.
Dieses Bild zeigt die Aktivierung eines 5-Schicht-ReLU-Mehrschicht-Perceptrons unter 3 verschiedenen Initialisierungsstrategien nach einem Durchlauf von MNIST durch das Netzwerk.
In allen drei Fällen werden die Gewichte aus einer nullzentrierten Normalverteilung gezogen, die durch ihre Standardabweichung bestimmt wird. Sie können sehen, dass die Aktivierungen erstickt werden, wenn die Anfangsgewichte zu klein sind (die Standardabweichung ist klein), und dass die Aktivierungen explodieren, wenn sie zu groß sind. Der mittlere Wert, der ungefähr richtig ist, kann ermittelt werden, indem die Gewichte so eingestellt werden, dass die Varianz der Aktivierungen und Gradientenaktualisierungen ungefähr gleich bleibt, wenn Sie durch das Netzwerk gehen.
Ich habe einen Blog-Beitrag über Gewichtsinitialisierung geschrieben , der ausführlicher behandelt wird. Die Grundidee lautet jedoch wie folgt.
x(i)iniw(i)(i+1)ff′(s)≈1
Var(x(i+1))=niVar(x(i))Var(w(i))
Um wir daher die Bedingung auferlegenVar(x(i+1))=Var(x(i))
Var(w(i))=1ni.
Wenn wir mit , wollen wir auf ähnliche Weise den Rückwärtsdurchlauf∂L∂x(i)jΔ(i)j
Var(Δ(i))=ni+1Var(Δ(i+1))Var(w(i)).
Sofern nicht , müssen wir zwischen diesen beiden Bedingungen Kompromisse eingehen, und eine vernünftige Wahl ist das harmonische Mittelni=ni+1
Var(w(i))=2ni+ni+1.
Wenn wir Gewichte aus einer Normalverteilung abtasten, erfüllen wir diese Bedingung mit . Für eine gleichmäßige Verteilung sollten wir da . Damit sind wir bei der Glorot-Initialisierung angelangt. Dies ist beispielsweise die Standard-Initialisierungsstrategie für dichte und 2D-Faltungs-Layer in Keras.N(0,σ)σ=2ni+ni+1−−−−−√U(−a,a)a=6ni+ni+1−−−−−√Var(U(−a,a))=a2/3
Die Glorot-Initialisierung funktioniert ziemlich gut für triviale und Aktivierungen, aber nicht so gut für . Da negative Eingaben nur auf Null setzt, wird die Hälfte der Varianz grob entfernt, und dies lässt sich leicht ändern, indem eine der obigen Bedingungen mit zwei multipliziert wird:tanhReLUf(s)=ReLU(s)
Var(w(i))=2ni.