Deep Neural Network - Backpropogation avec ReLU

17

J'ai du mal à dériver la propagation avec ReLU, et j'ai fait du travail, mais je ne sais pas si je suis sur la bonne voie.

Fonction de coût: où est la valeur réelle et est une valeur prédite. Supposons également que > 0 toujours.y y x12(y-y^)2yy^X


1 couche ReLU, où le poids à la 1ère couche estw1

entrez la description de l'image ici

dCdw1=dCdRdRdw1

dCw1=(yReLU(w1x))(x)


2 Layer ReLU, où les poids à la 1ère couche sont , et la 2ème couche est Et je voulais mettre à jour la 1ère couchew 1 w 2w2w1w2

entrez la description de l'image ici

dCdw2=dCdRdRdw2

dCw2=(yReLU(w1ReLU(w2x))(w1x)

DepuisReLU(w1ReLU(w2X))=w1w2X


ReLU à 3 couches, où les poids à la 1ère couche sont , 2e couche et 3e couchew 2 w 1w3w2w1

entrez la description de l'image ici

Cw3=CRRw3

Cw3=(y-ReLU(w1ReLU(w2(ReLU(w3)))(w1w2x)

DepuisReLU(w1ReLU(w2(ReLU(w3))=w1w2w3x

Étant donné que la règle de chaîne ne dure qu'avec 2 dérivés, par rapport à un sigmoïde, qui peut être aussi long que nombre de couches.n


Supposons que je veuille mettre à jour les 3 pondérations des couches, où est la troisième couche, est la deuxième couche, est la troisième couchew 2 w 1w1w2w1

dCw1=(yReLU(w1x))(x)

dCw2=(yReLU(w1ReLU(w2x))(w1x)

dCw3=(yReLU(w1ReLU(w2(ReLU(w3)))(w1w2x)

Si cette dérivation est correcte, comment cela empêche-t-il de disparaître? Par rapport à sigmoïde, où nous avons beaucoup de multiplier par 0,25 dans l'équation, alors que ReLU n'a pas de multiplication à valeur constante. S'il y a des milliers de couches, il y aurait beaucoup de multiplication à cause des poids, alors cela ne causerait-il pas un gradient de fuite ou d'explosion?

user1157751
la source
@NeilSlater Merci pour votre réponse! Pouvez-vous élaborer, je ne suis pas sûr de ce que vous vouliez dire?
user1157751
Ah, je pense que je sais ce que tu voulais dire. Eh bien, la raison pour laquelle j'ai soulevé cette question est que je suis sûr que la dérivation est correcte? J'ai cherché autour et je n'ai pas trouvé d'exemple de ReLU entièrement dérivé de zéro?
user1157751

Réponses:

15

Définitions de travail de la fonction ReLU et de sa dérivée:

ReLU(x)={0,if x<0,x,otherwise.

ddxReLU(x)={0,if x<0,1,otherwise.

La dérivée est la fonction de pas d' unité . Cela ignore un problème à x=0 , où le gradient n'est pas strictement défini, mais ce n'est pas une préoccupation pratique pour les réseaux de neurones. Avec la formule ci-dessus, la dérivée à 0 est 1, mais vous pouvez également la traiter comme 0 ou 0,5 sans impact réel sur les performances du réseau de neurones.


Réseau simplifié

Avec ces définitions, regardons vos exemples de réseaux.

Vous exécutez une régression avec la fonction de coût C=12(yy^)2. Vous avez définiRcomme la sortie du neurone artificiel, mais vous n'avez pas défini de valeur d'entrée. J'ajouterai cela pour être complet - appelez-lez, ajoutez une indexation par couche, et je préfère les minuscules pour les vecteurs et les majuscules pour les matrices, doncr(1)sortie de la première couche,z(1)pour son entrée etW(0)pour le poids reliant le neurone à son entréex(dans un réseau plus grand, qui pourrait se connecter à unrplus profondrà la place). J'ai également ajusté le numéro d'index pour la matrice de poids - pourquoi cela deviendra plus clair pour le plus grand réseau. NB J'ignore avoir plus de neurones dans chaque couche pour l'instant.

En regardant votre simple couche 1, 1 réseau de neurones, les équations de rétroaction sont:

z(1)=W(0)x

y^=r(1)=ReLU(z(1))

La dérivée de la fonction de coût par rapport à un exemple d'estimation est:

Cy^=Cr(1)=r(1)12(yr(1))2=12r(1)(y22yr(1)+(r(1))2)=r(1)y

Utilisation de la règle de chaîne pour la propagation arrière à la valeur de pré-transformation ( z ):

Cz(1)=Cr(1)r(1)z(1)=(r(1)y)Step(z(1))=(ReLU(z(1))y)Step(z(1))

Ce Cz(1) est une étape intermédiaire et une partie critique du backprop reliant les étapes ensemble. Les dérivations sautent souvent cette partie car des combinaisons intelligentes de fonction de coût et de couche de sortie signifient qu'elle est simplifiée. Ici non.

Pour obtenir le gradient par rapport au poids W(0) , alors c'est une autre itération de la règle de chaîne:

CW(0)=Cz(1)z(1)W(0)=(ReLU(z(1))y)Step(z(1))x=(ReLU(W(0)x)y)Step(W(0)x)x

. . . car z(1)=W(0)x donc z(1)W(0)=x

C'est la solution complète pour votre réseau le plus simple.

Cependant, dans un réseau en couches, vous devez également appliquer la même logique à la couche suivante. De plus, vous avez généralement plus d'un neurone dans une couche.


Réseau ReLU plus général

Si nous ajoutons des termes plus génériques, nous pouvons travailler avec deux couches arbitraires. Appelez-les Layer (k) indexé par i , et Layer (k+1) indexé par j . Les poids sont maintenant une matrice. Donc, nos équations de rétroaction ressemblent à ceci:

zj(k+1)=iWij(k)ri(k)

rj(k+1)=ReLU(zj(k+1))

Dans la couche de sortie, le gradient initial wrt rjoutput est encore rjoutput-yj . Cependant, ignorez cela pour l'instant et regardez la façon générique de propager en arrière, en supposant que nous avons déjà trouvé Crj(k+1)

Nous devons d'abord accéder à l'entrée des neurones avant d'appliquer ReLU:

  1. Czj(k+1)=Crj(k+1)rj(k+1)zj(k+1)=Crj(k+1)Step(zj(k+1))

Nous devons également propager le gradient vers les couches précédentes, ce qui implique de résumer toutes les influences connectées à chaque neurone:

  1. Crje(k)=jCzj(k+1)zj(k+1)rje(k)=jCzj(k+1)Wjej(k)

Et nous devons le connecter à la matrice des poids afin de faire des ajustements plus tard:

  1. CWjej(k)=Czj(k+1)zj(k+1)Wjej(k)=Czj(k+1)rje(k)

Step(zj(k+1))


Retour à vos questions:

Si cette dérivation est correcte, comment cela empêche-t-il de disparaître?

Votre dérivation n'était pas correcte. Cependant, cela ne répond pas complètement à vos préoccupations.

y(1-y)X=0,y=0,5X=0. Le gradient du ReLU est soit 0 soit 1, et dans un réseau sain sera 1 assez souvent pour avoir moins de perte de gradient pendant la rétropropagation. Ce n'est pas garanti, mais les expériences montrent que ReLU a de bonnes performances dans les réseaux profonds.

S'il y a des milliers de couches, il y aurait beaucoup de multiplication à cause des poids, alors cela ne causerait-il pas un gradient de fuite ou d'explosion?

Oui, cela peut aussi avoir un impact. Cela peut être un problème indépendamment du choix de la fonction de transfert. Dans certaines combinaisons, ReLU peut également aider à garder les gradients explosifs sous contrôle, car il ne sature pas (donc les normes de poids importantes auront tendance à être de mauvaises solutions directes et il est peu probable qu'un optimiseur se déplace vers elles). Cependant, cela n'est pas garanti.

Neil Slater
la source
Cy^
Cy^=Cr(1)y^=r(1). La fonction de coût C est suffisamment simple pour que vous puissiez prendre sa dérivée immédiatement. La seule chose que je n'ai pas montrée là-bas est l'extension du carré - voulez-vous que je l'ajoute?
Neil Slater
Mais C est 12(y-y^)2, n'avons-nous pas besoin d'exécuter la règle de chaîne pour pouvoir effectuer la dérivée sur y^? Cy^=CUUy^, où U=y-y^. Excusez-moi de poser des questions très simples, ma capacité en mathématiques vous cause probablement des problèmes: (
user1157751
Si vous pouvez simplifier les choses en développant. Veuillez ensuite agrandir le carré.
user1157751
@ user1157751: Oui, vous pouvez utiliser la règle de chaîne de cette manière, et cela donnerait la même réponse que celle que je montre. Je viens d'agrandir le carré - je vais le montrer.
Neil Slater