Existe-t-il des moyens de gérer le gradient de fuite pour les non-linéarités saturantes qui n'impliquent pas la normalisation par lots ou les unités ReLu?

8

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:

  1. 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θ(s) par exemple.
  2. 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:

  1. 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).
  2. 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.
  3. 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).
  4. Une autre idée pourrait être de ne pas avoir de non-linéarité θ(z) on a aθ(z)aR. Sia>1, 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.
  5. 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é |a|<1 et aussi parce que |θ(s)|<1et 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

Pinocchio
la source
+1 C'est une question intéressante. Juste par curiosité - pourquoi ne voulez-vous pas utiliser les ReLU?
Sycorax dit Réintégrer Monica
mes raisons sont les suivantes: 1) Il me semble que l'utilisation de ReLu évite en quelque sorte la question de la disparition et de l'explosion du gradient plutôt que de la traiter directement. 2) si l'on avait une activation que l'on croyait très bonne pour certaines tâches plutôt que pour d'autres, alors nous sommes obligés de passer à ReLu même si ce n'est peut-être pas la bonne. 3) ... (prochains commentaires)
Pinocchio
3) lorsqu'il s'agit de gaussiens, par exemple, la généralisation de la normalisation par lots n'est pas anodine (dois-je normaliser par lots la préactivation de la norme euclidienne? Si je le fais, l'entrée du guassien RBF pourrait être négative, ce qui entraînerait une explosion des gradients, mais si je préfère normaliser directement la sortie de la non-linéarité, alors, nous normalisons quelque chose qui avait déjà des moments contraints, car la sortie de RBF et en fait sigmoïde (tanh) aussi, est limitée à un petit intervalle [0,1] ou [- 1,1]) Fondamentalement, il semble que ces deux idées pourraient être poussées plus loin, je ne sais tout simplement pas comment.
Pinocchio
Bien que mes raisons soient principalement basées sur des intuitions, il est clair que nous avons besoin de plus de recherches ou de quelque chose pour traiter tous ces points.
Pinocchio
1
Juste curieux de savoir comment les LSTM ou les réseaux résiduels font face aux non-linéarités saturantes. Je me demande s'ils ont seulement tendance à travailler avec ReLus. Dans les articles, ils spécifient tous les deux l'utilisation de ReLus mais je me demande si c'est essentiel pour les méthodes ou juste quelque chose qui leur donne un coup de pouce.
testuser

Réponses:

2

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é!

redcalx
la source
comment faites-vous "donc il existe des moyens de contrôler la taille des pas pour la garder sensible et qui sont quelque peu indépendants du dégradé réel." Doit-on le faire manuellement ou existe-t-il un algorithme qui fonctionne qui fait cela?
Pinocchio
Il existe différentes méthodes (et variantes) discutées dans les liens, mais elles fournissent toutes une méthode de calcul d'une mise à jour de poids qui est autre chose que le produit d'un gradient et d'un taux d'apprentissage.
redcalx
1

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 ( -infet inf), 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 0 N(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 softplus log(1+ex), qui est très proche de ReLU, et a été utilisé dans le papper de Geoffrey Hinton pour expliquer pourquoi ReLU fonctionnerait.

entrez la description de l'image ici

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.

dontloo
la source