使用导数的优化方法
下面介绍的优化方法都是针对无约束优化问题的。
考虑无约束问题:
m
i
n
f
(
x
)
,
x
∈
R
n
min\quad f(\bold{x}),\bold{x}\in \bold{R}^n
minf(x),x∈Rn
最速下降法
假设 f ( x ) f(\bold{x}) f(x)具有一阶连续偏导数。
迭代公式:
x
(
k
+
1
)
=
x
(
k
)
+
λ
k
d
(
k
)
\bold{x}^{(k+1)}=\bold{x}^{(k)}+\lambda_k\bold{d}^{(k)}
x(k+1)=x(k)+λkd(k)
d ( k ) = − ∇ f ( x ( k ) ) \bold{d}^{(k)}=-\nabla f(\bold{x}^{(k)}) d(k)=−∇f(x(k))
d
(
k
)
\bold{d}^{(k)}
d(k)为搜索方向,即
x
(
k
)
\bold{x}^{(k)}
x(k)处的最速下降方向,
λ
k
\lambda_k
λk为从
x
(
k
)
\bold{x}^{(k)}
x(k)出发沿方向
d
(
k
)
\bold{d}^{(k)}
d(k)进行一维搜索的步长,即
λ
k
\lambda_k
λk满足:
f
(
x
(
k
)
+
λ
k
d
(
k
)
)
=
min
λ
≥
0
f
(
x
(
k
)
+
λ
d
(
k
)
)
f(\bold{x}^{(k)}+\lambda_k\bold{d}^{(k)}) = \min_{\lambda\ge0}f(\bold{x}^{(k)}+\lambda \bold{d}^{(k)})
f(x(k)+λkd(k))=λ≥0minf(x(k)+λd(k))
最速下降法在一定条件下是收敛的。
最速下降法存在锯齿现象。容易证明,最速下降法极小化目标函数时,相邻两个搜索方向是正交的,因此最速下降法迭代产生的序列 { x ( k ) } \{x^{(k)}\} {x(k)}所循路径是“之”字形的,当 x ( k ) \bold{x}^{(k)} x(k)接近极小点 x ˉ \bar{\bold{x}} xˉ时,每次迭代移动的步长很小,这样就呈现出锯齿现象,因此影响了收敛速率。因此,最速下降方向反映了目标函数的一种局部性质。从局部看,最速下降方向的确是函数值下降最快的方向,选择这样的方向进行搜索是有利的。但从全局看,由于锯齿现象的影响,即使向着极小点移近不太大的距离,也要经历不小的弯路,因此使收敛速率大为减慢。最速下降法并不是收敛最快的方法,相反,从全局来看,他的收敛是比较慢的。因此,最速下降法一般适用于计算过程的前期迭代或作为间插步骤。
牛顿法
假设
f
(
x
)
f(\bold{x})
f(x)是二次可微实函数,设
x
(
k
)
\bold{x}^{(k)}
x(k)是
f
(
x
)
f(\bold{x})
f(x)极小点的一个估计,我们把
f
(
x
)
f(\bold{x})
f(x)在
x
(
k
)
\bold{x}^{(k)}
x(k)处展成Taylor级数,并取二阶近似:
f
(
x
)
≈
ϕ
(
x
)
=
f
(
x
(
k
)
)
+
∇
f
(
x
(
k
)
)
T
(
x
−
x
(
k
)
)
+
1
2
(
x
−
x
(
k
)
)
T
∇
2
f
(
x
(
k
)
)
(
x
−
x
(
k
)
)
f(\bold{x})\approx \phi(\bold{x})=f(\bold{x}^{(k)})+\nabla f(\bold{x}^{(k)})^T(\bold{x}-\bold{x}^{(k)})+\frac{1}{2}(\bold{x}-\bold{x}^{(k)})^T\nabla^2f(\bold{x}^{(k)})(\bold{x}-\bold{x}^{(k)})
f(x)≈ϕ(x)=f(x(k))+∇f(x(k))T(x−x(k))+21(x−x(k))T∇2f(x(k))(x−x(k))
令
∇
ϕ
(
x
)
=
0
\nabla\phi(\bold{x}) = 0
∇ϕ(x)=0
有:
∇
f
(
x
(
k
)
)
+
∇
2
f
(
x
(
k
)
)
(
x
−
x
(
k
)
)
=
0
\nabla f(\bold{x}^{(k)}) + \nabla^2f(\bold{x}^{(k)})(\bold{x}-\bold{x}^{(k)})=0
∇f(x(k))+∇2f(x(k))(x−x(k))=0
得到迭代公式:
x
(
k
+
1
)
=
x
(
k
)
−
∇
2
f
(
x
(
k
)
)
−
1
∇
f
(
x
(
k
)
)
\bold{x}^{(k+1)}=\bold{x}^{(k)}-\nabla^2f(\bold{x}^{(k)})^{-1}\nabla f(\bold{x}^{(k)})
x(k+1)=x(k)−∇2f(x(k))−1∇f(x(k))
其中
∇
2
f
(
x
(
k
)
)
−
1
\nabla^2f(\bold{x}^{(k)})^{-1}
∇2f(x(k))−1是Hesse矩阵
∇
2
f
(
x
(
k
)
)
\nabla^2f(\bold{x}^{(k)})
∇2f(x(k))的逆矩阵(如果存在的话)
值得注意,当初始点远离极小点时,牛顿法可能不收敛,因为牛顿方向
d
=
−
∇
2
f
(
x
(
k
)
)
−
1
∇
f
(
x
(
k
)
)
\bold{d} =-\nabla^2f(\bold{x}^{(k)})^{-1}\nabla f(\bold{x}^{(k)})
d=−∇2f(x(k))−1∇f(x(k))
不一定是下降方向,经迭代,目标函数值可能上升。此外,即使目标函数值下降,得到的点也不一定是沿牛顿方向的最好点或极小点。
阻尼牛顿法
该方法在标准的牛顿法的迭代公式上增加了沿牛顿方向的一维搜索,具体的迭代公式为:
x
(
k
+
1
)
=
x
(
k
)
+
λ
k
d
(
k
)
\bold{x}^{(k+1)} = \bold{x}^{(k)}+\lambda_k\bold{d}^{(k)}
x(k+1)=x(k)+λkd(k)
其中
d
(
k
)
\bold{d}^{(k)}
d(k)为牛顿方向,
λ
k
\lambda_k
λk为一维搜索得到的步长。
拟牛顿法
牛顿法的优点是收敛速度快。但是,运用牛顿法需要计算二阶偏导数以及Hesse矩阵的逆矩阵,而且目标函数的Hesse矩阵可能非正定。因此提出了拟牛顿法。基本思想是用不包含二阶导数的矩阵近似牛顿法中的Hesse矩阵的逆矩阵。具体的推导这里先不记录了,后续在补充。
拟牛顿法主要有两个典型的算法:DFP算法和BFGS公式。
参考
最优化 理论与算法(第2版)