牛顿法

219 阅读2分钟

1.牛顿法

牛顿法是一种适用于求解单变量函数的根的技术。
ϕ():RR\phi( \cdot ) : \mathbb{R} \rightarrow \mathbb{R},并且有

ϕ(t)=0\phi(t^*) = 0

牛顿法的本质就是线性近似。假设tRt \in \mathbb{R}是一个足够接近tt^*的变量, 于是有

ϕ(t+Δt)=ϕ(t)+ϕ(t)Δ(t)+o(Δt)\phi(t + \Delta t) = \phi(t) + \phi'(t)\Delta(t) + o(|\Delta t|)

忽略无穷小量之后,方程ϕ(t+Δt)=0\phi(t + \Delta t) = 0的解可以近似为

ϕ(t)+ϕ(t)Δ(t)=0\phi(t) + \phi'(t)\Delta(t) = 0

于是对于增量Δt\Delta t

Δ(t)=ϕ(t)ϕ(t)\Delta(t) = -\frac{\phi(t)}{\phi'(t)}

进一步地将这个思想转化为算法进行迭代,

tk+1=tkϕ(tk)ϕ(tk)t_{k+1} = t_k - \frac{\phi(t_k)}{\phi'(t_k)}

2.非线性推广

非线性方程组

F(x)=0F(x) = 0

其中xRnx \in \mathbb{R}^nF():RnRnF (\cdot):\mathbb{R^n} \rightarrow \mathbb{R^n},此时类似地引入一个增量Δx\Delta x,有

F(x)+F(x)Δx=0(牛顿系统)F(x) + F'(x)\Delta x = 0 \tag{牛顿系统}

注意,此时如果Jacobian矩阵是非退化的(满秩的,可逆的),那么可以计算得出增量

Δx=[F(x)]1F(x)\Delta x = -[F'(x)]^{-1}F(x)

对应的迭代过程即为

xk+1=xk[F(xk)]1F(xk)x_{k+1} = x_k - [F'(x_k)]^{-1}F(x_k)

3.进一步推广

求解无约束极小化的优化问题可以替换为求解非线性方程组的问题

f(x)=0(1.2.28)\nabla f(x) = 0 \tag{1.2.28}

注意,仅适用于非退化的情况,于是此时的牛顿系统

f(x)+2f(x)Δx=0\nabla f(x) + \nabla^2f(x)\Delta x = 0

于是对于一个优化问题,给出牛顿法对应的迭代方程

xk+1=xk[2f(xk)]1f(xk)(1.2.29)x_{k+1} = x_k - [\nabla^2f(x_k)]^{-1}\nabla f(x_k) \tag{1.2.29}

4.算法评估

优点

牛顿法是二阶收敛,不仅考虑了当前的最优方向,还考虑了下一步的最优方向,综合得出一个更加合理的方向

缺点

如果2f(xk)\nabla^2 f(x_k)是退化的将无法使用

迭代过程有一定几率是发散的

5.举个例子

用牛顿法求解下面单变量函数的一个根

ϕ(t)=t1+t2\phi(t) = \frac{t}{\sqrt{1+t^2}}

可以很显然看出结果t=0t^* = 0,牛顿法需要先求解一阶导数

ϕ(x)=1(1+t2)3/2\phi'(x) = \frac{1}{(1+t^2)^{3/2}}

于是牛顿法的迭代过程为

tk+1=tkϕ(tk)ϕ(tk)=tk3t_{k+1} = t_k - \frac{\phi(t_k)}{\phi'(t_k)} = -t_k^3

于是假设t0<1|t_0| < 1时,此算法收敛且速度极快,而±1\pm1是振荡点,而t0>1|t_0| > 1时,此算法是发散的。

如何避免发散?

实际使用时可以用阻尼牛顿法

xk+1=xkhk[2f(xk)]1f(xk)x_{k+1} = x_k - h_k[\nabla^2f(x_k)]^{-1}\nabla f(x_k)

其中hkh_k是步长参数,算法初始阶段使用与梯度法一致的步长策略,到了后续阶段选择hk=1h_k = 1较为合理。