Dérivant le gradient d'un réseau neuronal à une seule couche par rapport à ses entrées, quel est l'opérateur dans la règle de chaîne?

9

Le problème est:

Dérivez le gradient par rapport à la couche d'entrée pour un réseau neuronal à couche cachée unique en utilisant sigmoïde pour l'entrée -> caché, softmax pour caché -> la sortie, avec une perte d'entropie croisée.

Je peux passer la majeure partie de la dérivation en utilisant la règle de chaîne, mais je ne suis pas sûr de savoir comment les "chaîner" ensemble.

Définir quelques notations

r=xW1+b1

h=σ(r) , σ est une fonction sigmoïde

θ=hW2+b2 ,

y^=S(θ) , S est la fonction softmax

J(y^)=iylogy^i , y est un véritable vecteur à chaud

Ensuite, selon la règle de la chaîne,

Jx=Jθθhhrrx

Les gradients individuels sont:

Jθ=(y^y)
θh=h[hW2+b2]=W2T
hr=h(1h)
rx=x[xW1+b1]=W1T

Nous devons maintenant enchaîner les définitions. En simple variable, c'est facile, nous multiplions simplement tout ensemble. Dans les vecteurs, je ne sais pas s'il faut utiliser la multiplication par élément ou la multiplication matricielle.

Jx=(y^y)W2T[h(1h)]W1T

Où est la multiplication élémentaire des vecteurs, et est une multiplication matricielle. Cette combinaison d'opérations est la seule façon dont je pourrais sembler les enchaîner pour obtenir un vecteur de dimension , que je sais que doit être.1DxJx

Ma question est: quel est le moyen de principe pour moi de déterminer quel opérateur utiliser? Je suis particulièrement confus par la nécessité de l'élément par élément entre et .W2Th

Merci!

amatsukawa
la source
Je me rends compte que trouver le gradient par rapport aux entrées ne se fait pas souvent. Je crois que c'est une piste pour le calcul des incorporations de mots, où vous avez la possibilité d'optimiser les vecteurs de mots "d'entrée".
amatsukawa
comment avez-vous dervie dJ / dTheta
raaj

Réponses:

4

Je crois que la clé pour répondre à cette question est de souligner que la multiplication par élément est en fait un raccourci et donc lorsque vous dérivez les équations, vous ne l' utilisez jamais réellement.

L'opération réelle n'est pas une multiplication par élément mais plutôt une multiplication matricielle standard d'un gradient avec un jacobien , toujours .

Dans le cas de la non-linéarité, le jacobien du vecteur sortie de la non-linéarité par rapport au vecteur entrée de la non-linéarité se trouve être une matrice diagonale. Il est donc vrai que le gradient multiplié par cette matrice est équivalent au gradient de la sortie de la non-linéarité par rapport à la perte élément par élément multiplié par un vecteur contenant toutes les dérivées partielles de la non-linéarité par rapport à l'entrée de la non-linéarité, mais cela découle du fait que le jacobien est diagonal. Vous devez passer par l'étape jacobienne pour arriver à la multiplication par élément, ce qui pourrait expliquer votre confusion.

En mathématiques, nous avons des non linéarités , une perte et une entrée de la non linéarité (cela pourrait être n'importe quel tenseur). La sortie de la non-linéarité a la même dimension --- comme le dit @Logan, les fonctions d'activation sont définies comme élément par élément.sLxRn×1s(x)Rn×1

Nous voulons

xL=(s(x)x)Ts(x)L

Où est le jacobien de . En développant ce jacobien, nous obtenons s(x)xs

[s(x1)x1s(x1)xns(xn)x1s(xn)xn]

On voit qu'il est partout nul sauf la diagonale. On peut faire un vecteur de tous ses éléments diagonaux

Diag(s(x)x)

Et puis utilisez l'opérateur élément par élément.

xL=(s(x)x)Ts(x)L=Diag(s(x)x)s(x)L
user0
la source
0

Chaque fois que la fonction est rétro-proportionnelle à une fonction d'activation, les opérations deviennent élémentaires. Plus précisément, en utilisant votre exemple, est un dérivé de rétropropagation et est un dérivé d'activation, et leur produit est un produit élémentaire, . En effet, les fonctions d'activation sont définies comme des opérations élément par élément dans le réseau neuronal.δ2=(y^y)W2Ta=h(1h)δ2a

Voir les diapositives de la conférence cs224d page 30, cela pourrait également aider.

Logan
la source