数值优化——无约束优化
参考资料来源:深蓝学院《机器人中的数值优化》一课
注:推荐大家都可以看一下这门课,本文在于理论解读,作业的代码部分之后再写博客。
问题描述
无约束优化问题指的是无约束条件下的优化问题、主要方法有最速下降法、牛顿法、拟牛顿法、共轭梯度法等。一般来说无约束优化可以归为如下模板,不同方法在于下降方向的不同,工程上步长一般选择Inexact line search方法。模板如下:
step1:给定一个初始点
x
0
x^{0}
x0,令
k
=
0
k=0
k=0
step2:根据相应准则确定一个下降方向
d
k
d^{k}
dk
step3:确定步长
α
k
\alpha_{k}
αk,使得
f
(
x
k
+
α
k
d
k
)
<
f
(
x
k
)
f(x^{k}+\alpha_{k}d^{k})<f(x^{k})
f(xk+αkdk)<f(xk)
step4:令
x
k
+
1
=
x
k
+
α
k
d
k
x^{k+1}=x^{k}+\alpha_{k}d^{k}
xk+1=xk+αkdk
step5:当迭代点
x
k
+
1
x^{k+1}
xk+1满足某种终止准则时,则停止迭代,以
x
k
+
1
x^{k+1}
xk+1为近似最优解;否则
k
=
k
+
1
k=k+1
k=k+1,转
s
t
e
p
2
step2
step2
A.最速下降法
最速下降法的下降方向采用的是当前点的负梯度方向,步长采用的是Inexact line search方法。
Inexact line search方法也即Backtracking/Armijo line search,求解也很简单,初始
τ
\tau
τ可以给一个值,判断是否满足
f
(
x
k
+
τ
d
)
<
=
f
(
x
k
)
+
c
τ
d
T
▽
f
(
x
k
)
f(x^{k}+\tau d)<=f(x^{k})+c\tau d^{T} \bigtriangledown f(x^{k})
f(xk+τd)<=f(xk)+cτdT▽f(xk)条件,不满足则一直二分,直至满足。
该图为最速下降法的示意图,给定一个初始值,不断按照负梯度方向靠近局部最小值。但是该方法存在以下缺点:函数的曲率很大,或者条件数很大的时候,采用梯度下降法可能需要很多的迭代次数。
B.牛顿法
牛顿法的原理在于在当前迭代处做二次泰勒展开近似,下一次迭代的点为之前迭代处拟合的函数的最低点,也即红色框对应的部分。
牛顿法的伪代码如上图所示,其中 M M M为Hession矩阵,步长依旧采用Inexact line search方法,但是该方法存在以下缺点:
- Hession要求正定(实际上很难满足)
- 需要求Hession的逆,计算复杂度 O ( n 3 ) O(n^{3}) O(n3)
C.拟牛顿法
拟牛顿的核心原理在于在牛顿法的基础上,仅仅使用原函数和其梯度信息来估计Hession的逆,从而克服牛顿法的某些缺点,这里主要介绍BFGS类的拟牛顿法
I 光滑凸函数的BFGS方法
上图为光滑凸函数的BFGS方法,流程与牛顿法类似,不同在于使用
B
k
B^{k}
Bk来近似代替hession的逆,
B
k
B^{k}
Bk的推导公式也很优美,如下图所示:
II 光滑非凸函数的BFGS方法
上图为光滑非凸函数的BFGS方法,与光滑凸函数的BFGS方法相比,主要在于两点的不同:
- 步长 t t t采用的是Wolfe准则的inexact line search方法
- BFGS的更新 B K + 1 B^{K+1} BK+1公式加入了cautious判断准则
Wolfe准则有weak和strong两个版本,其在原来inexact line search方法基础上增加了紫色的不等式,该目的是为了保证非凸函数
Δ
g
T
Δ
x
>
0
\Delta g^{T}\Delta x>0
ΔgTΔx>0,从而保证拟合的B矩阵是正定的
BFGS的更新 B K + 1 B^{K+1} BK+1公式加入了cautious判断准则即为,当不靠近局部最小值时,不更新B矩阵,靠近局部最小值时更新B矩阵,阈值即为上图分段函数的条件
III L-BFGS方法
上图为非光滑非凸函数的BFGS方法,与光滑非凸函数的BFGS方法相比,主要在于两点的不同:
- 步长 t t t采用的是Lewis Overton line search(weak版本)
- BFGS的更新
B
K
+
1
B^{K+1}
BK+1公式加入了滑动窗口原则
Lewis Overton line search即初始化步长区间为 [ 0 , inf ] [0,\inf] [0,inf],试探性初始化步长为 α = 1 \alpha=1 α=1,若不满足Wolfe准则的第一个条件 S ( α ) S(\alpha) S(α),则将 u u u修改为 α \alpha α;若不满足Wolfe准则的第二个条件 C ( α ) C(\alpha) C(α),则将 l l l修改为 α \alpha α,直至都满足wolfe准则。同时根据 u u u的取值对 α \alpha α进行二分或者扩大的操作
维护一个历史的滑动窗口,共 m m m对 Δ x \Delta x Δx和 Δ y \Delta y Δy,为了方便描述分别用 s k s^{k} sk和 y k y^{k} yk表示,即存储从 s k − m + 1 s^{k-m+1} sk−m+1和 y k − m + 1 y^{k-m+1} yk−m+1到 s k s^{k} sk和 y k y^{k} yk的 m m m组数据,在计算当前 B k B^{k} Bk时,先初始化 B 0 B^{0} B0为单位阵,然后从滑动窗口初始处 s k − m + 1 、 y k − m + 1 s^{k-m+1}、y^{k-m+1} sk−m+1、yk−m+1开始利用这 m m m组数据进行 m m m次迭代,这样操作的话会使时间复杂度变为 O ( m n 2 ) O(mn^{2}) O(mn2),所以可以采用如红框所示的流程从而使时间复杂度变为 O ( m n ) O(mn) O(mn)
C.共轭梯度法
共轭梯度法求解的即是
A
x
=
b
Ax=b
Ax=b的问题(A为正定对称矩阵),其中
A
A
A不可访问(但可以调用
γ
(
x
)
:
A
x
\gamma(x):Ax
γ(x):Ax),
b
b
b可以访问,在上述条件下可以将其转为一个无约束优化问题,令目标函数的梯度为
A
x
−
b
Ax-b
Ax−b,从而构造的目标函数为
1
2
x
T
A
x
−
b
T
x
\frac{1}{2}x^{T}Ax-b^{T}x
21xTAx−bTx。
迭代过程如上图所示,关键是构造一组共轭向量
共轭向量的构造公式如上,利用残差生成一组线性无关的向量,紧接着动态生成共轭梯度
上图为共轭梯度的伪代码,不断利用残差生成共轭梯度,在不断更新
x
x
x
牛顿共轭梯度法即是使用共轭梯度法生成牛顿法的下降方向,避免了直接求解hession逆的问题。