Descente de gradient à une variable
La descente de gradient cherche un minimum par itérations. Pour maximiser , on minimise plutôt . Cette approche est fondamentale dans les problèmes d'optimisation où les solutions exactes sont difficiles à dériver analytiquement, en particulier en raison des complexités dans les dimensions supérieures.
Concept de la descente de gradient
- Démontrée d'abord dans un cadre à une seule variable pour faciliter la transition vers la descente de gradient multivariable plus complexe.
- Emploie un processus itératif pour approcher le minimum d'une fonction en mettant systématiquement à jour le point d'intérêt en fonction de la dérivée de la fonction.
Formulation mathématique
Étant donnée une fonction , la recherche de son minimum implique :
- Calcul de la dérivée : la première étape consiste à calculer la dérivée .
- Mise à jour itérative : en partant d'un point initial , le point suivant est déterminé par , où est le taux d'apprentissage.
Cette méthode s'appuie sur la dérivée pour guider la direction des pas effectués vers le minimum. Le signe de la dérivée indique s'il faut se déplacer vers la gauche ou vers la droite (dans le cas d'une seule variable).
Défis et solutions
Difficulté analytique
- Résoudre directement pour est analytiquement difficile, ce qui illustre les situations où la descente de gradient offre une solution pratique.
Taux d'apprentissage ()
- Le taux d'apprentissage est crucial pour garantir que les pas itératifs sont dimensionnés de manière appropriée afin d'éviter les dépassements ou une convergence excessivement lente.
- Taux d'apprentissage adaptatifs : les recherches sur les taux d'apprentissage adaptatifs visent à ajuster dynamiquement en fonction de la progression de l'optimisation, bien qu'une stratégie universellement optimale reste à établir.
Minima locaux
- La descente de gradient peut converger vers des minima locaux, risquant ainsi de manquer le minimum global.
- Points initiaux multiples : employer plusieurs points de départ et exécuter des itérations de descente de gradient depuis chacun d'eux peut augmenter la probabilité d'approcher le minimum global.
Mise en œuvre pratique
- Initialisation : choisir un point de départ et un taux d'apprentissage.
- Règle de mise à jour : appliquer itérativement la mise à jour .
- Critère de convergence : vérifier la norme de la dérivée, la diminution de l’objectif, le domaine et une limite d’itérations. Une faible variation de ne prouve pas l’optimalité.
Exemple
- Pour , en partant d'une estimation initiale, les itérations progressent en calculant la dérivée au point courant et en mettant à jour le point en fonction du taux d'apprentissage et du gradient calculé.
- Ce processus ne nécessite pas de déterminer quand la dérivée s'annule, mais s'ajuste plutôt de manière itérative selon la direction et l'amplitude du gradient.
Un calcul qui respecte le domaine
Ici désigne le logarithme naturel et le domaine est . La courbure rend strictement convexe. De plus, tend vers l’infini lorsque ou : elle possède donc un unique minimum global. Résoudre donne , aussi noté . Le risque de minima locaux concurrents ne concerne pas cet exemple.
Depuis , avec , on obtient puis ; passe de à . En revanche, depuis avec , le point suivant est négatif et son logarithme n’est pas défini. Il faut rejeter un pas inadmissible avant d’évaluer l’objectif. Cette recherche par rebroussement divise le pas par deux jusqu’à satisfaire la condition de diminution d’Armijo ; les limites d’itérations et d’essais signalent un échec plutôt qu’une convergence fictive.
from math import exp, log, isfinite
def f(x):
return exp(x) - log(x)
x = 1.0
for iteration in range(10000):
g = exp(x) - 1 / x
if abs(g) <= 1e-7:
break
alpha = 1.0
for trial in range(60):
candidate = x - alpha * g
if candidate > 0 and isfinite(candidate):
try:
value = f(candidate)
except OverflowError:
value = float("inf")
if isfinite(value) and value <= f(x) - 1e-4 * alpha * g * g:
break
alpha *= 0.5
else:
raise RuntimeError("line search failed")
x = candidate
else:
raise RuntimeError("iteration limit reached")
print(round(x, 6), round(f(x), 6))
La sortie est 0.567143 2.330366. La tolérance sur la dérivée indique ici une stationnarité approchée ; la stricte convexité identifie l’unique point stationnaire au minimum global. Pour un objectif non convexe, une petite dérivée pourrait signaler un point-selle ou un maximum.
Comme repère pour le pas, donne . Depuis un point initial non nul, la convergence exige ; à , les itérés oscillent, et au-delà ils divergent. Inversement, un infime peut rendre la variation des itérés minuscule alors que reste grand. Si sur un intervalle contenant le pas (gradient -Lipschitz), ; ainsi assure la descente pour . L’exemple logarithmique n’a pas de constante globale finie sur ; la recherche par rebroussement évite cette hypothèse.