Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Реалізація градієнтного спуску на Python | Математичний Аналіз
Математика для науки про дані

Реалізація градієнтного спуску на Python

Свайпніть щоб показати меню

Градієнтний спуск базується на простій, але потужній ідеї: рух у напрямку найстрімкішого спуску для мінімізації функції.

Математичне правило:

theta = theta - alpha * gradient(theta)

Де:

  • theta — параметр, який оптимізується;
  • alphaшвидкість навчання (розмір кроку);
  • gradient(theta)градієнт функції в точці theta.

1. Визначення функції та її похідної

Починаємо з простою квадратичною функцією:

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

Її похідна (градієнт):

def gradient(theta):
    return 2 * theta  # Derivative: f'(theta) = 2*theta
  • f(theta): це наша функція, для якої потрібно знайти значення theta, що мінімізує її;
  • gradient(theta): показує нахил у точці theta, який використовується для визначення напрямку оновлення.

2. Ініціалізація параметрів градієнтного спуску

alpha = 0.3  # Learning rate
theta = 3.0  # Initial starting point
tolerance = 1e-5  # Convergence threshold
max_iterations = 20  # Maximum number of updates
  • alpha (швидкість навчання): визначає розмір кожного кроку;
  • theta (початкове припущення): стартова точка для спуску;
  • tolerance: коли зміни стають дуже малими, зупиняємося;
  • max_iterations: обмеження кількості ітерацій для уникнення нескінченного циклу.

3. Виконання градієнтного спуску

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
  • Обчислення градієнта у точці theta;
  • Оновлення theta за формулою градієнтного спуску;
  • Зупинка при надто малих змінах (збіжність);
  • Виведення кожного кроку для моніторингу прогресу.

4. Візуалізація градієнтного спуску

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()

Цей графік показує:

  • Криву функції f(θ)=θ2f(θ) = θ^2;
  • Червоні точки, що позначають кожен крок градієнтного спуску до збіжності.
question mark

Яке правило оновлення для градієнтного спуску функції f?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 10

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Реалізація градієнтного спуску на Python

Градієнтний спуск базується на простій, але потужній ідеї: рух у напрямку найстрімкішого спуску для мінімізації функції.

Математичне правило:

theta = theta - alpha * gradient(theta)

Де:

  • theta — параметр, який оптимізується;
  • alphaшвидкість навчання (розмір кроку);
  • gradient(theta)градієнт функції в точці theta.

1. Визначення функції та її похідної

Починаємо з простою квадратичною функцією:

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

Її похідна (градієнт):

def gradient(theta):
    return 2 * theta  # Derivative: f'(theta) = 2*theta
  • f(theta): це наша функція, для якої потрібно знайти значення theta, що мінімізує її;
  • gradient(theta): показує нахил у точці theta, який використовується для визначення напрямку оновлення.

2. Ініціалізація параметрів градієнтного спуску

alpha = 0.3  # Learning rate
theta = 3.0  # Initial starting point
tolerance = 1e-5  # Convergence threshold
max_iterations = 20  # Maximum number of updates
  • alpha (швидкість навчання): визначає розмір кожного кроку;
  • theta (початкове припущення): стартова точка для спуску;
  • tolerance: коли зміни стають дуже малими, зупиняємося;
  • max_iterations: обмеження кількості ітерацій для уникнення нескінченного циклу.

3. Виконання градієнтного спуску

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
  • Обчислення градієнта у точці theta;
  • Оновлення theta за формулою градієнтного спуску;
  • Зупинка при надто малих змінах (збіжність);
  • Виведення кожного кроку для моніторингу прогресу.

4. Візуалізація градієнтного спуску

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()

Цей графік показує:

  • Криву функції f(θ)=θ2f(θ) = θ^2;
  • Червоні точки, що позначають кожен крок градієнтного спуску до збіжності.
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 10
some-alt