Danger de mettre tous les poids initiaux à zéro dans la rétropropagation

30

Pourquoi est-il dangereux d'initialiser des poids avec des zéros? Y a-t-il un exemple simple qui le démontre?

user8078
la source
Il semble que le filet XOR 2-1 classique soit un bon exemple, mais j'apprécierais un raisonnement théorique.
user8078
1
Une réponse très générale, qui peut ou non s'appliquer ici, est que chaque fois que les nouveaux poids sont des multiples d'anciens poids, aucun poids ne peut être changé. C'est fatal à l'apprentissage.
Nick Cox
Il existe déjà de bonnes réponses pour pourquoi ne pas initialiser les pondérations à zéro. Le lien suivant jette un peu plus de lumière sur «comment les poids initiaux doivent être sélectionnés? staff.itee.uq.edu.au/janetw/cmc/chapters/BackProp/index2.html J'espère que cela aidera d'autres lecteurs.
doer_uvc
@NickCox les poids ici sont des multiples de la couche de poids suivante, et la dernière couche n'est pas un multiple d'autres poids - ce n'est donc pas applicable ici.
David Refaeli

Réponses:

21

modifier voir le commentaire d'alfa ci-dessous. Je ne suis pas un expert des réseaux neuronaux, je vais donc m'en remettre à lui.

Ma compréhension est différente des autres réponses qui ont été publiées ici.

Je suis à peu près sûr que la rétropropagation implique d' ajouter aux poids existants, et non de se multiplier. Le montant que vous ajoutez est spécifié par la règle delta . Notez que wij n'apparaît pas sur le côté droit de l'équation.

Je crois comprendre qu'il y a au moins deux bonnes raisons de ne pas mettre les poids initiaux à zéro:

  • Tout d'abord, les réseaux de neurones ont tendance à rester coincés dans les minima locaux, c'est donc une bonne idée de leur donner de nombreuses valeurs de départ différentes. Vous ne pouvez pas faire ça s'ils commencent tous à zéro.

  • Deuxièmement, si les neurones commencent avec les mêmes poids, tous les neurones suivront le même gradient et finiront toujours par faire la même chose les uns que les autres.

David J. Harris
la source
6
"Le montant que vous ajoutez est spécifié par la règle delta. Notez que wij n'apparaît pas sur le côté droit de l'équation." - Cela n'est vrai que pour les réseaux de neurones sans couches cachées! Mais vous avez mentionné deux autres points, qui sont de bons arguments contre l'initialisation d'un ANN avec des poids égaux .
alfa
1
Je pense que c'est principalement la deuxième raison - par exemple, dans un réseau de base entièrement connecté et à action directe, si chaque couche est initialisée avec les mêmes poids, alors comme vous le suggérez, tous les nœuds suivent le même chemin et sont redondants. Mon impression est que la plupart des réseaux avec plus d'une poignée de fonctionnalités ne lutteront pas avec les minima locaux. De plus, l'initialisation aléatoire à elle seule n'empêche pas le réseau de rester bloqué, mais l'utilisation répétée de différentes initialisations aléatoires vous indiquera si une itération particulière a eu un problème de minima locaux (je pense que cela était implicite, mais pas explicite).
Tahlor
la 2ème raison est fausse? open.wolframcloud.com/env/…
user3180
différentes entrées brisent la symétrie de poids
user3180
vous ajoutez les dérivées, et les dérivées sont utilisées par multiplication via la règle de chaîne.
David Refaeli
7

Si vous considérez les poids comme des priorités, comme dans un réseau bayésien, vous avez exclu toute possibilité que ces entrées puissent affecter le système. Une autre explication est que la rétropropagation identifie l'ensemble de poids qui minimise la différence quadratique pondérée entre les valeurs cibles et observées (E). Comment alors orienter un algorithme de descente de gradient en termes de détermination de la direction du système? Vous vous placez sur un point de selle de l'espace des paramètres.

AdamO
la source
1
C'est la meilleure réponse. C'est un point de selle. Les algorithmes d'optimisation basés sur la rétropropagation s'arrêtent généralement immédiatement. Afin de calculer le gradient, nous multiplions les deltas avec des poids et le résultat sera toujours nul.
alfa
Je pense que c'est une bonne réponse pourquoi tout poids particulier ne devrait pas être initialisé à 0. Mais les deltas continueront probablement à se propager - les poids dans la couche de sortie ne dépendent pas des poids, donc nous aurons ici des poids non nuls. après la première mise à jour. Après la prochaine mise à jour, ces poids non nuls seront utilisés avec un delta pour ajuster les poids de la couche précédente et ainsi de suite. Je pense que le plus gros problème avec l'initialisation d'un réseau avec tous les 0, c'est qu'ils ont tous le même poids, ce qui, dans votre réseau de base à connexion directe entièrement connecté, équivaut à avoir 1 nœud par couche.
Tahlor
6

À chaque itération de votre algorithme de rétropropagation, vous mettrez à jour les poids en multipliant le poids existant par un delta déterminé par rétropropagation. Si la valeur de poids initiale est 0, la multiplier par une valeur pour delta ne changera pas le poids, ce qui signifie que chaque itération n'a aucun effet sur les poids que vous essayez d'optimiser.

Idr
la source
2
> vous mettrez à jour les poids en multipliant le poids existant par une valeur déterminée par rétropropagation - je ne pense pas, ce n'est pas seulement la multiplication.
user8078
1
Mon point général est que si les poids initiaux sont nuls, ils resteront à zéro après chaque itération de la propagation arrière.
Idr
La «valeur déterminée par rétropropagation» est un delta (voir par exemple l'article original «Apprendre les représentations par des erreurs de propagation inverse», équation 7). La réponse est mal formulée mais elle n'est pas complètement fausse.
alfa
1
C'est juste une mauvaise réponse. Les poids changeront, mais ils changeront ensemble. C'est mauvais car toutes les unités cachées seront identiques tout au long de la formation et aucun apprentissage ne pourra avoir lieu.
Amin Sammara
Je pense que cela dépend de la fonction d'activation. Si vous choisissez tanh, la sortie finale sera 0, et donc les poids de couche finaux seront 0, ainsi que tous les autres poids. Mais si vous choisissez un logit, la sortie finale sera et donc le gradient final des poids ne sera pas 0, et finalement tous les autres poids ne seront pas non plus 0.θ(0)=0.5
David Refaeli
2

Il me semble que l'une des raisons pour lesquelles il est mauvais d'initialiser les poids aux mêmes valeurs (pas seulement zéro) est que, pour une couche cachée particulière, tous les nœuds de cette couche auraient exactement les mêmes entrées et resteraient donc les mêmes que chacun autre.

Austin
la source
1

La réponse à cette question n'est pas entièrement "Local Minima / Maxima".

Lorsque vous avez plus d'une couche cachée et que chaque poids est égal à 0, peu importe la taille, une modification de Weight_i n'entraînera pas de modification de la sortie.

En effet, delta Weight_i sera absorbé par la prochaine couche masquée.

Lorsqu'il n'y a aucun changement dans la sortie, il n'y a pas de gradient et donc pas de direction.

Cela partage les mêmes traits qu'un Local Minima / Maxima, mais est en fait à cause de 0, ce qui est techniquement différent

Tan Eugene
la source
0

Le problème principal avec l'initialisation de tous les poids à zéro conduit mathématiquement à la valeur zéro des neurones (pour les couches multiples) ou au delta serait nul. Dans l'un des commentaires de @alfa dans les réponses ci-dessus, un indice est déjà fourni, il est mentionné que le produit des poids et delta doit être nul. Cela signifierait essentiellement que pour la descente en pente, il se trouve au sommet de la colline à son apogée et qu'il est incapable de briser la symétrie. L'aléatoire brisera cette symétrie et l'on atteindrait le minimum local. Même si nous perturbions un peu le ou les poids, nous serions sur la piste. Référence: Apprendre des données Conférence 10.

rahulkmishra
la source
0

C'est une mauvaise idée pour 2 raisons:

  1. g(0)0

  2. tanhg(0)=0

Montrons cela (pour plus de simplicité, je suppose une couche de sortie finale de 1 neurone):

tanh

LaLzL=WLaL1WL

dWL:=LWL=LaLaLzLzLWL
LaazLaaz) value is, zW simply equals to the previous layer outputs, i.e. to aL1, but since they are all the same, you get that the final result dWL is a vector with all element equal. So, when you'll update WL=WLαdWL it will move in the same direction. And the same goes for the previous layers.

Point 2 can be shown from the fact that aL1 will be equal to zero's. Hence your dWL vector will be full of zeros, and no learning can be achieved.

David Refaeli
la source