梯度下降(Gradient Descent)是一种常用的优化算法,用于求解无约束优化问题。在机器学习中,它常被用来更新模型的参数以最小化某个损失函数。以下是一个简单的Python示例,展示如何实现梯度下降算法来优化一个二次函数的参数。
假设我们要优化的函数是 f(x)=x2,我们希望找到使得 f(x) 最小的 x 值。显然,对于这个函数,最小值出现在 x=0。
首先,我们需要计算 f(x) 的梯度(导数),即 f′(x)=2x。然后,我们将使用梯度下降算法来迭代地更新 x 的值,直到 x 收敛到某个值或者我们达到了预定的迭代次数。
下面是使用Python实现的梯度下降算法:
def gradient_descent(f_grad, x_start, learning_rate=0.01, n_iters=1000, tolerance=1e-10): | |
""" | |
梯度下降算法实现 | |
:param f_grad: 目标函数的梯度(导数)函数 | |
:param x_start: 参数的初始值 | |
:param learning_rate: 学习率 | |
:param n_iters: 最大迭代次数 | |
:param tolerance: 收敛容忍度 | |
:return: 最小化参数 | |
""" | |
x = x_start | |
for i in range(n_iters): | |
grad = f_grad(x) | |
if abs(grad) < tolerance: | |
break | |
x = x - learning_rate * grad | |
return x | |
# 目标函数 f(x) = x^2 的梯度 | |
def f_grad(x): | |
return 2 * x | |
# 初始值 | |
x_start = 10 | |
# 调用梯度下降函数 | |
optimized_x = gradient_descent(f_grad, x_start) | |
print("Optimized x:", optimized_x) |
在这个例子中,gradient_descent
函数接受目标函数的梯度(f_grad
),参数的初始值(x_start
),学习率(learning_rate
),最大迭代次数(n_iters
),以及收敛容忍度(tolerance
)作为输入。它返回优化后的参数值。
注意,这个实现使用了固定的学习率,对于更复杂的优化问题,可能需要考虑使用如Adam、RMSprop等更先进的优化算法,这些算法能够自动调整学习率。
此外,选择适当的学习率非常重要,学习率太小会导致收敛速度过慢,而学习率过大则可能导致参数在最优解附近震荡,甚至发散。在实践中,通常需要通过实验来确定一个合适的学习率。