Quelles sont les alternatives de descente de gradient?
47
Gradient Descent a le problème de rester bloqué dans les minima locaux. Nous devons exécuter des temps exponentiels de descente sur gradient afin de trouver les minima globaux.
Quelqu'un peut-il me parler de toute alternative de descente de gradient telle qu'appliquée dans l'apprentissage par réseau de neurones, ainsi que de leurs avantages et inconvénients.
Il s’agit plus d’un problème de minimisation de la fonction que de la méthode utilisée; si le vrai minimum global est important, utilisez une méthode telle que le recuit simulé . Cela permettra de trouver le minimum global, mais cela prendra peut-être très longtemps.
Dans le cas des réseaux de neurones, les minima locaux ne sont pas nécessairement un problème. Certains des minima locaux sont dus au fait que vous pouvez obtenir un modèle fonctionnellement identique en permutant les unités de couche cachées, en inversant les poids d'entrée et de sortie du réseau, etc. De plus, si les minima locaux ne sont que légèrement non optimaux, la différence de performance sera minime et n'aura donc aucune importance. Enfin, et c’est un point important, le problème principal de l’adaptation d’un réseau de neurones est la sur-adaptation. Par conséquent, une recherche agressive des minima globaux de la fonction de coût risque de conduire à une sur-adaptation et à un modèle peu performant.
Ajouter un terme de régularisation, par exemple une perte de poids, peut aider à atténuer la fonction de coût, ce qui peut réduire un peu le problème des minima locaux, et je le recommanderais de toute façon comme moyen d'éviter le surajustement.
Cependant, la meilleure méthode pour éviter les minima locaux dans les réseaux de neurones consiste à utiliser un modèle de processus gaussien (ou un réseau de neurones à fonction de base radiale), qui présentent moins de problèmes de minima locaux.
Très vrai. Le problème de ne pas trouver le minimum global est surestimé.
bayerj
2
Un surajustement survient lorsque vous utilisez plusieurs paramètres dans un modèle (cas d'utilisation typique de NN), il n'est pas lié aux minima locaux - du moins pas de manière évidente. Vous pouvez rester coincé dans un mauvais minimum local, même avec un petit NN, c'est-à-dire avec très peu de paramètres libres.
carlosayam
1
@DikranMarsupial, vous pouvez avoir plusieurs minima locaux, même avec un seul paramètre de modèle. Cela dépend de la forme de la fonction de perte. Exemple simplifié mais simple: , où sont les voisins les plus proches et les deuxièmes plus proches de . Il est facile de voir qu'il existe un minimum local entre tous les deux points consécutifs, c'est-à-dire que plus il y a de données, plus les minimums sont locaux! Le global est atteint entre les points les plus proches de l'ensemble de données. C'est extrême, je le sais, mais j'ai déjà vu un comportement similaire résoudre des problèmes de points de changement. x ( 1 ) , x ( 2 ) ωL(ω)=(x(1)−ω)2+(x(2)−ω)2x(1),x(2)ω
Carlos
1
@DikranMarsupial - Je n'avais pas assez de caractères pour terminer ma phrase :) J'ai vu un comportement similaire résoudre des problèmes de points de changement… en utilisant des réseaux de neurones. Dans ce genre de problèmes, un minimum local est généralement mauvais; Je ne suis donc pas d'accord pour dire que ce problème est surestimé.
carlosayam
1
@carlosayam "surévalué" ne signifie pas "sans importance", il s'agit simplement d'un problème de réseaux de neurones généralement surévalué. Il y aura toujours un problème avec toutes les méthodes d'apprentissage, il n'y a pas de panacée pour tout, et vous devez toujours diagnostiquer les problèmes avec n'importe quel modèle.
Dikran Marsupial
24
La descente de gradient est un algorithme d'optimisation .
Il existe de nombreux algorithmes d'optimisation qui fonctionnent sur un nombre fixe de valeurs réelles corrélées ( non séparables ). Nous pouvons les diviser en deux catégories: les optimiseurs à base de gradient et les optimiseurs sans dérivées. Généralement, vous souhaitez utiliser le gradient pour optimiser les réseaux de neurones dans un environnement supervisé, ce qui est nettement plus rapide que l'optimisation sans dérivée. De nombreux algorithmes d'optimisation basés sur les gradients ont été utilisés pour optimiser les réseaux de neurones:
Descente de gradient stochastique (SGD) , minibatch SGD, ...: vous n'avez pas à évaluer le gradient pour l'ensemble de l'entraînement, mais uniquement pour un échantillon ou un minibatch d'échantillons, cela est généralement beaucoup plus rapide que la descente en gradient. Des miniatures ont été utilisées pour lisser le dégradé et paralléliser les propagations avant et arrière. L'avantage par rapport à de nombreux autres algorithmes est que chaque itération est dans O (n) (n est le nombre de poids dans votre NN). SGD ne reste généralement pas coincé dans les minima locaux (!) Car il est stochastique.
Dégradé conjugué non linéaire : semble avoir beaucoup de succès dans la régression, O (n), nécessite le dégradé de lot (par conséquent, pourrait ne pas être le meilleur choix pour les jeux de données volumineux)
L-BFGS : semble avoir beaucoup de succès dans la classification, utilise l'approximation hessienne, nécessite le gradient de lot
Algorithme de Levenberg-Marquardt (LMA) : C’est en fait le meilleur algorithme d’optimisation que je connaisse. Il a pour inconvénient que sa complexité est approximativement égale à O (n ^ 3). Ne l'utilisez pas pour les grands réseaux!
Et de nombreux autres algorithmes ont été proposés pour l'optimisation des réseaux de neurones. Vous pouvez utiliser Google pour l'optimisation sans Hessian ou v-SGD (il existe de nombreux types de SGD avec des vitesses d'apprentissage adaptatives, voir par exemple ici ).
L'optimisation pour les NN n'est pas un problème résolu! D'après mes expériences, le plus gros défi n'est pas de trouver un bon minimum local. Cependant, le défi consiste à sortir de régions très plates, à gérer des fonctions d'erreur mal conditionnées, etc. C'est pourquoi LMA et d'autres algorithmes qui utilisent des approximations de Hessian fonctionnent si bien dans la pratique et que les utilisateurs essaient de développer des versions stochastiques. qui utilisent des informations de second ordre peu complexes. Cependant, un ensemble de paramètres très bien réglé pour SGD sur minibatch est préférable à tout algorithme d'optimisation complexe.
Généralement, vous ne voulez pas trouver un optimum global. Parce que cela nécessite généralement de sur-adapter les données de formation.
Les algorithmes d’entraînement basés sur la population, tels que les algorithmes d’évolution (EA) et l’optimisation d’essaims de particules (PSO), constituent une alternative intéressante à la descente sur gradient. L'idée de base des approches basées sur la population est qu'une population de solutions candidates (vecteurs de pondération NN) est créée et que les solutions candidates explorent de manière itérative l'espace de recherche, échangent des informations et convergent finalement vers un minimum. Étant donné que de nombreux points de départ (solutions candidates) sont utilisés, les chances de converger vers les minima globaux sont considérablement accrues. Les PSO et EA se sont avérés très compétitifs, souvent (bien que pas toujours) surperformant la descente de gradient sur des problèmes d’entraînement complexes de NN.
+1 Il convient de garder à l'esprit que l'optimisation agressive du critère de formation est susceptible d'entraîner un sur-ajustement, à moins que des mesures ne soient prises pour le prévenir. J'éviterais donc les OSP et l'AE, à moins que le critère de formation comprenne une forme de régularisation ou une autre complexité. peine.
Dikran Marsupial
5
@ anna-earwen, pourriez-vous s'il vous plaît indiquer quelques domaines dans lesquels PSO est compétitif par rapport à SGD?
Emrea
8
Je sais que ce fil est assez ancien et que d’autres ont fait un excellent travail pour expliquer des concepts tels que les minima locaux, les surajustements, etc. Cependant, comme OP cherchait une solution alternative, j’essaierai de contribuer et d’espérer que cela inspirera des idées plus intéressantes.
L'idée est de remplacer tous les poids w à w + t, où t est un nombre aléatoire suivant la distribution gaussienne. La sortie finale du réseau est alors la sortie moyenne sur toutes les valeurs possibles de t. Cela peut être fait de manière analytique. Vous pouvez ensuite optimiser le problème avec la méthode de descente de gradient, de méthode LMA ou d’autres méthodes d’optimisation. Une fois l'optimisation terminée, vous avez deux options. Une option consiste à réduire le sigma dans la distribution gaussienne et à effectuer l'optimisation à plusieurs reprises jusqu'à ce que sigma atteigne 0. Vous obtiendrez ainsi un meilleur minimum local (mais cela pourrait éventuellement causer un surajustement). Une autre option est de continuer à utiliser celui avec le nombre aléatoire dans ses poids, il a généralement une meilleure propriété de généralisation.
La première approche est une astuce d’optimisation (je l’appelle tunnel convolution, car elle utilise la convolution sur les paramètres pour changer la fonction cible), elle lisse la surface du paysage de la fonction de coût et supprime certains des minima locaux. faciliter la recherche du minimum global (ou d'un meilleur minimum local).
La deuxième approche est liée à l’injection de bruit (sur les poids). Notez que cela se fait de manière analytique, ce qui signifie que le résultat final est un seul réseau, au lieu de plusieurs réseaux.
Les exemples suivants sont des sorties pour le problème des deux spirales. L'architecture du réseau est la même pour les trois: il n'y a qu'une seule couche cachée de 30 nœuds et la couche de sortie est linéaire. L'algorithme d'optimisation utilisé est LMA. L'image de gauche est pour le réglage de la vanille; le milieu utilise la première approche (à savoir, réduction répétée de sigma vers 0); le troisième utilise sigma = 2.
Vous pouvez voir que la solution vanille est la pire solution, le tunnel convolutionnel fait un meilleur travail et que l'injection de bruit (avec tunnel convolutionnel) est la meilleure (en termes de propriété de généralisation).
Le tunnel convolutionnel et la méthode analytique d'injection de bruit sont mes idées originales. Peut-être qu'ils sont l'alternative que quelqu'un pourrait être intéressé. Les détails se trouvent dans mon article Combinaison d’un nombre infini de réseaux de neurones en un . Avertissement: je ne suis pas un écrivain universitaire professionnel et le document n’est pas examiné par des pairs. Si vous avez des questions sur les approches que j'ai mentionnées, veuillez laisser un commentaire.
Machines d'apprentissage extrême Il s'agit essentiellement d'un réseau de neurones dans lequel les poids reliant les entrées aux nœuds cachés sont attribués de manière aléatoire et ne sont jamais mis à jour. Les poids entre les noeuds cachés et les sorties sont appris en une seule étape en résolvant une équation linéaire (matrice inverse).
En ce qui concerne les tâches d' optimisation globale (c.-à-d. Essayer de trouver le minimum global d'une fonction objectif), vous voudrez peut-être jeter un coup d'œil sur:
Recherche par motif (également appelée recherche directe, recherche sans dérivée ou recherche dans une boîte noire), qui utilise un motif (ensemble de vecteurs) pour déterminer les points à rechercher lors de la prochaine itération.{vi}
Algorithme génétique qui utilise le concept de mutation, croisement et sélection pour définir la population de points à évaluer lors de la prochaine itération de l'optimisation.
Optimisation de substitution utilisant unmodèle de substitution pour approcher la fonction objectif. Cette méthode peut être utilisée lorsque la fonction objectif est coûteuse à évaluer.
Optimisation multi-objectifs (également connue sous le nom d'optimisation Pareto ) pouvant être utilisée pour le problème ne pouvant pas être exprimée sous une forme ayant une seule fonction objectif (mais plutôt un vecteur d'objectifs).
Le recuit simulé , qui utilise le concept de recuit (ou température) pour trouver un compromis entre exploration et exploitation. Il propose de nouveaux points d'évaluation à chaque itération, mais à mesure que le nombre d'itérations augmente, la "température" diminue et l'algorithme devient de moins en moins susceptible d'explorer l'espace, "convergeant" ainsi vers son meilleur candidat actuel.
Comme mentionné ci - dessus, Recuit Simulé, particules Swarm Optimisation et algorithmes génétiques sont bons algorithmes d'optimisation globale qui naviguent bien à travers d' immenses espaces de recherche et à la différence Descente du Gradient ne nécessitent pas d' informations sur le gradient et pourraient être utilisés avec succès avec des fonctions objectives boîte noire et problèmes qui nécessitent des simulations en cours d'exécution.
La descente de gradient est un algorithme d'optimisation .
Il existe de nombreux algorithmes d'optimisation qui fonctionnent sur un nombre fixe de valeurs réelles corrélées ( non séparables ). Nous pouvons les diviser en deux catégories: les optimiseurs à base de gradient et les optimiseurs sans dérivées. Généralement, vous souhaitez utiliser le gradient pour optimiser les réseaux de neurones dans un environnement supervisé, ce qui est nettement plus rapide que l'optimisation sans dérivée. De nombreux algorithmes d'optimisation basés sur les gradients ont été utilisés pour optimiser les réseaux de neurones:
Et de nombreux autres algorithmes ont été proposés pour l'optimisation des réseaux de neurones. Vous pouvez utiliser Google pour l'optimisation sans Hessian ou v-SGD (il existe de nombreux types de SGD avec des vitesses d'apprentissage adaptatives, voir par exemple ici ).
L'optimisation pour les NN n'est pas un problème résolu! D'après mes expériences, le plus gros défi n'est pas de trouver un bon minimum local. Cependant, le défi consiste à sortir de régions très plates, à gérer des fonctions d'erreur mal conditionnées, etc. C'est pourquoi LMA et d'autres algorithmes qui utilisent des approximations de Hessian fonctionnent si bien dans la pratique et que les utilisateurs essaient de développer des versions stochastiques. qui utilisent des informations de second ordre peu complexes. Cependant, un ensemble de paramètres très bien réglé pour SGD sur minibatch est préférable à tout algorithme d'optimisation complexe.
Généralement, vous ne voulez pas trouver un optimum global. Parce que cela nécessite généralement de sur-adapter les données de formation.
la source
Les algorithmes d’entraînement basés sur la population, tels que les algorithmes d’évolution (EA) et l’optimisation d’essaims de particules (PSO), constituent une alternative intéressante à la descente sur gradient. L'idée de base des approches basées sur la population est qu'une population de solutions candidates (vecteurs de pondération NN) est créée et que les solutions candidates explorent de manière itérative l'espace de recherche, échangent des informations et convergent finalement vers un minimum. Étant donné que de nombreux points de départ (solutions candidates) sont utilisés, les chances de converger vers les minima globaux sont considérablement accrues. Les PSO et EA se sont avérés très compétitifs, souvent (bien que pas toujours) surperformant la descente de gradient sur des problèmes d’entraînement complexes de NN.
la source
Je sais que ce fil est assez ancien et que d’autres ont fait un excellent travail pour expliquer des concepts tels que les minima locaux, les surajustements, etc. Cependant, comme OP cherchait une solution alternative, j’essaierai de contribuer et d’espérer que cela inspirera des idées plus intéressantes.
L'idée est de remplacer tous les poids w à w + t, où t est un nombre aléatoire suivant la distribution gaussienne. La sortie finale du réseau est alors la sortie moyenne sur toutes les valeurs possibles de t. Cela peut être fait de manière analytique. Vous pouvez ensuite optimiser le problème avec la méthode de descente de gradient, de méthode LMA ou d’autres méthodes d’optimisation. Une fois l'optimisation terminée, vous avez deux options. Une option consiste à réduire le sigma dans la distribution gaussienne et à effectuer l'optimisation à plusieurs reprises jusqu'à ce que sigma atteigne 0. Vous obtiendrez ainsi un meilleur minimum local (mais cela pourrait éventuellement causer un surajustement). Une autre option est de continuer à utiliser celui avec le nombre aléatoire dans ses poids, il a généralement une meilleure propriété de généralisation.
La première approche est une astuce d’optimisation (je l’appelle tunnel convolution, car elle utilise la convolution sur les paramètres pour changer la fonction cible), elle lisse la surface du paysage de la fonction de coût et supprime certains des minima locaux. faciliter la recherche du minimum global (ou d'un meilleur minimum local).
La deuxième approche est liée à l’injection de bruit (sur les poids). Notez que cela se fait de manière analytique, ce qui signifie que le résultat final est un seul réseau, au lieu de plusieurs réseaux.
Les exemples suivants sont des sorties pour le problème des deux spirales. L'architecture du réseau est la même pour les trois: il n'y a qu'une seule couche cachée de 30 nœuds et la couche de sortie est linéaire. L'algorithme d'optimisation utilisé est LMA. L'image de gauche est pour le réglage de la vanille; le milieu utilise la première approche (à savoir, réduction répétée de sigma vers 0); le troisième utilise sigma = 2.
Vous pouvez voir que la solution vanille est la pire solution, le tunnel convolutionnel fait un meilleur travail et que l'injection de bruit (avec tunnel convolutionnel) est la meilleure (en termes de propriété de généralisation).
Le tunnel convolutionnel et la méthode analytique d'injection de bruit sont mes idées originales. Peut-être qu'ils sont l'alternative que quelqu'un pourrait être intéressé. Les détails se trouvent dans mon article Combinaison d’un nombre infini de réseaux de neurones en un . Avertissement: je ne suis pas un écrivain universitaire professionnel et le document n’est pas examiné par des pairs. Si vous avez des questions sur les approches que j'ai mentionnées, veuillez laisser un commentaire.
la source
Machines d'apprentissage extrême Il s'agit essentiellement d'un réseau de neurones dans lequel les poids reliant les entrées aux nœuds cachés sont attribués de manière aléatoire et ne sont jamais mis à jour. Les poids entre les noeuds cachés et les sorties sont appris en une seule étape en résolvant une équation linéaire (matrice inverse).
la source
En ce qui concerne les tâches d' optimisation globale (c.-à-d. Essayer de trouver le minimum global d'une fonction objectif), vous voudrez peut-être jeter un coup d'œil sur:
Comme mentionné ci - dessus, Recuit Simulé, particules Swarm Optimisation et algorithmes génétiques sont bons algorithmes d'optimisation globale qui naviguent bien à travers d' immenses espaces de recherche et à la différence Descente du Gradient ne nécessitent pas d' informations sur le gradient et pourraient être utilisés avec succès avec des fonctions objectives boîte noire et problèmes qui nécessitent des simulations en cours d'exécution.
la source