Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Gradienttimenetelmän Toteuttaminen Pythonilla | Matemaattinen Analyysi
Matematiikka Data-analytiikkaan

bookGradienttimenetelmä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 kohdassa theta.

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 kohdassa theta, 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

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

Tämä kuvaaja esittää:

  • Funktiokäyrän f(θ)=θ2f(θ) = θ^2;
  • Punaiset pisteet kuvaavat jokaista gradienttimenetelmän askelta, kunnes konvergenssi saavutetaan.
question mark

Mikä on funktion f gradienttilaskeutumisen päivityssääntö?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 10

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 1.96

bookGradienttimenetelmä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 kohdassa theta.

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 kohdassa theta, 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

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

Tämä kuvaaja esittää:

  • Funktiokäyrän f(θ)=θ2f(θ) = θ^2;
  • Punaiset pisteet kuvaavat jokaista gradienttimenetelmän askelta, kunnes konvergenssi saavutetaan.
question mark

Mikä on funktion f gradienttilaskeutumisen päivityssääntö?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 10
some-alt