Pourquoi est-il dangereux d'initialiser des poids avec des zéros? Y a-t-il un exemple simple qui le démontre?
Pourquoi est-il dangereux d'initialiser des poids avec des zéros? Y a-t-il un exemple simple qui le démontre?
Réponses:
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.
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.
À 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.
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.
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
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.
C'est une mauvaise idée pour 2 raisons:
Montrons cela (pour plus de simplicité, je suppose une couche de sortie finale de 1 neurone):
Point 2 can be shown from the fact that will be equal to zero's. Hence your vector will be full of zeros, and no learning can be achieved.