梯度下降法
【算法原理】给定 xk,设 f(x) 一阶可微,给定 d∈Rn,有:
f′(xk,d)=limt→0+f(xk+td)−f(xk)t(泰勒展开)=limt→0+f(xk)+∇f(xk)⊤td+o(t)−f(xk)t=∇f(xk)⊤d
取 d=−∇f(xk) 是 f(x) 在 x=xk 处下降最快的方向。
【算法步骤】初值设为 x0,ε,迭代方程为:
xk+1=xk−αk∇f(xk)
其中 αk 由精确线搜索或非精确线搜索技术求得。停机准则为:
||∇f(xk)||≤ε
梯度下降法的收敛性
【定义 1】如果函数 f 在区间 D 上 Lipschitz 连续,那么对于 ∀x,y∈D,有:
∃L>0, ||∇f(x)−∇f(y)||≤L||x−y||
其中常数 L 称为 f 在区间 D 上的 Lipschitz 常数。
【定义 2】若 f(x) 在区间 D 上 k 阶连续可微,且 f(x) 的 p 阶导数在区间 D 上具有常数 L 的 Lipschitz 连续性,则 f(x)∈Ck,pL(D)。
【引理 1】设 f(x)∈C1,1L(Rn),则对于 ∀x,y∈Rn,有:
|f(y)−f(x)−∇f(xk)⊤(y−x)|≤L2||y−x||2
【引理 2】设 f(x) 二阶连续可微,则∇f(x) 具有常数 L 的 Lipschitz 连续性当且仅当 ||∇2f(x)||2≤L。
【定理】设 f(x)∈C1,1L(Rn),f(x) 有下界,∀α∈(0,2L),且算法产生的无穷迭代点列为 {xk},则:
- limk→∞||∇f(xk)||=0
- {xk} 的任一聚点 x∗ 满足 ∇f(x∗)=0
- g∗N≤cN+1(f(x0)−f∗)12,其中 c 为常数,f∗=minf(x),g∗N=min0≤k≤N||∇f(xk)||2
数列的聚点是指在无限数列中,无限接近于某个数的数值。换句话说,聚点是数列中可能出现的极限值。
最速下降法
【算法原理】每一次迭代,均沿梯度的反方向:
xk+1=xk−αk∇f(xk)
其中:
αk=argminα≥0f(xk−αk∇f(xk))=argminα≥0f(xk+1)
【性质】最速下降法每次更新的轨迹都和上一次垂直,即:
∇f(xk−αk∇f(xk))⊤⋅∇f(xk)=0
或:
∇f(xk+1)⊤⋅∇f(xk)=0
因此,当用最速下降法寻找极小点时,其搜索路径呈直角锯齿状。
【算法步骤】
- 第一步:选取初始点 x0,给定终止误差 ε>0 ,令 k=0
- 第二步:计算 ∇f(xk),若 ||∇f(xk)||≤ε,停止迭代并输出 x∗=xk;否则进行第三步
- 第三步(确定迭代方向):取 pk=−∇f(xk)
- 第四步(确定步长):进行一维搜索,求 λk,使得:
f(xk+λkpk)=minλ≥0f(xk+λpk)
令 xk+1←xk+λkpk,k←k+1,回到第二步
【最速下降法与梯度下降法的细微差别】对于梯度下降法,我们需要预先设定步长 α;而最速下降法的步长 αk 是通过优化函数计算得到的。也就是说两者的区别在于每次迭代的步长是否恒定。
【例题】


牛顿法
【算法原理】f(x) 在 xk 处的二阶泰勒展开:
f(xk+1)=f(xk)+∇f(xk)⊤(xk+1−xk)+12(xk+1−xk)⊤∇2f(xk)(xk+1−xk)
设 dk=xk+1−xk,则上式可变为:
f(xk+dk)=f(xk)+∇f(xk)⊤dk+12d⊤k∇2f(xk)dk
那么当 dk 取多少时,可以使 f(xk+dk) 最小?对上式两边对 dk 求梯度得:
∇f(xk+dk)=∇f(xk)+∇2f(xk)dk
当 f(xk+dk) 最小时,有:
∇f(xk+dk)=∇f(xk)+∇2f(xk)dk=0
即:
dk=−(∇2f(xk))−1∇f(xk)
这个就是牛顿方向。
【算法步骤】
- 第一步:选取初始点 x0,给定终止误差 ε>0 ,令 k=0
- 第二步:计算 ∇f(xk),若 ||∇f(xk)||≤ε,停止迭代并输出 x∗=xk;否则进行第三步
- 第三步(确定迭代方向):取 dk=−(∇2f(xk))−1∇f(xk)
- 第四步(迭代更新):令 xk+1←xk+dk=xk−(∇2f(xk))−1∇f(xk),k←k+1,回到第二步
牛顿法的适用条件:
- 海塞矩阵 ∇2f(xk) 正定,若半正定可能会退化为线性收敛
- x0 要靠近 x∗(目标解为 x∗)
【优缺点】
- 优点:收敛速度非常快,是二阶收敛速度
- 缺点:
- 无法保证 ∇2f(xk) 正定且可逆,且计算成本较大(若 ∇2f(xk) 不是正定的,则迭代方向不是下降方向)
- 无法保证 x0 充分靠近 x∗,否则会导致迭代不稳定,进而导致算法无法收敛(局部收敛性)
【改进】
- 改进第一个缺点:修正 ∇2f(xk) 使其正定,于是就有了修正牛顿法
- 改进第二个缺点:引入线搜索技术,于是就有了阻尼牛顿法
修正牛顿法
【牛顿-梯度混合下降法(Goldstein-Price 算法,或 G-P 算法)】在每步迭代中:
dk={−(∇2f(xk))−1∇f(xk), 当∇2f(xk)正定−∇f(xk), 其他情况
【正则化牛顿法(Levenberg-Marquardt 算法,或 L-M 算法)】修正方法如下:
- 若 ∇2f(xk) 不正定,取 Qk>−λmin(∇2f(xk))(即取其特征值中的最小值)
- 若 ∇2f(xk) 正定,取 Qk=0
则 Gk=∇2f(xk)+QkI 正定,其中 I 为单位阵。此时 L-M 算法的下降方向为:
dk=−(∇2f(xk)+QkI)−1∇f(xk)=−Gk∇f(xk)
只要 Qk 足够大,一定可以使海塞矩阵的所有特征值都大于 0。
阻尼牛顿法
【算法步骤】
- 第一步:选取初始点 x0,给定终止误差 ε>0 ,令 k=0
- 第二步:计算 ∇f(xk),若 ||∇f(xk)||≤ε,停止迭代并输出 x∗=xk;否则进行第三步
- 第三步(确定迭代方向):取 dk=−(∇2f(xk))−1∇f(xk)
- 第四步:沿着搜索方向 dk 进行精确或非精确线搜索,确定 αk
- 第五步(迭代更新):令 xk+1←xk+αkdk=xk−αk(∇2f(xk))−1∇f(xk),k←k+1,回到第二步
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步