文章目录
- 无约束优化:修正阻尼牛顿法
- 梯度法的困难
- 经典牛顿法
- 定义
- 收敛性证明
- 修正阻尼牛顿法
- 考虑修正阻尼牛顿法的起因
- 如何构造修正矩阵M
- 参考文献
无约束优化:修正阻尼牛顿法
梯度法的困难
无约束优化:线搜索最速下降
对于光滑函数而言,当函数的曲率很大或者条件数 κ ≈ cond ( ∇ 2 f ( x ) ) \kappa \approx \operatorname{cond}\left(\nabla^2 f(x)\right) κ≈cond(∇2f(x))很大时,最速梯度下降法的效果很差。最速梯度下降法只利用了函数的一阶信息即梯度,而曲率或条件数是二阶信息。因此,如果函数 f ( x ) f(x) f(x)足够光滑,我们可以利用 f ( x ) f(x) f(x)的二阶信息改进下降方向,以加速算法的迭代。
经典牛顿法
定义
经典牛顿法利用二阶信息,其实际表现会比梯度法要好,但该方法对函数 f ( x ) f(x) f(x)的要求较高,需要二阶连续可微。
下面考虑多维情况(N>1),对于二阶连续可微函数
f
(
x
)
f(x)
f(x),考虑
f
(
x
)
f(x)
f(x)在迭代点
x
k
x^k
xk处二阶泰勒展开:
f
(
x
k
+
d
k
)
=
f
(
x
k
)
+
∇
f
(
x
k
)
T
d
k
+
1
2
(
d
k
)
T
∇
2
f
(
x
k
)
d
k
+
o
(
∥
d
k
∥
2
)
.
f\left(x^k+d^k\right)=f\left(x^k\right)+\nabla f\left(x^k\right)^{\mathrm{T}} d^k+\frac{1}{2}\left(d^k\right)^{\mathrm{T}} \nabla^2 f\left(x^k\right) d^k+o\left(\left\|d^k\right\|^2\right) .
f(xk+dk)=f(xk)+∇f(xk)Tdk+21(dk)T∇2f(xk)dk+o(
dk
2).
忽略上式的高阶项
o
(
∥
d
k
∥
2
)
o\left(\left\|d^k\right\|^2\right)
o(
dk
2),并将等式右边看成关于
d
k
d^k
dk的函数求其稳定点(驻点),可以得到:
∇
2
f
(
x
k
)
d
k
=
−
∇
f
(
x
k
)
\nabla^2 f\left(x^k\right) d^k=-\nabla f\left(x^k\right)
∇2f(xk)dk=−∇f(xk)
当Hessian矩阵
∇
2
f
(
x
k
)
\nabla^2 f\left(x^k\right)
∇2f(xk)非奇异时,更新方向
d
k
=
−
∇
2
f
(
x
k
)
−
1
∇
f
(
x
k
)
d^k=-\nabla^2 f\left(x^k\right)^{-1} \nabla f\left(x^k\right)
dk=−∇2f(xk)−1∇f(xk),因此经典牛顿法的迭代格式如下:
x
k
+
1
=
x
k
−
∇
2
f
(
x
k
)
−
1
∇
f
(
x
k
)
x^{k+1}=x^k-\nabla^2 f\left(x^k\right)^{-1} \nabla f\left(x^k\right)
xk+1=xk−∇2f(xk)−1∇f(xk)
由上式可以看出,迭代步长恒为1,即不用额外考虑步长的选取,也称该方法为经典牛顿法。
收敛性证明
证明过程见教科书。从收敛性结论可以分析得出,经典牛顿法是收敛速度很快的算法,尤其是当目标函数为二次函数时,由于二次泰勒展开函数与原目标函数不是近似而是完全相同的二次式,Hessian矩阵退化成一个常数矩阵,只需要一步迭代就可以达到极小值点,但收敛性是有条件的:
-
初值敏感,即初值 x 0 x^0 x0必须距离问题的解充分近,只具有局部收敛性,当初值距离问题的解较远时,经典牛顿算法多数情况下失败。因此实际应用时经常先用梯度类算法先求得较低精度的解,然后再用牛顿加速获得高精度解;
-
Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) ∇2f(xk)需要为正定矩阵,非正定条件下可能迭代发散,下面会对该结论进行详细解释;更不用说Hessian矩阵奇异了。
-
条件数 κ ≈ cond ( ∇ 2 f ( x ) ) \kappa \approx \operatorname{cond}\left(\nabla^2 f(x)\right) κ≈cond(∇2f(x))很大时,对初值的要求会更高。
为什么Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) ∇2f(xk)非正定,经典牛顿迭代可能会发散?
收敛的前提是算法的搜索方向得让函数下降,搜索方向一定与负梯度方向之间的夹角为锐角,将搜索方向与当前点梯度做内积:
∇
f
(
x
)
T
d
k
=
−
∇
f
(
x
)
T
∇
2
f
(
x
)
−
1
∇
f
(
x
)
\nabla f(x)^T d^k=-\nabla f(x)^T \nabla^2 f(x)^{-1} \nabla f(x)
∇f(x)Tdk=−∇f(x)T∇2f(x)−1∇f(x)
要求左边小于0,也就是要求:
∇
f
(
x
)
T
∇
2
f
(
x
)
−
1
∇
f
(
x
)
>
0
\nabla f(x)^T \nabla^2 f(x)^{-1} \nabla f(x)>0
∇f(x)T∇2f(x)−1∇f(x)>0
这恰好是Hessian矩阵
∇
2
f
(
x
k
)
\nabla^2 f\left(x^k\right)
∇2f(xk)正定的充要条件。因此对于经典牛顿法,如果Hessian矩阵非正定,则搜索方向可能会使函数上升。
修正阻尼牛顿法
考虑修正阻尼牛顿法的起因
综上,经典牛顿法缺陷如下:
(1)每一步迭代都需要求解一个n维线性方程组 [ ∇ 2 f ( x ) ] d = − ∇ f ( x ) \left[\nabla^2 f(\boldsymbol{x})\right] \boldsymbol{d}=-\nabla f(\boldsymbol{x}) [∇2f(x)]d=−∇f(x),计算量大,Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) ∇2f(xk)既不容易计算也不容易存储;
(2)Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) ∇2f(xk)奇异或非正定, d k d^k dk不一定是下降方向,经典牛顿迭代可能会发散;
(3)当迭代点距离较远时,直接选取步长 a k = 1 a_k=1 ak=1会使得迭代极其不稳定,在有些情况甚至造成迭代点序列发散。
因此,从以下三点考虑修正阻尼牛顿法:
- 构造一个严格正定(所有特征值大于0)的矩阵 M M M(修正 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) ∇2f(xk)),使其尽可能接近Hessian矩阵 ∇ 2 f ( x k ) \nabla^2 f\left(x^k\right) ∇2f(xk),且条件数较低;
- 通过 M d = − ∇ f ( x ) Md=-\nabla f(\boldsymbol{x}) Md=−∇f(x)的形式解线性方程组求出d,而不是通过求逆运算;
- 用线搜索确定步长来增加算法稳定性(阻尼法)。
在这三点中,线搜索优化算法稳定性之前有讲过,这里不再赘述。此处的核心问题是如何选取修正矩阵M,下面介绍两种实用方法。
如何构造修正矩阵M
- 当函数 f ( x ) f(x) f(x)为凸函数时
此时Hessian矩阵
∇
2
f
(
x
k
)
\nabla^2 f\left(x^k\right)
∇2f(xk)肯定是半正定矩阵,可采用如下方法构造M:
M
=
∇
2
f
(
x
)
+
ϵ
I
,
ϵ
=
min
(
1
,
∥
∇
f
(
x
)
∥
∞
)
/
10
\boldsymbol{M}=\nabla^2 f(\boldsymbol{x})+\epsilon \boldsymbol{I}, \epsilon=\min \left(1,\|\nabla f(\boldsymbol{x})\|_{\infty}\right) / 10
M=∇2f(x)+ϵI,ϵ=min(1,∥∇f(x)∥∞)/10
因为
∇
2
f
(
x
k
)
\nabla^2 f\left(x^k\right)
∇2f(xk)半正定,即对于
∀
x
≠
0
\forall x \neq \bf0
∀x=0,有
x
T
∇
2
f
(
x
)
x
≥
0
x^T \nabla^2 f\left(x\right) x \geq 0
xT∇2f(x)x≥0。对于构造的矩阵M,对于
∀
x
≠
0
\forall x \neq \bf0
∀x=0,有
x
⊤
ϵ
x
+
x
T
∇
2
f
(
x
)
x
>
0
x^{\top} \epsilon x+x^T \nabla^{2} f(x) x > 0
x⊤ϵx+xT∇2f(x)x>0恒成立,因此M为对称正定矩阵,且当梯度
∇
f
(
x
)
→
0
\nabla f(\boldsymbol{x}) \to \bf0
∇f(x)→0时
ϵ
→
0
\epsilon \to 0
ϵ→0可保证整个算法的收敛性。对于对称正定线性方程组
M
d
=
−
∇
f
(
x
)
\boldsymbol{M} \boldsymbol{d}=-\nabla f(\boldsymbol{x})
Md=−∇f(x)而言,可采用Cholesky分解对下降方向d进行快速求解。
- 当函数 f ( x ) f(x) f(x)为非凸函数时
知晓
∇
2
f
(
x
k
)
\nabla^2 f\left(x^k\right)
∇2f(xk)为对称不定矩阵,则可采用Bunch-Kaufman分解与块对角线修正。
∇
2
f
(
x
k
)
=
L
B
L
T
\nabla^2 f\left(x^k\right)=LBL^T
∇2f(xk)=LBLT
参考文献
机器人中的数值优化
最优化:建模、算法与理论/最优化计算方法
牛顿法与拟牛顿法学习笔记(一)牛顿法
【最优化】无约束优化方法-阻尼牛顿法
现代数值分析 (数值线性代数部分)