Quand nous pouvons différencier la fonction de coût et trouver des paramètres en résolvant des équations obtenues par différenciation partielle par rapport à chaque paramètre et savoir où la fonction de coût est minimale. Je pense aussi qu'il est possible de trouver plusieurs endroits où les dérivées sont nulles, ainsi nous pouvons vérifier tous ces endroits et trouver des minima globaux
pourquoi la descente de gradient est-elle effectuée à la place?
machine-learning
computational-statistics
Niranjan Kotha
la source
la source
Réponses:
Même dans le cas, par exemple, de modèles linéaires, où vous avez une solution analytique, il peut être préférable d'utiliser un tel solveur itératif.
Par exemple, si l'on considère la régression linéaire, la solution explicite nécessite d'inverser une matrice qui a la complexité . Cela devient prohibitif dans le contexte du big data.O(N3)
De plus, de nombreux problèmes d'apprentissage automatique sont convexes, donc l'utilisation de dégradés garantit que nous atteindrons les extrêmes.
Comme déjà souligné, il existe encore des problèmes non convexes pertinents, comme les réseaux de neurones, où les méthodes de gradient (rétropropagation) fournissent un solveur efficace. Encore une fois, cela est particulièrement pertinent pour le cas de l'apprentissage en profondeur.
la source
Une descente en pente n'est pas requise. Il s'avère que la descente de gradient est souvent un algorithme d'optimisation horriblement inefficace! Pour les méthodes itératives, il est souvent possible de trouver une meilleure direction pour se déplacer que là où le gradient est le plus raide.
C'est un peu une réponse inversée cependant. Votre question devrait vraiment être, "pourquoi avons-nous besoin de méthodes itératives?" Par exemple. pourquoi ne pas aller directement à la solution si le problème est convexe, la condition de Slater tient, et les conditions de premier ordre sont des conditions nécessaires et suffisantes pour un optimum? Autrement dit, lorsque la solution peut être décrite comme la solution à un système d'équations, pourquoi ne pas simplement résoudre le système? La réponse est que:
la source
Dans le calcul 101, nous avons appris comment optimiser une fonction en utilisant la "méthode analytique": il nous suffit d'obtenir la dérivée de la fonction de coût et de définir la dérivée sur 0, puis de résoudre l'équation. C'est vraiment un problème de jouet et ne se produira presque jamais dans le monde réel.
Dans le monde réel, de nombreuses fonctions de coût n'ont pas de dérivée partout (en outre, la fonction de coût peut être discrète et ne pas avoir de dérivée du tout). De plus, même si vous pouvez calculer la dérivée, vous ne pouvez pas simplement résoudre l'équation analytiquement (par exemple, pensez à résoudre analytiquement? Je peux vous dire que la réponse numérique est , mais je ne connais pas la solution analytique). Il faut utiliser quelques méthodes numériques (vérifier pourquoi ici sur les cas polynomiaux du théorème d'Abel Ruffin ).x7+x3−52+ex+log(x+x2)+1/x=0 x=1.4786
Les méthodes itératives sont agréables à utiliser et très intuitives à comprendre. Supposons que vous vouliez optimiser une fonction, au lieu de résoudre une équation et d'obtenir la réponse, vous essayez d'améliorer votre réponse en nombre d'itérations / étapes après une itération suffisante, vous obtiendrez une réponse proche de la "vraie réponse". Supposons que si vous utilisez le calcul pour minimiser , vous obtenez directement , mais en utilisant des méthodes numériques, vous pouvez obtenir .f(x)=x2 x=0 x=1.1234×10−20
Maintenant, il est important de comprendre comment fonctionnent ces méthodes itératives. Le concept clé est de savoir comment mettre à jour vos paramètres d'entrée pour obtenir une meilleure solution. Supposons que vous souhaitiez minimiser(notez que cette fonction de coût n'est pas différenciable partout, mais qu'elle est différenciable dans "la plupart des endroits", cela nous suffit, car nous savons comment mettre à jour dans "la plupart des endroits".), vous êtes actuellement à , et le coût est de , maintenant vous voulez mettre à jour pour rendre la fonction objectif plus petite. Comment feriez-vous cela? Vous pouvez dire que je veux diminuer les deux , mais pourquoi? En fait, vous utilisez implicitementf(x1,x2)=x21+x22+|x1+x2| (1,1) 4.0 (x1,x2) x1 x2 le concept de gradient "changer une petite quantité de , ce qui se passera sur ". x y . Dans , la dérivée est , donc le gradient négatif multiplié par un taux d'apprentissage, disons , est , nous avons donc mis à jour notre solution de à qui ont un meilleur coût.(1,1) (3,3) α=0.001 1 , 1 ( 0,997 , 0,997 )(−0.003,−0.003) 1,1 (0.997,0.997)
la source
L'approche que vous avez mentionnée ne peut être utilisée que pour résoudre un ensemble d'équations linéaires, par exemple dans le cas de la régression linéaire, mais disons pour résoudre un ensemble d'équations non linéaires, dans des cas tels que les réseaux de neurones avec des activations sigmoïdes, la descente en gradient est l'approche aller pour. Ainsi, Gradient Descent est une approche plus générique.
Même pour les équations linéaires, la taille des matrices donnée par l'ensemble des équations linéaires i est énorme, et il peut être difficile de contraindre les besoins en mémoire.
la source