1.牛顿法
牛顿法是一种适用于求解单变量函数的根的技术。
令ϕ(⋅):R→R,并且有
ϕ(t∗)=0
牛顿法的本质就是线性近似。假设t∈R是一个足够接近t∗的变量,
于是有
ϕ(t+Δt)=ϕ(t)+ϕ′(t)Δ(t)+o(∣Δt∣)
忽略无穷小量之后,方程ϕ(t+Δt)=0的解可以近似为
ϕ(t)+ϕ′(t)Δ(t)=0
于是对于增量Δt有
Δ(t)=−ϕ′(t)ϕ(t)
进一步地将这个思想转化为算法进行迭代,
tk+1=tk−ϕ′(tk)ϕ(tk)
2.非线性推广
非线性方程组
其中x∈Rn且F(⋅):Rn→Rn,此时类似地引入一个增量Δx,有
F(x)+F′(x)Δx=0(牛顿系统)
注意,此时如果Jacobian矩阵是非退化的(满秩的,可逆的),那么可以计算得出增量
Δx=−[F′(x)]−1F(x)
对应的迭代过程即为
xk+1=xk−[F′(xk)]−1F(xk)
3.进一步推广
求解无约束极小化的优化问题可以替换为求解非线性方程组的问题
∇f(x)=0(1.2.28)
注意,仅适用于非退化的情况,于是此时的牛顿系统为
∇f(x)+∇2f(x)Δx=0
于是对于一个优化问题,给出牛顿法对应的迭代方程
xk+1=xk−[∇2f(xk)]−1∇f(xk)(1.2.29)
4.算法评估
优点
牛顿法是二阶收敛,不仅考虑了当前的最优方向,还考虑了下一步的最优方向,综合得出一个更加合理的方向
缺点
如果∇2f(xk)是退化的将无法使用
迭代过程有一定几率是发散的
5.举个例子
用牛顿法求解下面单变量函数的一个根
ϕ(t)=1+t2t
可以很显然看出结果t∗=0,牛顿法需要先求解一阶导数
ϕ′(x)=(1+t2)3/21
于是牛顿法的迭代过程为
tk+1=tk−ϕ′(tk)ϕ(tk)=−tk3
于是假设∣t0∣<1时,此算法收敛且速度极快,而±1是振荡点,而∣t0∣>1时,此算法是发散的。
如何避免发散?
实际使用时可以用阻尼牛顿法
xk+1=xk−hk[∇2f(xk)]−1∇f(xk)
其中hk是步长参数,算法初始阶段使用与梯度法一致的步长策略,到了后续阶段选择hk=1较为合理。