0%

梯度下降法

梯度下降法(Gradient Descent)是一种优化算法,用于找到函数的局部最小值。它在机器学习中常用于训练模型,通过迭代地调整参数,使目标函数的值逐渐减小,从而达到最优解。

以下是一个使用Python实现梯度下降法的示例代码,用于最小化一个简单的二次函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import numpy as np
import matplotlib.pyplot as plt

# 定义目标函数和其梯度
def target_function(x):
return x**2 + 4*x + 4

def gradient(x):
return 2*x + 4

# 梯度下降算法
def gradient_descent(initial_x, learning_rate, num_iterations):
x = initial_x
x_history = [x]
for _ in range(num_iterations):
x -= learning_rate * gradient(x)
x_history.append(x)
return x, x_history

# 初始化参数和超参数
initial_x = -5
learning_rate = 0.1
num_iterations = 20

# 运行梯度下降算法
optimal_x, x_history = gradient_descent(initial_x, learning_rate, num_iterations)

# 绘制函数和梯度下降路径
x_values = np.linspace(-6, 2, 400)
y_values = target_function(x_values)
plt.plot(x_values, y_values, label='Function')
plt.scatter(x_history, [target_function(x) for x in x_history], c='red', label='Gradient Descent Path')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title('Gradient Descent Example')
plt.show()

print("Optimal x:", optimal_x)
print("Minimum value:", target_function(optimal_x))

在上述代码中,我们首先定义了一个简单的二次函数作为目标函数,并计算了其梯度。然后,实现了梯度下降算法,其中包括初始参数、学习率和迭代次数等超参数。最后,我们运行梯度下降算法,并绘制了目标函数和梯度下降的路径。

请注意,这只是一个简单的梯度下降示例,用于说明概念。在实际应用中,您可能需要考虑更复杂的目标函数、调整学习率、使用不同的梯度下降变体等。

KKT条件