Quel est l'avantage de la distribution normale tronquée dans l'initialisation des poids dans un réseau neuronal?


13

Lors de l'initialisation des poids de connexion dans un réseau de neurones à action directe, il est important de les initialiser de manière aléatoire pour éviter toute symétrie que l'algorithme d'apprentissage ne serait pas en mesure de briser.

La recommandation que j'ai vue à divers endroits (par exemple dans le tutoriel MNIST de TensorFlow ) est d'utiliser la distribution normale tronquée en utilisant un écart-type de , où est le nombre d'entrées dans le une couche de neurones donnée.1NN

Je crois que la formule d'écart type garantit que les dégradés rétropropagés ne se dissolvent pas ou ne s'amplifient pas trop rapidement. Mais je ne sais pas pourquoi nous utilisons une distribution normale tronquée par opposition à une distribution normale régulière. Est-ce pour éviter les poids aberrants rares?


Pouvez-vous fournir la source de cette recommandation et / ou la citation directe?
Tim

+ Tim Bon point, j'ai ajouté un lien vers un exemple. Je crois que j'ai également vu cette recommandation dans un article sur les bonnes pratiques du réseau neuronal (je ne le trouve pas, cependant).
MiniQuark

Réponses:


13

Je pense que c'est à propos de la saturation des neurones. Pensez que vous avez une fonction d'activation comme sigmoïde.

entrez la description de l'image ici

Si votre valeur de poids obtient une valeur> = 2 ou <= - 2, votre neurone n'apprendra pas. Donc, si vous tronquez votre distribution normale, vous n'aurez pas ce problème (au moins à partir de l'initialisation) en fonction de votre variance. Je pense que c'est pourquoi, il vaut mieux utiliser la normale tronquée en général.


Oui, cela a du sens, merci. Je pense que vous vouliez dire "valeur> = 2", pas 1.
MiniQuark

oui, cela suppose que la valeur soit> = 2
Güngör Basa

4

L'avantage d'utiliser la distribution normale tronquée est d'empêcher la génération de "neurones morts" en raison des relu_logits utilisés, ce qui est expliqué ici .

Il faut généralement initialiser les poids avec une petite quantité de bruit pour la rupture de symétrie et pour éviter les gradients 0. Puisque nous utilisons des neurones ReLU, il est également recommandé de les initialiser avec un biais initial légèrement positif pour éviter les "neurones morts".


Je ne sais pas comment l'utilisation de truncated_normal empêchera les neurones morts: cela n'ajoutera aucun "biais initial légèrement positif". Pouvez-vous nous en dire plus?
MiniQuark

1
parce que la rétropropagation ne mettra à jour que les neurones "vivants", avec une contribution non nulle à la propagation
Jason
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.