Comment CNN évite-t-il le problème du gradient de fuite

15

J'ai beaucoup lu sur les réseaux de neurones convoloutionnels et je me demandais comment ils évitaient le problème du gradient de fuite. Je sais que les réseaux de croyances profondes empilent des auto-encodeurs à un seul niveau ou d'autres réseaux peu profonds pré-formés et peuvent donc éviter ce problème, mais je ne sais pas comment il est évité dans les CNN.

Selon Wikipedia :

"malgré le" problème de gradient disparaissant "mentionné ci-dessus," la puissance de traitement supérieure des GPU rend la simple rétropropagation possible pour les réseaux neuronaux à action directe profonde avec de nombreuses couches. "

Je ne comprends pas pourquoi le traitement GPU supprimerait ce problème?

Aly
la source
2
L'article de Wikipédia n'a-t-il pas justifié pourquoi le GPU a aidé à résoudre le problème de la disparition du gradient? Est-ce parce que même si les gradients sont faibles, puisque les GPU sont si rapides que nous parvenons toujours à améliorer les paramètres en faisant beaucoup d'étapes grâce aux GPU?
Charlie Parker
2
Exactement. La disparition du problème de gradient est la raison pour laquelle les poids des couches inférieures sont mis à jour à un rythme très faible, et il faut donc une éternité pour former le réseau. Mais, comme avec les GPU, vous pouvez faire plus de calculs (c.-à-d. Plus de mises à jour des poids) en moins de temps, avec de plus en plus de traitement GPU, le problème de gradient de fuite est quelque peu disparu dans une certaine mesure.
Sangram
@CharlieParker, pourriez-vous développer GPU's are fast correlated with vanishing gradients, je peux comprendre la logique rapide avec une large bande passante mémoire pour traiter plusieurs multiplications matricielles! mais pourriez-vous expliquer ce que cela a à voir avec les dérivés? Le problème du gradient de fuite semble faire plus avec l'initialisation du poids , n'est-ce pas!
Anu

Réponses:

13

Le problème de la disparition du gradient nous oblige à utiliser de petits taux d'apprentissage avec une descente de gradient qui nécessite alors de nombreuses petites étapes pour converger. C'est un problème si vous avez un ordinateur lent qui prend beaucoup de temps pour chaque étape. Si vous avez un GPU rapide qui peut effectuer beaucoup plus d'étapes en une journée, c'est moins un problème.

Il existe plusieurs façons de résoudre le problème du gradient de fuite. Je suppose que le plus grand effet pour les CNN est venu du passage des unités non linéaires sigmoïdes aux unités linéaires rectifiées. Si vous considérez un réseau neuronal simple dont l'erreur dépend du poids w i j uniquement par y j , oùEwijyj

yj=f(iwijxi),

son gradient est

wijE=Eyjyjwij=Eyjf(iwijxi)xi.

fff

f(u)=max(0,u),

http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf

Lucas
la source
2
Je suis un peu perplexe au sujet des unités linéaires rectifiées. Oui, pour les sigmoïdes, etc., le gradient est souvent très faible - mais pour les unités linéaires rectifiées, il est souvent exactement nul. N'est-ce pas pire? Ainsi, si les poids d'une unité sont malheureux, ils ne changeront jamais.
Hans-Peter Störr
2
En y réfléchissant, des ReLU qui fuient et / ou qui sont bruyants peuvent être utilisés pour cette raison.
sunside
5
Pourquoi ta première phrase est-elle vraie? C'est-à-dire "Le problème de la disparition du gradient nous oblige à utiliser de petits taux d'apprentissage avec une descente de gradient qui nécessite alors de nombreuses petites étapes pour converger." Pourquoi avons-nous besoin de faibles taux d'apprentissage pour faire face au problème du gradient de fuite? Si les gradients sont déjà petits en raison de la disparition des gradients, je me serais attendu à ce que les rendre petits ne fasse qu'empirer les choses.
Charlie Parker
2
Bonne question, j'aurais dû mieux expliquer cette déclaration. Le problème de la disparition des gradients n'est pas que tous les gradients sont petits (ce que nous pourrions facilement résoudre en utilisant des taux d'apprentissage élevés), mais que les gradients disparaissent lorsque vous rétropropez à travers le réseau. C'est-à-dire que les gradients sont petits dans certaines couches mais grands dans d'autres couches. Si vous utilisez des taux d'apprentissage élevés, le tout explose (car certains gradients sont importants), vous devez donc utiliser un petit taux d'apprentissage. L'utilisation de plusieurs taux d'apprentissage est une autre approche pour résoudre le problème, au prix de l'introduction de plus d'hyperparamètres.
Lucas
3
Je dirais que le taux d'apprentissage est principalement lié au problème de gradient explosif . La réduction du gradient avec un taux d'apprentissage exagérément bas n'empêche pas du tout la disparition des gradients, elle retarde simplement l'effet car l'apprentissage ralentit considérablement. L'effet lui-même est provoqué par l'application répétée de non-linéarités et la multiplication de petites valeurs. Bien sûr, il y a une tendance à aller vers des taux d'apprentissage plus faibles (en raison de la puissance de calcul), mais cela n'a rien à voir avec la disparition des gradients car cela ne contrôle que la façon dont l'espace d'état est exploré (dans des conditions stables).
runDOSrun