Реалізація градієнтного спуску на 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. Візуалізація градієнтного спуску
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()
Цей графік показує:
- Криву функції f(θ)=θ2;
- Червоні точки, що позначають кожен крок градієнтного спуску до збіжності.
Все було зрозуміло?
Дякуємо за ваш відгук!
Секція 3. Розділ 10
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 1.96
Реалізація градієнтного спуску на 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. Візуалізація градієнтного спуску
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()
Цей графік показує:
- Криву функції f(θ)=θ2;
- Червоні точки, що позначають кожен крок градієнтного спуску до збіжності.
Все було зрозуміло?
Дякуємо за ваш відгук!
Секція 3. Розділ 10