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