gradient de fuite et gradient zéro
Il y a un problème bien connu vanishing gradientdans la BackPropagationformation de Feedforward Neural Network (FNN)(ici nous ne considérons pas le gradient de disparition du réseau neuronal récurrent).
Je ne comprends pas pourquoi le gradient de fuite ne signifie pas le gradient nul, à savoir la solution optimale que nous voulons? J'ai vu une réponse disant que le gradient de fuite n'est pas exactement le gradient zéro, cela signifie simplement que la mise à jour du paramètre est très lente. Cependant, dans le dégradé décent, nous ne voulons pas atteindre le gradient zéro exact et nous nous arrêterons lorsque le paramètre restera inchangé dans$\epsilon,$ ce qui est le même cas de gradient de fuite.
Alors, quelqu'un peut-il me donner une réponse claire?
Réponses
Un gradient relativement faible ne signifie pas toujours que nous avons atteint un point critique
Avoir une valeur faible dans un composant du gradient ne signifie pas nécessairement que nous sommes proches d'un point critique pour ce paramètre. Cela signifie que la fonction changera peu si nous faisons une mise à jour basée uniquement sur ce composant de gradient.
Par exemple, pensez à la fonction $f(w_1,w_2) = 0.001w_1^2 + w_2^2\rightarrow$ pour un point avec des coordonnées similaires, nous aurons un composant dégradé $1000$ fois plus grand dans le $w_2$ direction que dans le $w_1$ direction.
Donc, dans cette fonction (que nous pouvons interpréter comme notre fonction de coût), si nous initialisons nos paramètres à une valeur similaire, cela conduira à une amélioration plus lente de la $w_1$ direction comme nous pouvons le voir dans le graphique de contour suivant pour un taux d'apprentissage de $0.5$:
Comme on peut le voir, même loin du minimum à $(0, 0)^T$, les améliorations sur $w_1$ sont très petits, nous avons donc besoin de beaucoup d'itérations pour atteindre le minimum $w_1$. Et il a atteint le minimum après$1000$itérations! Donc, si nous avons initialisé l'algorithme avec un point plus éloigné, il n'aurait pas du tout atteint le minimum.
Nous comprenons donc maintenant que même si nous avons une faible valeur du gradient, nos paramètres ne doivent pas nécessairement être proches de la valeur qui atteint le minimum (ou un point critique en général) de la fonction de coût. En revanche, ils peuvent voir leur processus d'apprentissage gravement ralenti .
En pratique, nous pouvons éviter ce comportement indésirable en utilisant quelques modifications sur la méthode de descente de gradient. Par exemple, voir Adagrad . Avec cette méthode, les composants du gradient sont normalisés en fonction des valeurs actuelles et précédentes de l'amplitude du gradient dans chaque direction. Ainsi, nous avons un taux d'apprentissage spécifique pour chaque dimension.
Raisonnement avec rétropropagation à l'aide d'un simple NN
Pour voir pourquoi ces composants de gradient plus petits peuvent également se produire dans les réseaux de neurones, nous pouvons utiliser un simple NN constitué d'un seul neurone par couche, tout comme le suivant:
Comme on le sait, l'élément du gradient donné par la dérivée de la fonction de coût, $C$, par rapport à un poids $w^l$ de la couche $l$, dans un NN entièrement connecté est donné par le terme de gauche: $$\frac{\partial C}{\partial w^l}= \delta^l (a^{l-1})^T \,\,\,\,\,\,\,\,\xrightarrow[]{\text{in our simple NN}}\,\,\,\,\,\,\,\, \frac{\partial C}{\partial w^l}=\delta^l a^{l-1}$$
Où $\delta^l$ est le terme "erreur" ($\partial C/\partial z^l$), et $a^{l-1}$ représente le vecteur des activations des neurones de la couche précédente ($l-1$). Notez que dans le simple NN présenté ci-dessus, nous n'avons pas besoin de transposer$a^{l-1}$ car c'est un scalaire (un neurone par couche $\rightarrow$ une activation par couche).
Typiquement, nous sommes capables de calculer facilement le terme "erreur" de la dernière couche ($\delta^L$), mais nous ne savons pas comment le calculer pour les couches précédentes, nous utilisons donc la rétropropagation :
$$\delta^l = \left((w^{l+1})^T\,\,\delta^{l+1}\right)\odot g(z^l) \,\,\,\,\,\,\,\,\xrightarrow[]{\text{in our simple NN}}\,\,\,\,\,\,\,\, \delta^l=w^{l+1} \,g(z^l) \,\,\delta^{l+1} $$
Où $g(z^l)$ représente la fonction d'activation du neurone étant donné le terme $z^l$.
Donc, pour n'importe quelle couche $l$, comment est le terme $\partial C/ \partial w^l$calculé?. En utilisant le raisonnement précédent pour le NN simple, nous savons maintenant que:
$$ \begin{align} \delta^{l} &= w^{l+1} \,g(z^{l}) \,\,\color{blue}{\delta^{l+1}}\\ \\ & = w^{l+1} \,g(z^{l}) \,\,\color{blue}{w^{l+2} \,g(z^{l+1}) \,\,\delta^{l+2}}\\ \\ &= w^{l+1}\color{blue}{w^{l+2}...w^{L}}\,\,g(z^{l})\color{blue}{g(z^{l+1})...g(z^{L})\,\,\delta^L} \end{align} $$ Où les termes bleus sont équivalents à $\delta^{l+1}$.
Comme nous l'avons vu précédemment, ce terme $\delta^l$ multiplié par l'activation du neurone de la couche précédente $a^{l-1}$, nous donne notre désir $\partial C/\partial w^l$:
$$ \frac{\partial C}{\partial w^l} = \delta^{l}a^{l-1} = w^{l+1}\color{blue}{w^{l+2}...w^{L}}\,\,g(z^{l})\color{blue}{g(z^{l+1})...g(z^{L})\,\,\delta^L} \,\,a^{l-1}$$
Alors maintenant, nous pouvons voir clairement que les mises à jour effectuées sur un poids $w^l$ dépendent directement des valeurs de tous les poids et activations des couches suivantes.
Cela signifie que, pour toute valeur de$w^l$ (il pourrait être très éloigné de l'optimum comme dans la situation tracée au début), sa composante du gradient peut tendre vers zéro si l'un des poids ou activations, $g(z)$(ou une combinaison de celles-ci) des couches suivantes tendent vers zéro. Cet effet indésirable, comme vous l'avez dit dans la question, est appelé gradient de disparition .
Nous comprenons maintenant que même si un poids présente une valeur de $\partial C/\partial w^l$proche de zéro cela ne signifie pas que nous avons atteint un point critique pour ce poids. De plus, l'apprentissage de ces paramètres ralentira considérablement car leurs mises à jour sont proportionnelles à leur composante respective du gradient. Ils risquent donc de rester coincés dans une valeur loin du minimum!
Notez enfin que cet effet indésirable peut devenir plus important à mesure que le nombre de couches suivantes augmente.