Quels sont les bons poids initiaux dans un réseau de neurones?

68

Je viens d’entendre que c’est une bonne idée de choisir les poids initiaux d’un réseau de neurones dans la plage , où est le nombre d'entrées dans un neurone donné. On suppose que les ensembles sont normalisés - moyenne 0, variance 1 (je ne sais pas si cela compte).d(-1,1)

Pourquoi est-ce une bonne idée?

Elmes
la source
Voir ma thèse de maîtrise, page 81 pour un aperçu des techniques d'initialisation.
Martin Thoma

Réponses:

47

Je suppose que vous utilisez des neurones logistiques et que vous vous entraînez par gradient / descente / rétro-propagation.

La fonction logistique est presque plate pour les grandes entrées positives ou négatives. Le dérivé à une entrée est d' environ 1 / 10 , mais 10 le dérivé est d' environ 1 / 22 000 . Cela signifie que si l'entrée d'un neurone logistique est 10, alors, pour un signal d'entraînement donné, le neurone apprendra environ 2200 fois plus lentement que si l'entrée était 2 .21/10101/220001022002

Si vous voulez que le neurone apprenne rapidement, vous devez produire un signal d’entraînement important (par exemple, avec une fonction de perte d’entropie croisée) ou vous voulez que le dérivé soit grand. Pour rendre la dérivée grande, vous définissez les poids initiaux de manière à obtenir souvent des entrées comprises dans la plage .[4,4]

Les poids initiaux que vous avez donnés pourraient ou non fonctionner. Cela dépend de la façon dont les entrées sont normalisées. Si les entrées sont normalisées avec une moyenne de et un écart type de 1 , alors une somme aléatoire de d termes avec des pondérations uniformes sur ( - 101aura la moyenne0et la variance1(-1,1)0 , indépendant ded. La probabilité que vous obteniez une somme en dehors de[-4,4]est petite. Cela signifie que si vous augmentezd, vous ne causez pas aux neurones une saturation au départ afin qu'ils n'apprennent pas.13[-4,4]

Avec des entrées qui ne sont pas normalisées, ces poids peuvent ne pas être efficaces pour éviter la saturation.

Douglas Zare
la source
1
Donc, fondamentalement, il faut toujours au moins envisager de normaliser les données. Cela a du sens maintenant. Pouvez-vous expliquer pourquoi l'écart std sera égal à 1/3 et quelle est la probabilité que la somme des entrées soit en dehors de la plage <-4,4>?
Elmes
1
Il existe certaines propriétés de base de la variance qui impliquent ceci: Si et Y sont indépendants, alors Var ( X + Y ) = Var ( X ) + Var ( Y ) et si X et Y sont indépendants et ont une moyenne de 0 , alors Var ( X Y ) = Var ( X ) Var ( Y ) . XYVar(X+Y)=Var(X)+Var(Y)XY0Var(X*Y)=Var(X)*Var(Y)
Douglas Zare
1
Vous pouvez estimer la probabilité qu'une variable aléatoire se trouve à au moins écarts types de la moyenne en utilisant l'inégalité de Chebyshev. En pratique, ce n’est pas clair, mais le résultat exact dépend de la distribution. 12
Douglas Zare
Au fait, j'ai mal calculé. La variance est donc l'écart type est13 . 13
Douglas Zare
1
"La fonction logistique est presque plate pour les grandes entrées positives ou négatives. La dérivée à l'entrée de ..." Le sujet pertinent ne devrait-il pas être la dérivée de la fonction de coût de la régression logistique? Dans ce cas, l’entrée de la dérivée de la fonction de coût est déjà mise à l’échelle par la fonction logistique à (0,1) quelle que soit la taille des poids et des signaux?
Moobie
28

[1] répond à la question:

Tout d'abord, les poids ne doivent pas être réglés sur des zéros afin de casser la symétrie lors de la propagation en arrière:

Les biais peuvent généralement être initialisés à zéro, mais les poids doivent être initialisés avec précaution pour rompre la symétrie entre les unités masquées du même calque. Etant donné que les différentes unités de sortie reçoivent des signaux de gradient différents, ce problème de rupture de symétrie ne concerne pas les poids de sortie (dans les unités de sortie), qui peuvent donc également être mis à zéro.

Quelques stratégies d'initialisation:

  • [2] and [3] recommandent une mise à l'échelle par l'inverse de la racine carrée du fan-in
  • Glorot et Bengio (2010) et les didacticiels Deep Learning utilisent une combinaison de fan-in et de fan-out:
    • pour les unités de tangente hyperbolique: échantillonnez a Uniforme (-r, r) avec (fan-in est le nombre d'entrées de l'unité).r=6fan-in+fan-out
    • pour les unités sigmoïdes: échantillon a Uniforme (-r, r) avec (fan-in est le nombre d'entrées de l'unité).r=46fan-in+fan-out
  • dans le cas des RBM, une gaussienne à moyenne nulle avec un faible écart type autour de 0,1 ou 0,01 fonctionne bien (Hinton, 2010) pour initialiser les poids.
  • Initialisation orthogonale de la matrice aléatoire, c’est-à-dire l’ W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)utiliser ensuite ucomme matrice d’initialisation.

De plus, une pré-formation non supervisée peut aider dans certaines situations:

Un choix important consiste à utiliser ou non une formation préalable non supervisée (et l'algorithme d'apprentissage des fonctions non supervisé à utiliser) afin d'initialiser les paramètres. Dans la plupart des contextes, nous avons constaté que le pré-entraînement non supervisé aidait et faisait très rarement mal, mais cela impliquait bien sûr du temps d'entraînement supplémentaire et des hyper-paramètres supplémentaires.

Certaines bibliothèques ANN ont aussi des listes intéressantes, par exemple 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. " Recommandations pratiques pour la formation d'architectures profondes basée sur le gradient. " Réseaux de neurones: astuces du métier. Springer Berlin Heidelberg, 2012. 437-478.

[2] LeCun, Y., Bottou, L., Orr, GB et Muller, K. (1998a). Backprop efficace Dans les réseaux de neurones, astuces du commerce .

[3] Glorot, Xavier et Yoshua Bengio. " Comprendre la difficulté de former des réseaux de neurones à feedforward profond ." Conférence internationale sur l'intelligence artificielle et les statistiques. 2010.

Franck Dernoncourt
la source
2
Je voudrais ajouter deux références utiles: 1) Approfondir les redresseurs: dépasser les performances humaines dans la classification ImageNet - sur l’importance de la mise à l’échelle tenant compte de l’activation arxiv.org/abs/1502.01852 2) Des solutions exactes à la dynamique non linéaire de apprendre dans les réseaux neuronaux linéaires profonds arxiv.org/abs/1312.6120 - Les matrices orthonormales sont bien meilleures que le bruit gaussien
old-ufo
1
Un éditeur suggère que les initialisations du sigmoïde et de la tangente hyperbolique soient modifiées pour correspondre au papier d'origine.
gung - Rétablir Monica
2
Vouliez-vous conserver cette édition, Frank? Sinon, vous pouvez l'annuler.
gung - Rétablir Monica
J'ai dû louper quelque chose. Dans l'article de Glorot et Bengio (2010), où est-il écrit qu'il est recommandé d'utiliser 4 fois la valeur de l'équation 16 lors de l'utilisation des fonctions d'activation logistique du sigmoïde? L'équation 16 découle de l'utilisation de l'équation 12 et de la variance d'une distribution uniforme, mais l'équation 16 est dérivée en supposant une activation symétrique avec une dérivée unitaire à 0. Ainsi, par exemple, une fonction d'activation tanh, mais pas une fonction d'activation logistique (non symétrique). De plus, ils ne testent même pas cette initialisation proposée avec un sigmoïde logistique; ils le testent uniquement avec tanh et softsign.
Tommy L
10

L'explication suivante est tirée de l'ouvrage: Réseaux de neurones pour la reconnaissance de formes par Christopher Bishop. Grand livre! Supposons que vous ayez préalablement blanchi les entrées des unités d’entrée, c.-à-d. et < x 2 i > = 1

<Xje> =0
<Xje2> =1

La question est: comment choisir le mieux les poids? L'idée est de choisir des valeurs de pondération aléatoires à la suite d'une distribution, ce qui permet au processus d'optimisation de converger vers une solution significative.

Vous avez pour l'activation des unités de la première couche, a = d i = 0 w i x i . Maintenant, puisque vous choisissez les poids indépendamment des entrées, < a > = d Σ i = 0 < w i Ix i > = d Σ i = 0 < w i > < x i > = 0

y=g(une)
une=Σje=0wjeXje
<une> =Σje=0<wjeXje> =Σje=0<wje> <Xje> =0
et
<une2> =(Σje=0wjeXje)(Σje=0wjeXje)=Σje=0<wje2><xi2>=σ2d
où sigma est la variance de la distribution des poids. Pour obtenir ce résultat, vous devez vous rappeler que les pondérations sont initialisées indépendamment les unes des autres, c'est-à-dire
<wiwj>=δij
juampa
la source
Erreur mineure: au lieu de 0 . <Xje2> =10
Bayerj
σααα
Ceci est particulièrement vrai pour les réseaux de neurones profonds, où les unités ont tendance à saturer rapidement lorsque vous ajoutez des couches. Un certain nombre de documents traitent de cette question. Un bon point de départ pourrait être "Comprendre la difficulté de former de profonds réseaux neuronaux prédisposants" par glorot et bengio
jpmuc
10

Comme une mise à jour, Approfondissement des redresseurs: Dépasser les performances humaines n ImageNet Classification de He et al ont introduit une initialisation spécifique à l’initialisation w = U([0,n]) * sqrt(2.0/n)nest le nombre d’entrées de votre NN. J'ai vu cette initialisation utilisée dans de nombreux travaux récents (également avec ReLU). Ils montrent en fait comment cela commence à réduire le taux d'erreur beaucoup plus rapidement que le (-1 / n, 1 / n) que vous avez mentionné. Pour une explication détaillée, voir le document mais voici à quelle vitesse cela converge: La convergence d'un grand modèle à 22 couches

Ambodi
la source
Hou la la! Amélioration significative pour moi.
Thomas W
Pas pour un grand nombre d'entrées cependant ... échoue avec MNIST.
Thomas W
Notez que He-initialisation est spécialement conçue pour (P) ReLUs et explique le fait qu’elle n’est pas symétrique (ce qui est l’une des hypothèses de Xavier-initialisation). Ne vous laissez pas berner par ce graphique hors contexte!
M. Tsjolder
5

L'idée est que vous souhaitiez initialiser les poids de manière à assurer un bon flux de données en amont et en aval sur le réseau. Autrement dit, vous ne voulez pas que les activations soient constamment réduites ou croissantes à mesure que vous progressez sur le réseau.

Cette image montre les activations d'un Perceptron multicouche ReLU à 5 couches sous 3 stratégies d'initialisation différentes après un passage de MNIST à travers le réseau.

Activations dans un MLP ReLU avec différentes stratégies d'initialisation

Dans les trois cas, les poids sont tirés d'une distribution normale centrée sur zéro, qui est déterminée par son écart type. Vous pouvez voir que si les poids initiaux sont trop petits (l'écart type est petit), les activations sont étouffées et que si elles sont trop grandes, les activations explosent. La valeur du milieu, à peu près juste, peut être trouvée en définissant des pondérations telles que la variance des activations et des mises à jour de gradients reste approximativement la même lorsque vous passez sur le réseau.

J'ai écrit un article de blog sur l'initialisation du poids qui va plus en détail, mais l'idée de base est la suivante.

X(je)jenjew(je)(je+1)FF(s)1

Var(X(je+1))=njeVar(X(je))Var(w(je))

Var(X(je+1))=Var(X(je))

Var(w(je))=1nje.

LXj(je)Δj(je)

Var(Δ(je))=nje+1Var(Δ(je+1))Var(w(je)).

nje=nje+1

Var(w(je))=2nje+nje+1.

N(0,σ)σ=2nje+nje+1U(-une,une)une=6nje+nje+1Var(U(-une,une))=une2/3

TanhReLUF(s)=ReLU(s)

Var(w(je))=2nje.
André P
la source
3

μB=1mΣje=1MXje   unen   σB2=1mΣje=1m(Xje-μB)2X^je=Xje-μBσB2+ε   unen   BN(Xje)=γX^je+β
XjeBN(Xje)X^jeγβ

γβX^jeXjeXjeX^jeβγpendant l'entraînement. Ainsi, la normalisation par lots stabilise l'apprentissage.

En conséquence, la normalisation par lots permet une formation plus rapide en utilisant des vitesses d'apprentissage beaucoup plus élevées et réduit le problème d'initialisation incorrecte. Le BN permet également d'utiliser des non-linéarités saturantes en empêchant le réseau de rester bloqué dans les modes de saturation. En résumé, la normalisation par lots est une transformation différenciable qui introduit des activations normalisées dans le réseau. En pratique, une couche BN peut être insérée immédiatement après une couche entièrement connectée.

Vadim Smolyakov
la source