工作中遇到优化的问题,回顾一下当初学过的基本优化算法。
本博客主要考虑无约束且非线性的极小化优化问题:
在工作中遇到的变量和函数值均为1维变量,方便理解和处理。
一、牛顿法
直接贴合工作目标,考虑变量的维度为的情形。
牛顿法的算法思想:给定一个随机初始点,在该点附近对目标函数作二阶泰勒展开,找到下一个迭代点,重复上述方式直至找到极值点。
设为当前迭代点(即当前极值点),则当前泰勒展开式如下所示:
其中,表示的高于2阶的无穷小,忽略该值后使用近似表示。
此时,对于函数根据求极值的必要条件(极值点导数趋近于0)有:
根据上述公式及牛顿法算法思想,给定初试迭代点,则可以构造如下迭代公式:
从初始迭代点开始可以通过公式迭代产生序列逼近目标函数的极小值点。
对于的情况,可以将二阶泰勒展开式作如下推广:
为的梯度向量(简记为,),为的海塞矩阵(Hessian Matrix,简记为,),即:
根据极值的必要条件对公式求导可得:
此时,根据公式可知,那么类似公式可得基本迭代公式如下所示:
矩阵非奇异 => => 原始牛顿迭代法
该迭代公式的搜索方向定义为,也称为牛顿方向。
注意:原始牛顿法中,只有搜索方向,而缺少步长。那么当遇到非二次型目标函数时,可能出现更新后目标函数值变大的的情况,即原始牛顿法不能保证目标函数值一直下降。
二、拟牛顿法
第一节详细介绍了牛顿法的公式推导,整个原始牛顿法的核心就是公式。
注意其中需要计算当前迭代点的一阶导数、二阶导数的逆,这可能导致计算复杂度加大、且有可能遇到Hessian矩阵非正定而无法求逆的情况,从而导致原始牛顿迭代法失效。
为了克服上述问题,拟牛顿法就被提出了。顾名思义,拟牛顿法类似牛顿法,不同的是:拟牛顿法不直接求二阶导数,而是采用近似的方式拟合Hessian矩阵或Hessian矩阵的逆,该近似矩阵保证正定,从而进行优化迭代。
2.0 拟牛顿条件
对求极值的必要条件(即公式)代入可得:
在公式中引入记号:
则公式可以通过公式的记号转化为:
公式和公式即为拟牛顿条件。在拟牛顿法中使用近似矩阵 or 使用近似矩阵:
接下来,就按照不同的近似方式介绍拟牛顿法的具体实现方式。
2.1. DFP
DFP算法的核心思想:使用近似Hessian矩阵的逆,
DFP算法的迭代格式:
其中,初始化的取单位矩阵,接下来推导校正矩阵的构造方式,
TRICKY METHOD:
为保证的对称正定性,直接假设
将公式和公式代入公式可得,
注意,公式和公式中红色括号内的内容均为实值,所以DFP的Tricky1就是对这两个数字做简单赋值:
通过公式和公式可得和的值:
至此,我们想要求依旧需要确定和的值,通过将公式代入公式可得:
此时,DFP的Tricky2就是直接将公式左右两边对应位置的元素取相等,即:
将公式分别代入公式可得和的值:
此时,根据公式可推导出的值:
DFP算法流程:
1 给定初始迭代点 和迭代精确到阈值 ,初始的近似Hessian矩阵,迭代次数;
2 计算 和 来确定搜索方向 ;
3 利用Wolfe方法(步长搜索的方式)得到搜索步长 ,更新迭代点位置 ;
4 若满足 ,达到终止条件,结束;
5. 否则,计算 ;
6 计算 ;
7 令 ,转至步骤2继续。
2.2. BFGS
BFGS算法的思想与DFP类似,推导流程也类似。
算法的核心思想:使用使用近似Hessian矩阵,
BFGS算法的迭代格式:
其中,初始化的取单位矩阵,接下来类似DFB直接推导校正矩阵的构造方式,
TRICKY METHOD:
为保证的对称正定性,直接假设
之后就是完完全全的公式推导过程:
进入BFGS的Tricky:
此时,根据公式可推导出的值:
对比DFP的公式和BFGS的公式可以发现,更新方式只是 和 的位置互换。
通过公式可以得到近似的Hessian矩阵,但在实际更新中使用的搜索方向是,这里使用 公式直接给出 与 间的关系:
至此,BFGS算法可以使用类似DFP的算法流程进行迭代更新。