Gradienttimenetelmän Toteuttaminen Pythonilla
Pyyhkäise näyttääksesi valikon
Gradienttimeneminen perustuu yksinkertaiseen mutta tehokkaaseen ideaan: liiku jyrkimmän laskun suuntaan funktion minimoimiseksi.
Matemaattinen sääntö on:
theta = theta - alpha * gradient(theta)
Missä:
thetaon optimoitava parametri;alphaon 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 theta-arvon, joka minimoi sen;gradient(theta): tämä kertoo kulmakertoimen missä tahansa kohdassatheta, jota käytämme päivityssuunnan määrittämiseen.
2. Gradienttivähennyksen parametrien alustaminen
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öpiste vähennykselle;tolerance: pysäytetään, kun päivitykset ovat hyvin pieniä;max_iterations: estää loputtoman silmukan.
3. Gradienttivähennyksen suorittaminen
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ä
thetagradienttivähennyksen kaavalla; - Pysäytä, kun päivitykset ovat liian pieniä (konvergenssi);
- Tulosta jokainen askel edistymisen seuraamiseksi.
4. Gradienttivähennyksen 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 konvergenssiin asti.
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
Gradienttimenetelmän Toteuttaminen Pythonilla
Gradienttimeneminen perustuu yksinkertaiseen mutta tehokkaaseen ideaan: liiku jyrkimmän laskun suuntaan funktion minimoimiseksi.
Matemaattinen sääntö on:
theta = theta - alpha * gradient(theta)
Missä:
thetaon optimoitava parametri;alphaon 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 theta-arvon, joka minimoi sen;gradient(theta): tämä kertoo kulmakertoimen missä tahansa kohdassatheta, jota käytämme päivityssuunnan määrittämiseen.
2. Gradienttivähennyksen parametrien alustaminen
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öpiste vähennykselle;tolerance: pysäytetään, kun päivitykset ovat hyvin pieniä;max_iterations: estää loputtoman silmukan.
3. Gradienttivähennyksen suorittaminen
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ä
thetagradienttivähennyksen kaavalla; - Pysäytä, kun päivitykset ovat liian pieniä (konvergenssi);
- Tulosta jokainen askel edistymisen seuraamiseksi.
4. Gradienttivähennyksen 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 konvergenssiin asti.
Oliko kaikki selvää?
Kiitos palautteestasi!
Osio 3. Luku 10