Реалізація градієнтного спуску на 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
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Реалізація градієнтного спуску на 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