SO WIRD'S GEMACHT: Deep Initialisierung des neuronalen Netzwerks

10

Angesichts schwieriger Lernaufgaben (z. B. hohe Dimensionalität, inhärente Datenkomplexität) sind tiefe neuronale Netze schwer zu trainieren. Um viele der Probleme zu lösen, könnte man:

  1. Normalisieren Sie && Handpick- Qualitätsdaten
  2. Wählen Sie einen anderen Trainingsalgorithmus (z. B. RMSprop anstelle von Gradient Descent).
  3. Wählen Sie einen steileren Gradienten Kostenfunktion (z. B. Cross Entropy anstelle von MSE)
  4. Verwenden Sie eine andere Netzwerkstruktur (z. B. Faltungsschichten anstelle von Feedforward).

Ich habe gehört, dass es clevere Möglichkeiten gibt, bessere Gewichte zu initialisieren. Zum Beispiel können Sie die Größe besser wählen: Glorot und Bengio (2010)

  • für Sigmoid-Einheiten: Probe eine Uniform (-r, r) mit r=6N.ichn+N.Öut
  • oder hyperbolische Tangenteneinheiten: Abtastung einer Uniform (-r, r) mit r=46N.ichn+N.Öut

Gibt es eine konsistente Möglichkeit, die Gewichte besser zu initialisieren?

Joonatan Samuel
quelle

Antworten:

7

Soweit ich weiß, sind die beiden von Ihnen angegebenen Formeln so ziemlich die Standardinitialisierung. Ich hatte vor einiger Zeit eine Literaturübersicht gemacht , die ich bei Interesse unten kopiert habe.


[1] befasst sich mit der Frage:

Erstens sollten Gewichte nicht auf Null gesetzt werden, um die Symmetrie bei der Rückprogrammierung zu brechen:

Verzerrungen können im Allgemeinen auf Null initialisiert werden, aber Gewichte müssen sorgfältig initialisiert werden, um die Symmetrie zwischen verborgenen Einheiten derselben Schicht zu brechen. Da unterschiedliche Ausgabeeinheiten unterschiedliche Gradientensignale empfangen, betrifft dieses Problem der Symmetriebrechung nicht die Ausgabegewichte (in die Ausgabeeinheiten), die daher auch auf Null gesetzt werden können.

Einige Initialisierungsstrategien:

  • [2] und [3] empfehlen die Skalierung durch die Umkehrung der Quadratwurzel des Fan-In
  • Glorot and Bengio (2010) und die Deep Learning Tutorials verwenden eine Kombination aus Fan-In und Fan-Out:
    • r=6Fan-In+ausschwärmen
    • r=46Fan-In+ausschwärmen
  • Im Fall von RBMs funktioniert ein Gaußscher Mittelwert mit einer kleinen Standardabweichung um 0,1 oder 0,01 gut (Hinton, 2010), um die Gewichte zu initialisieren.
  • Orthogonal Zufallsmatrix Initialisierung, also W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)verwenden Sie dann uals Initialisierung Matrix.

In einigen Situationen kann auch unbeaufsichtigtes Pre-Training hilfreich sein:

Eine wichtige Wahl ist, ob man unbeaufsichtigtes Pre-Training verwenden sollte (und welchen unbeaufsichtigten Feature-Learning-Algorithmus man verwenden soll), um Parameter zu initialisieren. In den meisten Situationen haben wir festgestellt, dass unbeaufsichtigtes Pre-Training hilft und sehr selten weh tut, aber das impliziert natürlich zusätzliche Trainingszeit und zusätzliche Hyperparameter.

Einige ANN-Bibliotheken haben auch einige interessante Listen, z. B. Lasagne :

Constant([val]) Initialize weights with constant value.
Normal([std, mean]) Sample initial weights from the Gaussian distribution.
Uniform([range, std, mean]) Sample initial weights from the uniform distribution.
Glorot(initializer[, gain, c01b])   Glorot weight initialization.
GlorotNormal([gain, c01b])  Glorot with weights sampled from the Normal distribution.
GlorotUniform([gain, c01b]) Glorot with weights sampled from the Uniform distribution.
He(initializer[, gain, c01b])   He weight initialization.
HeNormal([gain, c01b])  He initializer with weights sampled from the Normal distribution.
HeUniform([gain, c01b]) He initializer with weights sampled from the Uniform distribution.
Orthogonal([gain])  Intialize weights as Orthogonal matrix.
Sparse([sparsity, std]) Initialize weights as sparse matrix.

[1] Bengio, Yoshua. " Praktische Empfehlungen für das gradientenbasierte Training tiefer Architekturen. " Neuronale Netze: Tricks of the Trade. Springer Berlin Heidelberg, 2012. 437-478.

[2] Y. LeCun, L. Bottou, GB Orr und K. Muller (1998a). Effizientes Backprop. In neuronalen Netzen Tricks des Handels .

[3] Glorot, Xavier und Yoshua Bengio. " Die Schwierigkeit verstehen, tiefe vorwärtsgerichtete neuronale Netze zu trainieren ." Internationale Konferenz über künstliche Intelligenz und Statistik. 2010.

Franck Dernoncourt
quelle
2
Etwas, das Ihnen zu fehlen scheint, ist die Chargennormalisierung. Hier beschrieben: arxiv.org/abs/1502.03167 Könnte nützlich sein.
Joonatan Samuel
Kaiming He, Xiangyu Zhang, Shaoqing Ren und Jian Sun haben einen neueren Artikel veröffentlicht, der eine Variation der Xavier-Gewichtsinitialisierung von Glorot und Bengio enthält: "Tief in Gleichrichter eintauchen: Leistung auf menschlicher Ebene bei der ImageNet-Klassifizierung übertreffen" .
mjul