文档维护:Arvin

网页部署:Arvin

写在前面:本文内容是作者在深蓝学院机器人中的数值优化学习时的笔记,作者按照自己的理解进行了记录,如果有错误的地方还请执政。如涉侵权,请联系删除。

无约束优化

拟牛顿法

为什么要用拟牛顿法?

一般情况下,当函数为曲线平滑的凸函数时,我们使用牛顿法。牛顿法如下:

通过二阶泰勒展开:

最小化二次近似:

规定:

牛顿步长:

即:

牛顿法的一些问题:

  • 当当前点距离极小点距离较远时,使用牛顿法需要计算二阶海森矩阵,造成计算力浪费。
  • 海森矩阵需要满足很多条件,当当前点在线性函数上时,海森矩阵值为零,则步长就会变为无穷大。
  • 当函数为非凸函数,牛顿法可能会向更高点迭代。

牛顿法近似,海森矩阵需要正定可逆:

因为迭代需要沿着梯度下降的方向,所以在几何上搜索方向要与负梯度成锐角:

因此只有海森矩阵正定可逆时,使用牛顿法才不会出现上述的问题(向更高点迭代,步长变为无穷大)。

如何构造拟牛顿法?

拟牛顿法近似

拟牛顿法的目的就是为了避免上述问题,同时避免求逆节约计算资源,加快运算速度。我们构造一个矩阵来逼近海森矩阵或者他的逆。

为了方便推导,我们假设$f(x)$是二次函数,此时海森矩阵$H$是常数矩阵,任意两点$x_k$与$x_{k+1}$处的梯度之差是:

即:

对于非二次型的情况,也近似满足上式关系。

因为:

我们可得:

or:

其中,$M_{k+1}B_{k+1}=I$

以上就是拟牛顿条件,不同的拟牛顿法,区别就在于如何逼近不同的矩阵。

DFP法逼近的是$H^{-1}$。

BFGS法逼近的是$H$。

DFP法

DFP是用$D_k$来近似海森矩阵的逆矩阵$H_{k}^{-1}$

推导

现在已知拟牛顿条件:

假设已知$D_k$,希望用叠加的方式求$D_{k+1}$,即$D_{k+1}=D_k+\Delta D_k$,代入得到:

假设满足这个等式的$\Delta D_k$是这样的形式(我也不知道为什么要这么假设,可能是为了保证正定可逆):

对照可以得到:

要保证$\Delta D_k$是对称的,参照其表达式,最简单的就是令:

可得:

然后带入式16可得:

虽然式子看起来很复杂但是并不涉及求逆,第一项仅涉及向量乘法,第二项仅涉及矩阵乘法。

DFP算法步骤

(1) 给定初始点$x_0$,精度$\epsilon$,令$D_0=I$

(2) 计算搜索方向

(3) 从当前点出发,沿着搜索方向做一维搜索,获得最优步长并更新参数:

(4)判断精度,若$|g_{k+1}|<\epsilon$则停止迭代,否则转 (5)

(5) 计算 $\Delta g=g_{k+1}-g_k$, $\Delta x=x_{k+1}-x_{k}$,更新 $D$

(6)$\quad k=k+1$,转(2)

BFGS法

BFGS是最流行的拟牛顿算法。与DFP算法相比,性能更佳。它是构建一个矩阵来逼近海森矩阵$H_k$。

推导

和DFP类似,我们可以得到

下面的推导需要用到Sherman-Morrison公式:

假设$A$是$n$阶可逆矩阵,$t$是常量,$u, v$是$n$维向量,且$A+uv^T$也是可逆矩阵,则

应用两次上述公式可以得到:

且:$B_K = M_k^{-1}$,则有

BFGS算法步骤

严格凸函数

对于严格凸函数(strictly convex),伪代码如下:

1

不严格凸函数

Wolfe条件

  • weak Wolfe conditions

​ 其中,$0<c_1<c_2<1$,通常$c_1=10^{-4},~c_2=0.9$。

  • strong Wolfe conditions其中,$0<c_1<c_2<1$,通常$c_1=10^{-4},\mathrm{~}c_2=0.9$

cautious update

仅仅是wolfe条件无法保证收敛,BFGS算法还需要cautious update

具体步骤:

2

LBFGS法

BFGS公式:

我们使用BFGS算法来利用单位矩阵逐步逼近H矩阵,但是每次计算都要储存B矩阵,如果维度特别大,就会占用许多内存。我们可以用时间换空间的方法,我们不储存B矩阵,而是储存$\Delta x$和$\Delta g$。比如数据集有10000个维度,由储存10000×10000的矩阵变为了储存是个1×10000的10个向量,有效储存了空间。

并且有时候需要迭代许多轮,我们规定只存储m个回合的的数据。

3

  • Lewis & Overton line search:

​ weak Wolfe conditions

4

综上对于非凸非光滑函数:

5

共轭梯度法

作业

BFGS

环境

1
ROS-Melodic

运行

1
2
3
4
5
6
7
mkdir catkin_ws
cd catkin_ws
mkdir src
cp gcopter /catkin_ws/src
catkin_make
source ./devel/set.bash
roslaunch gcopter curve_gen.launch

结果

6

说明

  1. 三次样条(Cubic Spline):

    参考链接:三次样条

    and natural spline is: $\rho(s_0)^{‘’} = \rho(s_N)^{‘’} = 0$.

  2. 目标函数:

  3. 计算梯度:

    • Energy Gradient
  • Potential Gradient
  1. Lewis & Overton line search

7

参考链接:

拟牛顿法(DFP、BFGS、L-BFGS

牛顿法和拟牛顿法

BFGS算法的迭代公式推导