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

bookРеалізація градієнтного спуску на 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()
copy

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

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

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

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Awesome!

Completion rate improved to 1.96

bookРеалізація градієнтного спуску на 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()
copy

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

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

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

Select the correct answer

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

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

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

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