最速下降法
字数 1854 2025-10-27 19:14:30
最速下降法
最速下降法,也称为梯度下降法,是一种用于寻找可微函数局部最小值的迭代优化算法。其核心思想非常直观:在每一步迭代中,沿着当前点函数值下降最快的方向,即负梯度方向,前进一段距离,逐步逼近最小值点。
让我们来详细分解这个过程:
-
基本概念:梯度
- 想象你站在一座形状复杂的山上,四周雾气弥漫,你只能感受到脚下山坡的倾斜程度。你的目标是尽快下到山谷(寻找最小值点)。
- 梯度就是一个数学工具,它精确地描述了你脚下这一点“最陡峭”的上坡方向。梯度是一个向量,它指向函数值增长最快的方向。
- 因此,它的反方向,即负梯度方向,自然就是函数值下降最快的方向。这就是“最速下降”名称的由来。
-
算法的核心步骤
假设我们要求解无约束优化问题:最小化函数 f(x),其中 x 是一个 n 维向量。- 步骤一:初始化
首先,我们随机选择或者根据问题背景猜测一个初始点 x₀。设置一个迭代计数器 k = 0。 - 步骤二:计算搜索方向
在点 xₖ 处,计算函数 f 的梯度,记为 ∇f(xₖ)。那么,本轮迭代的搜索方向 dₖ 就确定为负梯度方向:
dₖ = -∇f(xₖ)
这个方向保证了在该点附近,沿着 dₖ 移动,函数值会下降。 - 步骤三:确定步长(一维线搜索)
方向确定了,但我们需要决定沿着这个方向走多远。这一步被称为线搜索。我们需要选择一个步长 αₖ > 0,使得新的点 xₖ₊₁ 的函数值相比当前点有足够的下降。
具体来说,我们要解决一个一维优化问题:
min f(xₖ + α * dₖ)
即,寻找一个最优的步长 αₖ,使得从 xₖ 出发,沿着 dₖ 方向走 αₖ 的距离后,函数值 f 最小。- 精确线搜索:找到使得 f(xₖ + α * dₖ) 最小的 α。这种方法计算成本较高。
- 非精确线搜索:通常更实用。它不要求找到精确最小值,只要求步长满足某些条件(如 Wolfe 条件或 Armijo 条件),保证函数值有“充分”的下降即可。这在保证收敛性的同时大大减少了计算量。
- 步骤四:更新迭代点
确定了方向 dₖ 和步长 αₖ 后,我们更新当前点:
xₖ₊₁ = xₖ + αₖ * dₖ - 步骤五:检查收敛性
我们检查新得到的点 xₖ₊₁ 是否满足停止准则。常见的准则包括:- 梯度准则:计算新点的梯度范数 ||∇f(xₖ₊₁)||。如果它小于一个预设的很小正数 ε,说明我们已经到了一个“平坦”的区域(可能是极小值点),算法停止。
- 点变化准则:连续两次迭代点的变化很小,即 ||xₖ₊₁ - xₖ|| < ε。
- 函数值变化准则:连续两次迭代的函数值变化很小,即 |f(xₖ₊₁) - f(xₖ)| < ε。
如果满足停止准则,则输出 xₖ₊₁ 作为近似最优解;否则,令 k = k+1,并返回步骤二继续迭代。
- 步骤一:初始化
-
算法的特性与直观理解
- 优点:
- 实现简单:只需要计算目标函数的梯度。
- 内存效率高:每次迭代只需存储当前点,适用于变量非常多(高维)的问题。
- 理论保证:在较弱的条件下(如函数是凸的且 Lipschitz 连续),可以证明算法能收敛到一个局部极小值点。
- 缺点与“锯齿现象”:
- 最速下降法一个著名的缺点是收敛速度可能很慢,尤其是在接近最优点时。你会观察到迭代路径呈“锯齿状”前进。
- 原因:因为每一步都只贪图“当前”最快的下降方向,而忽略了整体的路径。相邻两次迭代的梯度方向是垂直的。这好比一个人每次只沿着最陡的方向下山,结果却在山谷两边来回折返,而不是沿着山谷中心线直接走向最低点。
- 对于条件数(Hessian 矩阵最大特征值与最小特征值的比值)很大的病态问题,这种“锯齿现象”尤其严重,收敛速度会变得非常缓慢。
- 优点:
-
与其他方法的比较和总结
- 最速下降法是一阶优化算法(只用到一阶梯度信息)。相比而言,牛顿法等二阶算法(用到二阶导数/Hessian 矩阵信息)收敛速度更快,因为它们考虑了函数的曲率,能更好地预测最小值点的位置。但牛顿法计算 Hessian 矩阵及其逆矩阵的成本很高。
- 后来发展的共轭梯度法在一定程度上克服了最速下降法的“锯齿”缺点,它要求每次的搜索方向与上一次的搜索方向是关于 Hessian 矩阵共轭的,从而避免了方向的来回振荡,收敛速度更快。
- 总而言之,最速下降法是优化算法中一个基础而重要的方法。它虽然有其局限性,但其核心思想是许多更高级优化算法(如随机梯度下降法,它在机器学习中至关重要)的基石。理解它有助于你更好地掌握整个优化领域的脉络。