Pourquoi les fonctions d'activation non centrées sur zéro sont-elles un problème dans la rétropropagation?

26

J'ai lu ici ce qui suit:

  • Les sorties sigmoïdes ne sont pas centrées sur zéro . Cela n'est pas souhaitable car les neurones des couches ultérieures de traitement dans un réseau de neurones (plus à ce sujet bientôt) recevraient des données qui ne sont pas centrées sur zéro. Cela a des implications sur la dynamique pendant la descente du gradient, car si les données entrant dans un neurone sont toujours positives (par exemple élément par élément dans )), alors le gradient sur les poids pendant la rétropropagation deviendra soit tous soient positifs ou tous négatifs (selon le gradient de l'expression entière x>0f=wTx+bwf). Cela pourrait introduire une dynamique de zigzag indésirable dans les mises à jour de gradient pour les poids. Cependant, notez qu'une fois ces gradients ajoutés à un lot de données, la mise à jour finale des poids peut avoir des signes variables, ce qui atténue quelque peu ce problème. Par conséquent, ceci est un inconvénient mais il a des conséquences moins graves par rapport au problème d'activation saturé ci-dessus.

Pourquoi avoir tous les (élément par élément) conduirait-il à des gradients tout positifs ou tous négatifs sur ?x>0w


Amelio Vazquez-Reina
la source
2
J'ai également eu exactement la même question en regardant des vidéos CS231n.
subwaymatch

Réponses:

28

f=wixi+b
dfdwi=xi
dLdwi=dLdfdfdwi=dLdfxi

parce que , le gradient toujours le même signe que (tous positifs ou tous négatifs).xi>0dLdwidLdf

Mise à jour
Supposons qu'il existe deux paramètres et , si les gradients de deux dimensions sont toujours du même signe, cela signifie que nous ne pouvons que nous déplacer grossièrement en direction du nord-est ou du sud-ouest dans l'espace des paramètres.w1w2

Si notre objectif se trouve être dans le nord-est, nous ne pouvons que nous déplacer en zigzag pour y arriver, tout comme le stationnement parallèle dans un espace étroit. (pardonne mon dessin)

entrez la description de l'image ici

Par conséquent, les fonctions d'activation entièrement positives ou négatives (relu, sigmoïde) peuvent être difficiles à optimiser en fonction du gradient. Pour résoudre ce problème, nous pouvons normaliser les données à l'avance pour qu'elles soient centrées sur le zéro comme dans la normalisation par lot / couche.

Une autre solution à laquelle je peux penser consiste à ajouter un terme de biais pour chaque entrée afin que la couche devienne Les gradients sont alors le signe ne dépendra pas uniquement de .

f=wi(xi+bi).
dLdwi=dLdf(xibi)
xi

dontloo
la source
Veuillez me corriger si je me trompe, mais la valeur de dL / df ne devrait-elle pas être transposée de x c'est-à-dire xT puisque nous utiliserions ici l'idée de Jacobin.
chinmay
@chinmay désolé pour la réponse tardive, je pense que est le résultat de donc la valeur de dL / df ne dépend pas de x, et généralement est un scalaire, et sont des vecteurs 1d, donc dL / df devrait également être un scalaire, non? w T x + b L w xfwTx+bLwx
dontloo
Oui, c'est une grosse faute de frappe de ma part. Je voulais dire df / dw .... mais je pense que cela dépend plus du vecteur x et si c'est un vecteur ligne ou un vecteur colonne
chinmay
@dontloo désolé pour la réponse très tardive mais quel est le problème avec les dégradés ayant le même signe que ? Pourquoi est-ce une mauvaise chose? dL/df
floyd
1
@floyd salut Je viens d'ajouter quelques mises à jour pour votre question
dontloo