梯度下降法(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条件