Processing math: 1%

《数值优化》学习笔记之第二章 无约束最优化基础

前言

在无约束优化中,我们依赖实变量来最小化目标函数。数学表达式为:
minxf(x)

其中XR 是拥有n个元素的实数向量,f:\mathbb{R}^n \rightarrow \mathbb{R} 是光滑函数。
通常,我们对函数f缺乏全局的视角。我们所知道f的值或许只是一些它在点集x_0,x_1,x_2,…的导数。

例子 最小二乘拟合

最优解的定义

全局极小值的定义为:

\text{点} x^° \text{是全局极小值,仅当} f(x^°) \leqslant f(x) , x \in \mathbb{R}

由于我们关于f的知识通常只是局部的,因此全局极小值很难去求解。
我们无法确定f是否在算法无法采样的区域是否有急剧下降。大多数算法只能找到局部极小值。关于局部极小值的定义如下:
\text{点} x^° \text{是局部极小值,仅当存在}x^°\text{的邻域} \mathbb{N}使得f(x^°)\leqslant f(x) , x \in \mathbb{N}
上述定义有时成为弱极小值,在上述情况下,加强约束条件,就变成严格极小值。
f(x^°) < f(x) , x \in \mathbb{N} with x \neq x^ °

识别局部最小值

判断点x^°紧邻的点是不是有更小的值。当f是光滑函数时,很容易找到局部极小值。特别地,若f连续二阶可导,可以通过判断梯度 \nabla f(X^°) 和Hessian矩阵 \nabla ^2f(X^°)
研究光滑函数的数学工具是泰勒定理。这个定理是本书的核心。

定理2.1 泰勒定理

假设f:\mathbb{R}^n \rightarrow \mathbb{R}是连续可导的,p \in \mathbb{R},那么存在t \in (0,1)使
f(x+p)=f(x)+ \nabla f(x+tp)^Tp
如果f是二阶连续可导,有
\nabla f(x+p)=\nabla f(x)+ \int_0^1{\nabla ^2 f(x+tp)pdt}
所以可得
f(x+p)=f(x)+ \nabla f(x)^Tp + \frac{1}{2}p^T\nabla ^2 f(x+tp)p

定理2.2 一阶必要条件

如果x^°是极小值,在x^°的开邻域f连续光滑,那么\nabla f(x^°)=0

定理2.3 二阶必要条件

如果x^°是极小值,\nabla ^2 f存在并且在x^°的开邻域连续光滑,那么\nabla f(x^°)=0\nabla ^2 f(x^°)是半正定矩阵。

定理2.4 二阶充分条件

如果\nabla f是在x^°的开邻域是连续的,且\nabla f(x^°)=0,且\nabla ^2 f(x^°)是正定矩阵,那么x^°是严格极小值。

算法概述

所有的无约束算法都需要使用者提供一个起点x_0,拥有数据集的使用者能够提供一个合理的估计初值。否则就需要算法通过系统性方法或任意的方式来选择起点。从x_0开始,优化算法产生一系列迭代\{ x_k \}_{k=0}^\infty ,直到不能有任何改进或者以足够的精度逼近结果。
在决定迭代x_k的下一次移动时,算法会参考fx_k的信息,可能还会用到更早的迭代x_0,x_1,…,x_{k-1}。算法使用这些信息能够找到比在x_k的函数值新的迭代值x_{k+1}。有两种基本的策略来从当前x_k计算到x_{k+1}的移动。

两种策略:线搜索和信任域

在线搜索方法中,算法在x_k迭代时,会选择一个方向p_k,使得新的迭代有更小的函数值。沿着p_k移动的距离近似为下面的寻找步长\alpha的一维最小化问题:
\underset{\alpha >0}{\text{min}}f(x_k+\alpha p_k)

第二种是信任域方法。通过构造模型函数m_k来收集f的信息,m_kx_k附近的特性应和目标函数相似。因为模型m_k在离x_k较远的x处可能不是f好的近似。所以我们强制在x_k的某个区域来寻找m_k的极小值。换句话说,我们通过近似求解下列子问题来寻找候选步p
\underset{p}{\text{min}} m_k(x_k+p) , x_k+p\text{在信任域内}

如果候选解不能产生f上的充分下降,可以得知信任域太大,需要缩小并重新求解。通常,信任域是定义为 \lVert \textrm{p} \rVert _2\le \Delta 的球,这里标量\Delta成为信任域半径。椭圆、盒子形的信任域也有使用。
模型m_k通常定义为二次方程:
m_k(x_k+p)=f_k+p^T \nabla f_k +\frac{1}{2}p^TB_kp
其中f_k\nabla f_kB_k分别是标量、向量、矩阵。m_kfx_k处一阶是相同的。B_k是Hessian矩阵或者它的近似。

线搜索方法和信任域方法的区别就在计算方向和步长的次序上。
线搜索方法选择固定的方向p_k,然后确定一个合适的步长;而信任域方法首先选择最大的信任域半径,然后寻找满足距离约束的最大改进可能的方向和步子,如果步子被证明是不满意的,我们减小信任域半径,重新计算。

线搜索方法中的搜索方向

在线搜索方法中,最速下降方向\nabla f_k是明显的选择。它是在从x_k出发的所有下降很快的方向之一。证明如下:对于任意搜索方向p和步长因子\alpha,我们有
f(x_k+\alpha p)=f(x_k)+\alpha p^T \nabla f_k,\text{subject to } \lVert \textrm{p} \rVert =1

fx_k处沿着方向p的变化率简化成\alpha的系数,即p^T \nabla f_k。因此,单位方向p的最快下降方向是下列问题的解。
\underset{p}{\text{min}} p^T \nabla f_k ,\text{sunject to }\lVert p \rVert=1

所以有
p^T\nabla f_k=\lVert p \rVert \lVert \nabla f_k \rVert cos \theta=\lVert \nabla f_k \rVert cos \theta
这里\thetap\nabla f_k的角度。显然,cos \theta =-1上式到达最小,
p=-\frac{ \nabla f_k}{ \lVert \nabla f_k \rVert}

得证。
最速下降法p_k=- \nabla f_k的线搜索方法,它选择步长\alpha _k有多种方式,优点之一就是只用到了梯度,没有用到二阶导数。但是,这个算法在一些比较难的问题上极其地慢。
线搜索搜索方法可能使用区别于最速下降法的搜索方向。通常,在步长充分小时,与- \nabla f_k 的角度小于\frac {\pi}{2}的方向都能保证f下降。

另外一个最重要的搜索方是牛顿方向。这个方向采用二阶泰勒展开式来逼近f(x_k+p)
f(x_k+p) \approx f_k +p^T \nabla f_k+ \frac{1}{2}p^T \nabla ^2 f_k \overset{\textrm{def}}{=} m_k(p)
假设\nabla ^2 f_k是正定的(二阶充分条件),我们可以找到p使m_k(p)最小。令\nabla m_k(p)=0,可得牛顿方向:
p^N_k=- \frac{\nabla f_k }{\nabla ^2 f_k }

f(x_k+p)和它的二次近似m_k(p)差别不大时,牛顿方向还是很可靠的。

拟牛顿方向可以替代牛顿方向,因为他不用不同计算Hessian矩阵,而且仍然拥有超线性下降速度。它使用近似矩阵B_k来替换Hessian矩阵,B_k会在每一次迭代中运用获得的知识来更新。

我们在x_{k+1}处采用二次函数m_{k+1}来近似目标函数f
m_{k+1}(p)=f_{k+1}+p^T \nabla f_{k+1} +\frac{1}{2}p^TB_{k+1}p
如果我们有\nabla m_{k+1}\nabla f_{k+1}x_kx_{k+1}处的值相同,那么可以认为是一个很好的近似。
p=0时,两者相等;
p=-\alpha p_k时,有
\nabla m_{k+1}(-\alpha p_k)= \nabla f_{k+1} - \alpha B_{k+1}p_k=\nabla f_k
进行移项,令s_k=x_{k+1}-x_k,y_k=\nabla f_{k+1}-\nabla f_k,我们可以得到割线方程
B_{k+1}s_k=y_k
因为B_{k+1}是正定的,所以我们可以得到曲率条件:
s_k^TB_{k+1}s_k=s_k^T y_k>0
两个比较常用的更新B_{k+1}的方式是SR1BFGS

SR1公式定义如下:
B_{k+1}=B_k+\frac{(y_k - B_k s_k)(y_k - B_k s_k)^T}{(y_k - B_k s_k)^Ts_k}

BFGS公式定义如下:
B_{k+1}=B_k-\frac{B_k s_k s_k^T B_k}{s_k^T B_k s_k} + \frac{y_k y_k^T}{y_k^Ts_k}

B_kB_{k+1}在SR1中是秩为1的矩阵,在BFGS中是秩为2的矩阵。相同点都满足割线方程,都是对称矩阵。
拟牛顿搜索方向可以在牛顿方向上替换Hessian矩阵为B_k得到:
p_k=-B_k^{-1} \nabla f_k
一些拟牛顿的实现方法通过更新B_k^{-1}而不是B_k来避免分解计算。
如果有H_k \overset{\textrm{def}}{=} B_k^{-1},那么在SR1和BFGS方程可以转化成:
H_{k+1}=(I- \rho _k s_k y_k^T)H_k(I-\rho _k y_k s_k^T)+\rho s_k s_k^T,\rho _k=\frac{1}{y_k^Ts_k}

p_k可以通过p_k=-H_k \nabla f计算。

最后一种搜索方向是非线性共轭梯度法,公式如下:
p_k=-\nabla f(x_k)+\beta _k p_{k-1}
这里\beta _k保证p_kp_{k+1}是共轭的,共轭是在二次函数最小化中非常重要的概念。
共轭梯度法最初是用来求解Ax=b的线性方程组的,这里A是对称正定矩阵。求解线性系统等价于最小化如下的凸二次函数:
\phi (x)=\frac{1}{2}x^T A x-b^Tx
非线性共轭梯度法比最速下降法更有效且计算简单。它没有牛顿方法和拟牛顿方法的拟合速度快,但是不需要保存矩阵。

信任域方法中的模型

m_k(x_k+p)=f_k+p^T \nabla f_k +\frac{1}{2}p^TB_kp
如果令上式中的B_k=0,且定义信任域使用欧几里得范数,那么信任域子问题变成
\underset{p}{\text{min}} f_k +p^T \nabla f_k \quad \text{subject to } \lVert p \rVert \leqslant \varDelta _k
那么解就是
p_k=-\frac{\varDelta _k \nabla f_k}{\lVert \nabla f_k \rVert}
这就是最速下降法上把步长设为信任域半径。
更有趣的信任域算法是将B_k设为Hessian矩阵\nabla ^2 f_k,那么就是信任域牛顿方法。如果B_k通过拟牛顿方法来近似,那么就是信任域拟牛顿方法

尺度问题

考虑
f(x)=10^9 x_1^2 +x_2^2
对于x_1对于小的变化非常敏感,而x_2则不是。解决方法是令z=10^9 x_1。一些算法例如最速下降法对于缩放是敏感的,而另一些,例如牛顿方法则不受影响。

总结

本章介绍了两种选择步长和搜索方向的策略,即线搜索和信任域,两者主要区别是计算步长和搜索方向的步骤相反。对于搜索方向的选择,我们又有最速下降、牛顿、拟牛顿、非线性共轭梯度等方法。主要基础理论就是泰勒定理和矩阵相关知识。

原创文章,转载请注明出处。
刘文武 2016年9月7日 于 电子科大航空航空学院

坚持原创技术分享,您的支持将鼓励我继续创作!