Implémentation de la Descente de Gradient en Python
Glissez pour afficher le menu
La descente de gradient suit une idée simple mais puissante : se déplacer dans la direction de la plus forte pente descendante pour minimiser une fonction.
La règle mathématique est :
theta = theta - alpha * gradient(theta)
Où :
thetaest le paramètre que nous optimisons ;alphaest le taux d'apprentissage (taille du pas) ;gradient(theta)est le gradient de la fonction entheta.
1. Définir la fonction et sa dérivée
Nous commençons avec une fonction quadratique simple :
def f(theta):
return theta**2 # Function we want to minimize
Sa dérivée (gradient) est :
def gradient(theta):
return 2 * theta # Derivative: f'(theta) = 2*theta
f(theta): ceci est notre fonction, et nous voulons trouver la valeur de theta qui la minimise ;gradient(theta): cela nous indique la pente en tout pointtheta, que nous utilisons pour déterminer la direction de mise à jour.
2. Initialiser les paramètres de la descente de gradient
alpha = 0.3 # Learning rate
theta = 3.0 # Initial starting point
tolerance = 1e-5 # Convergence threshold
max_iterations = 20 # Maximum number of updates
alpha(taux d'apprentissage) : contrôle la taille de chaque pas ;theta(estimation initiale) : point de départ de la descente ;tolerance: arrêt lorsque les mises à jour deviennent très petites ;max_iterations: garantit de ne pas boucler indéfiniment.
3. Effectuer la descente de gradient
for i in range(max_iterations):
grad = gradient(theta) # Compute gradient
new_theta = theta - alpha * grad # Update rule
if abs(new_theta - theta) < tolerance:
print("Converged!")
break
theta = new_theta
- Calculer le gradient en
theta; - Mettre à jour
thetaen utilisant la formule de la descente de gradient ; - Arrêter lorsque les mises à jour sont trop petites (convergence) ;
- Afficher chaque étape pour suivre la progression.
4. Visualisation de la descente de gradient
123456789101112131415161718192021222324252627282930313233343536373839import matplotlib.pyplot as plt import numpy as np def f(theta): return theta**2 # Function we want to minimize def gradient(theta): return 2 * theta # Derivative: f'(theta) = 2*theta alpha = 0.3 # Learning rate theta = 3.0 # Initial starting point tolerance = 1e-5 # Convergence threshold max_iterations = 20 # Maximum number of updates theta_values = [theta] # Track parameter values output_values = [f(theta)] # Track function values for i in range(max_iterations): grad = gradient(theta) # Compute gradient new_theta = theta - alpha * grad # Update rule if abs(new_theta - theta) < tolerance: break theta = new_theta theta_values.append(theta) output_values.append(f(theta)) # Prepare data for plotting the full function curve theta_range = np.linspace(-4, 4, 100) output_range = f(theta_range) # Plot plt.plot(theta_range, output_range, label="f(θ) = θ²", color='black') plt.scatter(theta_values, output_values, color='red', label="Gradient Descent Steps") plt.title("Gradient Descent Visualization") plt.xlabel("θ") plt.ylabel("f(θ)") plt.legend() plt.grid(True) plt.show()
Ce graphique montre :
- La courbe de la fonction f(θ)=θ2 ;
- Points rouges représentant chaque étape de la descente de gradient jusqu'à la convergence.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Implémentation de la Descente de Gradient en Python
La descente de gradient suit une idée simple mais puissante : se déplacer dans la direction de la plus forte pente descendante pour minimiser une fonction.
La règle mathématique est :
theta = theta - alpha * gradient(theta)
Où :
thetaest le paramètre que nous optimisons ;alphaest le taux d'apprentissage (taille du pas) ;gradient(theta)est le gradient de la fonction entheta.
1. Définir la fonction et sa dérivée
Nous commençons avec une fonction quadratique simple :
def f(theta):
return theta**2 # Function we want to minimize
Sa dérivée (gradient) est :
def gradient(theta):
return 2 * theta # Derivative: f'(theta) = 2*theta
f(theta): ceci est notre fonction, et nous voulons trouver la valeur de theta qui la minimise ;gradient(theta): cela nous indique la pente en tout pointtheta, que nous utilisons pour déterminer la direction de mise à jour.
2. Initialiser les paramètres de la descente de gradient
alpha = 0.3 # Learning rate
theta = 3.0 # Initial starting point
tolerance = 1e-5 # Convergence threshold
max_iterations = 20 # Maximum number of updates
alpha(taux d'apprentissage) : contrôle la taille de chaque pas ;theta(estimation initiale) : point de départ de la descente ;tolerance: arrêt lorsque les mises à jour deviennent très petites ;max_iterations: garantit de ne pas boucler indéfiniment.
3. Effectuer la descente de gradient
for i in range(max_iterations):
grad = gradient(theta) # Compute gradient
new_theta = theta - alpha * grad # Update rule
if abs(new_theta - theta) < tolerance:
print("Converged!")
break
theta = new_theta
- Calculer le gradient en
theta; - Mettre à jour
thetaen utilisant la formule de la descente de gradient ; - Arrêter lorsque les mises à jour sont trop petites (convergence) ;
- Afficher chaque étape pour suivre la progression.
4. Visualisation de la descente de gradient
123456789101112131415161718192021222324252627282930313233343536373839import matplotlib.pyplot as plt import numpy as np def f(theta): return theta**2 # Function we want to minimize def gradient(theta): return 2 * theta # Derivative: f'(theta) = 2*theta alpha = 0.3 # Learning rate theta = 3.0 # Initial starting point tolerance = 1e-5 # Convergence threshold max_iterations = 20 # Maximum number of updates theta_values = [theta] # Track parameter values output_values = [f(theta)] # Track function values for i in range(max_iterations): grad = gradient(theta) # Compute gradient new_theta = theta - alpha * grad # Update rule if abs(new_theta - theta) < tolerance: break theta = new_theta theta_values.append(theta) output_values.append(f(theta)) # Prepare data for plotting the full function curve theta_range = np.linspace(-4, 4, 100) output_range = f(theta_range) # Plot plt.plot(theta_range, output_range, label="f(θ) = θ²", color='black') plt.scatter(theta_values, output_values, color='red', label="Gradient Descent Steps") plt.title("Gradient Descent Visualization") plt.xlabel("θ") plt.ylabel("f(θ)") plt.legend() plt.grid(True) plt.show()
Ce graphique montre :
- La courbe de la fonction f(θ)=θ2 ;
- Points rouges représentant chaque étape de la descente de gradient jusqu'à la convergence.
Merci pour vos commentaires !