Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Implementazione della Discesa del Gradiente in Python | Analisi Matematica
Matematica per la Data Science

bookImplementazione della Discesa del Gradiente in Python

La discesa del gradiente segue un'idea semplice ma potente: muoversi nella direzione della massima discesa per minimizzare una funzione.

La regola matematica è:

theta = theta - alpha * gradient(theta)

Dove:

  • theta è il parametro che stiamo ottimizzando;
  • alpha è il tasso di apprendimento (dimensione del passo);
  • gradient(theta) è il gradiente della funzione in theta.

1. Definizione della funzione e della sua derivata

Si parte da una semplice funzione quadratica:

def f(theta):
    return theta**2  # Function we want to minimize

La sua derivata (gradiente) è:

def gradient(theta):
    return 2 * theta  # Derivative: f'(theta) = 2*theta
  • f(theta): questa è la nostra funzione, e vogliamo trovare il valore di theta che la minimizza;
  • gradient(theta): indica la pendenza in ogni punto theta, che viene utilizzata per determinare la direzione dell'aggiornamento.

2. Inizializzazione dei parametri della discesa del gradiente

alpha = 0.3  # Learning rate
theta = 3.0  # Initial starting point
tolerance = 1e-5  # Convergence threshold
max_iterations = 20  # Maximum number of updates
  • alpha (tasso di apprendimento): controlla l'ampiezza di ogni passo;
  • theta (ipotesi iniziale): punto di partenza per la discesa;
  • tolerance: quando gli aggiornamenti diventano molto piccoli, si interrompe il processo;
  • max_iterations: garantisce che il ciclo non sia infinito.

3. Esecuzione della discesa del gradiente

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
  • Calcolo del gradiente in theta;
  • Aggiornamento di theta utilizzando la formula della discesa del gradiente;
  • Arresto quando gli aggiornamenti sono troppo piccoli (convergenza);
  • Stampa di ogni passaggio per monitorare i progressi.

4. Visualizzazione della discesa del gradiente

123456789101112131415161718192021222324252627282930313233343536373839
import 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()
copy

Questo grafico mostra:

  • La curva della funzione f(θ)=θ2f(θ) = θ^2;
  • Punti rossi che rappresentano ciascun passo della discesa del gradiente fino alla convergenza.
question mark

Qual è la regola di aggiornamento della discesa del gradiente per la funzione f?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 10

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 1.96

bookImplementazione della Discesa del Gradiente in Python

Scorri per mostrare il menu

La discesa del gradiente segue un'idea semplice ma potente: muoversi nella direzione della massima discesa per minimizzare una funzione.

La regola matematica è:

theta = theta - alpha * gradient(theta)

Dove:

  • theta è il parametro che stiamo ottimizzando;
  • alpha è il tasso di apprendimento (dimensione del passo);
  • gradient(theta) è il gradiente della funzione in theta.

1. Definizione della funzione e della sua derivata

Si parte da una semplice funzione quadratica:

def f(theta):
    return theta**2  # Function we want to minimize

La sua derivata (gradiente) è:

def gradient(theta):
    return 2 * theta  # Derivative: f'(theta) = 2*theta
  • f(theta): questa è la nostra funzione, e vogliamo trovare il valore di theta che la minimizza;
  • gradient(theta): indica la pendenza in ogni punto theta, che viene utilizzata per determinare la direzione dell'aggiornamento.

2. Inizializzazione dei parametri della discesa del gradiente

alpha = 0.3  # Learning rate
theta = 3.0  # Initial starting point
tolerance = 1e-5  # Convergence threshold
max_iterations = 20  # Maximum number of updates
  • alpha (tasso di apprendimento): controlla l'ampiezza di ogni passo;
  • theta (ipotesi iniziale): punto di partenza per la discesa;
  • tolerance: quando gli aggiornamenti diventano molto piccoli, si interrompe il processo;
  • max_iterations: garantisce che il ciclo non sia infinito.

3. Esecuzione della discesa del gradiente

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
  • Calcolo del gradiente in theta;
  • Aggiornamento di theta utilizzando la formula della discesa del gradiente;
  • Arresto quando gli aggiornamenti sono troppo piccoli (convergenza);
  • Stampa di ogni passaggio per monitorare i progressi.

4. Visualizzazione della discesa del gradiente

123456789101112131415161718192021222324252627282930313233343536373839
import 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()
copy

Questo grafico mostra:

  • La curva della funzione f(θ)=θ2f(θ) = θ^2;
  • Punti rossi che rappresentano ciascun passo della discesa del gradiente fino alla convergenza.
question mark

Qual è la regola di aggiornamento della discesa del gradiente per la funzione f?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 10
some-alt