L'algorithme de descente de gradient stochastique est l'un des algorithmes d'optimisation couramment utilisés dans l'apprentissage automatique. Il s'agit d'une version optimisée de l'algorithme de descente de gradient et peut converger plus rapidement vers la solution optimale globale. Cet article présentera en détail l'algorithme de descente de gradient stochastique en Python, y compris ses principes, ses scénarios d'application et ses exemples de code.
1. Principe de l'algorithme de descente de gradient stochastique
Avant d'introduire l'algorithme de descente de gradient stochastique, présentons brièvement l'algorithme de descente de gradient. L'algorithme de descente de gradient est l'un des algorithmes d'optimisation couramment utilisés dans l'apprentissage automatique. Son idée est de se déplacer dans la direction du gradient négatif de la fonction de perte jusqu'à ce qu'elle atteigne la valeur minimale. Supposons qu'il existe une fonction de perte f(x), x est un paramètre, alors l'algorithme de descente de gradient peut être exprimé comme suit :
x = x - learning_rate * gradient(f(x))
où learning_rate est le taux d'apprentissage, gradient(f(x)) est le gradient de la fonction de perte f(x).
L'algorithme de descente de gradient stochastique est développé sur la base de l'algorithme de descente de gradient. Il utilise uniquement le gradient d'un échantillon pour mettre à jour les paramètres à chaque mise à jour, au lieu d'utiliser le gradient de tous les échantillons. , donc c'est plus rapide. Plus précisément, l'algorithme de descente de gradient stochastique peut être exprimé comme suit :
x = x - learning_rate * gradient(f(x, y))
où (x, y) représente un échantillon, learning_rate est le taux d'apprentissage, gradient(f(x, y)) est la fonction de perte f(x, y) en (x, y) dégradé sur l'échantillon.
L'avantage de l'algorithme de descente de gradient stochastique est qu'il est rapide, mais l'inconvénient est qu'il est facile de tomber dans la solution optimale locale. Afin de résoudre ce problème, les gens ont développé des algorithmes améliorés de descente de gradient stochastique, tels que la descente de gradient stochastique par lots (SGD mini-batch) et la descente de gradient de moment (SGD de moment).
L'algorithme de descente de gradient stochastique par lots est un algorithme d'optimisation entre l'algorithme de descente de gradient et l'algorithme de descente de gradient stochastique. Il utilise le gradient moyen d'un certain nombre d'échantillons pour mettre à jour les paramètres à chaque mise à jour, il n'est donc pas aussi sensible à l'influence de quelques échantillons que l'algorithme de descente de gradient stochastique. Plus précisément, l'algorithme de descente de gradient stochastique par lots peut être exprimé comme suit :
x = x - learning_rate * gradient(batch(f(x, y)))
où batch(f(x, y)) représente la fonction de perte f( calculée sur les données du mini-lot composé d'échantillons (x, y) et de leurs adjacents échantillons x, y) dégradé.
L'algorithme de descente de gradient de moment est un algorithme de descente de gradient stochastique qui peut accélérer la convergence. Il détermine la direction et la taille du pas de la prochaine mise à jour en accumulant les gradients précédents. Plus précisément, l'algorithme de descente de gradient d'impulsion peut être exprimé comme suit :
v = beta*v + (1-beta)*gradient(f(x, y)) x = x - learning_rate * v
où v est l'impulsion et bêta est le paramètre d'impulsion, prenant généralement une valeur de 0,9 ou 0,99.
2. Scénarios d'application de l'algorithme de descente de gradient stochastique
L'algorithme de descente de gradient stochastique est généralement utilisé dans la formation d'ensembles de données à grande échelle car il peut converger plus rapidement vers la solution optimale globale. Ses scénarios applicables incluent, sans s'y limiter, les aspects suivants :
3. Exemple de code d'algorithme de descente de gradient stochastique
Le code suivant est un exemple d'utilisation de l'algorithme de descente de gradient stochastique pour entraîner un modèle de régression linéaire :
import numpy as np class LinearRegression: def __init__(self, learning_rate=0.01, n_iter=100): self.learning_rate = learning_rate self.n_iter = n_iter self.weights = None self.bias = None def fit(self, X, y): n_samples, n_features = X.shape self.weights = np.zeros(n_features) self.bias = 0 for _ in range(self.n_iter): for i in range(n_samples): y_pred = np.dot(X[i], self.weights) + self.bias error = y[i] - y_pred self.weights += self.learning_rate * error * X[i] self.bias += self.learning_rate * error def predict(self, X): return np.dot(X, self.weights) + self.bias
Dans le code, LinearRegression est un modèle de régression linéaire simple, entraîné à l'aide de le paramètre de l'algorithme de descente de gradient stochastique. Dans la fonction d'ajustement, seul le gradient d'un échantillon est utilisé pour mettre à jour les paramètres pour chaque itération pendant l'entraînement.
4. Résumé
L'algorithme de descente de gradient stochastique est l'un des algorithmes d'optimisation couramment utilisés dans l'apprentissage automatique et présente de grands avantages lors de la formation d'ensembles de données à grande échelle. En plus de l'algorithme de descente de gradient stochastique, il existe également des versions améliorées telles que l'algorithme de descente de gradient stochastique par lots et l'algorithme de descente de gradient de moment. Dans les applications pratiques, il est nécessaire de sélectionner un algorithme d’optimisation approprié basé sur des problèmes spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!