Je voulais former un réseau avec des non-linéarités qui souffrent de la disparition (ou du problème de gradient explosif mais principalement de la disparition). Je sais que la méthode standard (actuelle) consiste à utiliser la normalisation par lots 1 [BN] 1 ou simplement à abandonner la non-linéarité et à utiliser les unités ReLu Rectifier / ReLu .
Je voulais deux choses:
- Restez fidèle à ma non-linéarité, donc je ne veux pas l'abandonner et utiliser le ReLu (c'est-à-dire qu'aucun ReLu n'est autorisé!). Re-paramétrer la non-linéarité est ok, disons mettre un multiplicatif devant comme dans par exemple.
- Idéalement, je ne voulais pas trop compter sur la normalisation des lots (ou du moins si elle est utilisée, elle doit être utilisée d'une manière nouvelle autre que la façon dont elle a été utilisée dans le papier d'origine ou généraliser à de nombreuses non-linéarités). L'une des raisons pour lesquelles j'ai voulu éviter la normalisation par lots est qu'il semble ne fonctionner que pour des non-linéarités spécifiques. Par exemple, pour les sigmoïdes, tanh mais on ne sait pas comment ils fonctionneraient pour d'autres non-linéarités, disent les gaussiens.
La raison pour laquelle j'ai ces contraintes est parce que j'aimerais traiter le problème de la disparition du gradient ou de l'explosion des gradients en talant le problème directement plutôt qu'en piratant une solution qui ne fonctionne que pour des non-linéarités spécifiques ou tout simplement en évitant le problème en insérant un ReLu.
Je me demandais, avec ces deux contraintes, quelles sont les autres façons de traiter le problème du gradient de fuite? (une autre non-linéarité en considération serait le noyau gaussien RBF avec pré-activation de la norme euclidienne, sigmoïde, tanh, etc.)
Les idées (vagues) possibles que j'avais en tête seraient:
- Avoir une bonne initialisation pour que les non-linéarités saturantes ne commencent pas déjà saturées (les non-linéarités saturées entraînent des gradients proches de zéro).
- Pour RBF, de même, une bonne init peut être importante car les gaussiens ont généralement une grande valeur proche de 0 (c'est-à-dire lorsque les filtres sont similaires à son activation ou à ses données). Ainsi, les avoir trop grands ou trop petits a un problème de gradient de fuite similaire.
- Je ne sais pas vraiment si c'est trop contraignant mais ce serait bien s'il y avait une manière différente d'utiliser la normalisation par lots autre que sa suggestion traditionnelle dans le papier original (ou peut-être une idée BN qui se généralise à un plus grand ensemble de non linéarités, il semble actuellement que la plupart des recherches visent à montrer que cela fonctionne pour les sigmoïdes pour autant que je sache).
- Une autre idée pourrait être de ne pas avoir de non-linéarité on a où . Si, cela signifie que les non-linéarités ne sont pas multipliées en arrière plusieurs fois pour chaque couche, afin d'éviter d'être "évanouies" pour les couches antérieures. Cela pourrait rendre la règle d'apprentissage instable, alors peut-être qu'un régularisateur pourrait être une bonne idée.
- Un optimiseur qui traite intrinsèquement le gradient de fuite (ou au moins la mise à jour de chaque paramètre différemment). Par exemple, si c'est une couche plus proche de l'entrée, alors l'étape d'apprentissage devrait être plus grande. Il serait bon que l'algorithme d'apprentissage en tienne compte lui-même afin de gérer le gradient de fuite.
S'il y a des suggestions sur la façon de traiter le gradient de fuite autre que la norme de lot ou ReLu, j'aimerais en entendre parler!
Il semble que le gradient de fuite se produise principalement parce que les non-linéarités ont la propriété et aussi parce que et après l'avoir multiplié plusieurs fois, il explose ou disparaît. Dire explicitement que le problème pourrait aider à le résoudre. Le problème est qu'il empêche les couches inférieures de se mettre à jour ou entrave le signal via le réseau. Ce serait bien de maintenir ce signal circulant à travers le réseau, pendant les passes avant et arrière (et aussi pendant l'entraînement, pas seulement à l'initialisation).
1 : Ioffe S. et Szegedy C. (2015),
«Batch Normalisation: Accelerating Deep Network Training by Reducing Internal Covariate Shift»,
Actes de la 32e Conférence internationale sur l'apprentissage automatique , Lille, France, 2015.
Journal of Machine Learning Research: W&CP volume 37
Réponses:
Avez-vous étudié RMSProp? Jetez un œil à cet ensemble de diapositives de Geoff Hinton:
Aperçu de la descente en gradient en mini-lots
Plus précisément, la page 29, intitulée «rmsprop: une version mini-batch de rprop», bien qu'il soit probablement utile de lire l'ensemble complet pour avoir une idée plus complète de certaines des idées connexes.
Les taux d'apprentissage No More Pesky de Yan Le Cun sont également liés
et de Brandyn Webb SMORMS3 .
L'idée principale est de regarder le signe du gradient et s'il s'agit d'un retournement ou non; si elle est cohérente, vous voulez vous déplacer dans cette direction, et si le signe ne bascule pas, quelle que soit l'étape que vous venez de prendre doit être OK, à condition qu'il ne soit pas trop petit, il existe donc des moyens de contrôler la taille de l'étape pour la garder sensible et qui sont quelque peu indépendants du gradient réel.
Donc, la réponse courte à la façon de gérer les dégradés disparaissant ou explosant est simplement - n'utilisez pas l'amplitude du dégradé!
la source
Certaines de mes compréhensions peuvent ne pas être correctes.
La cause du problème de gradient de fuite est que
sigmoid
tanh
(et RBF) saturent des deux côtés (-inf
etinf
), il est donc très probable que l'entrée d'une telle non-linéarité tombe sur les régions saturées.L'effet de BN est qu'il "tire" l'entrée de la non-linéarité vers une petite plage autour de 0N(0,1) comme point de départ, où de telles non-linéarités ne saturent pas. Je suppose donc que cela fonctionnera également avec RBF.
Pour supprimer la non-linéarité de ReLU, nous pouvons utiliser la fonction softpluslog(1+ex) , qui est très proche de ReLU, et a été utilisé dans le papper de Geoffrey Hinton pour expliquer pourquoi ReLU fonctionnerait.
Les réseaux résiduels ou les réseaux autoroutiers offrent également une autre manière de traiter les gradients de fuite (via des raccourcis). D'après mon expérience, une telle architecture est entraînée bien plus rapidement que de connecter uniquement la perte à la dernière couche.
De plus, la difficulté de former des réseaux profonds n'est pas uniquement due au gradient de fuite , mais aussi à d'autres facteurs (par exemple le décalage de covariable interne). Il y a une normalisation récente de la couche de papier sur une autre façon de faire la normalisation, elle ne dit pas sur la disparition des dégradés, mais peut-être que cela vous intéressera.
la source