Gradienttimenetelmän Toteuttaminen Pythonilla
Gradienttimeneminen perustuu yksinkertaiseen mutta tehokkaaseen ajatukseen: liiku jyrkimmän laskun suuntaan minimoidaksesi funktion.
Matemaattinen sääntö on:
theta = theta - alpha * gradient(theta)
Missä:
theta
on optimoitava parametri;alpha
on oppimisnopeus (askelkoko);gradient(theta)
on funktion gradientti kohdassatheta
.
1. Määrittele funktio ja sen derivaatta
Aloitetaan yksinkertaisella toisen asteen funktiolla:
def f(theta):
return theta**2 # Function we want to minimize
Sen derivaatta (gradientti) on:
def gradient(theta):
return 2 * theta # Derivative: f'(theta) = 2*theta
f(theta)
: tämä on funktiomme, ja haluamme löytää sen thetan arvon, joka minimoi sen;gradient(theta)
: tämä kertoo kulmakertoimen missä tahansa kohdassatheta
, jota käytämme päivityssuunnan määrittämiseen.
2. Alusta gradienttimenemisen parametrit
alpha = 0.3 # Learning rate
theta = 3.0 # Initial starting point
tolerance = 1e-5 # Convergence threshold
max_iterations = 20 # Maximum number of updates
alpha
(oppimisnopeus): määrittää askeleen koon;theta
(alkuarvaus): lähtökohta etenemiselle;tolerance
: kun päivitykset ovat hyvin pieniä, pysäytetään algoritmi;max_iterations
: varmistaa, ettei silmukkaa suoriteta loputtomasti.
3. Suorita gradienttimenetelmä
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
- Laske gradientti kohdassa
theta
; - Päivitä
theta
gradienttimenetelmän kaavalla; - Lopeta, kun päivitykset ovat liian pieniä (konvergenssi);
- Tulosta jokainen askel edistymisen seuraamiseksi.
4. Gradienttimenetelmän visualisointi
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()
Tämä kuvaaja esittää:
- Funktiokäyrän f(θ)=θ2;
- Punaiset pisteet kuvaavat jokaista gradienttimenetelmän askelta, kunnes konvergenssi saavutetaan.
Oliko kaikki selvää?
Kiitos palautteestasi!
Osio 3. Luku 10
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 1.96
Gradienttimenetelmän Toteuttaminen Pythonilla
Pyyhkäise näyttääksesi valikon
Gradienttimeneminen perustuu yksinkertaiseen mutta tehokkaaseen ajatukseen: liiku jyrkimmän laskun suuntaan minimoidaksesi funktion.
Matemaattinen sääntö on:
theta = theta - alpha * gradient(theta)
Missä:
theta
on optimoitava parametri;alpha
on oppimisnopeus (askelkoko);gradient(theta)
on funktion gradientti kohdassatheta
.
1. Määrittele funktio ja sen derivaatta
Aloitetaan yksinkertaisella toisen asteen funktiolla:
def f(theta):
return theta**2 # Function we want to minimize
Sen derivaatta (gradientti) on:
def gradient(theta):
return 2 * theta # Derivative: f'(theta) = 2*theta
f(theta)
: tämä on funktiomme, ja haluamme löytää sen thetan arvon, joka minimoi sen;gradient(theta)
: tämä kertoo kulmakertoimen missä tahansa kohdassatheta
, jota käytämme päivityssuunnan määrittämiseen.
2. Alusta gradienttimenemisen parametrit
alpha = 0.3 # Learning rate
theta = 3.0 # Initial starting point
tolerance = 1e-5 # Convergence threshold
max_iterations = 20 # Maximum number of updates
alpha
(oppimisnopeus): määrittää askeleen koon;theta
(alkuarvaus): lähtökohta etenemiselle;tolerance
: kun päivitykset ovat hyvin pieniä, pysäytetään algoritmi;max_iterations
: varmistaa, ettei silmukkaa suoriteta loputtomasti.
3. Suorita gradienttimenetelmä
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
- Laske gradientti kohdassa
theta
; - Päivitä
theta
gradienttimenetelmän kaavalla; - Lopeta, kun päivitykset ovat liian pieniä (konvergenssi);
- Tulosta jokainen askel edistymisen seuraamiseksi.
4. Gradienttimenetelmän visualisointi
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()
Tämä kuvaaja esittää:
- Funktiokäyrän f(θ)=θ2;
- Punaiset pisteet kuvaavat jokaista gradienttimenetelmän askelta, kunnes konvergenssi saavutetaan.
Oliko kaikki selvää?
Kiitos palautteestasi!
Osio 3. Luku 10