2021—2022学年第一学期寒假学习记录16
2022.01.16,今天是服务外包竞赛:随便拿个奖队的项目进行的第十六天,今天根据项目要求继续学习matlab数字图像处理
L_BFGS算法
3.1基本原理
机器学习算法中经常碰到非线性优化问题,如 Sparse Filtering 算法,其主要工作在于求解一个非线性极小化问题。在具体实现中,大多调用的是成熟的软件包做支撑,其中最常用的一个算法是 L-BFGS。
L_BFGS算法是拟牛顿算法中广泛使用的一种优化算法。牛顿算法具有标准形式:。拟牛顿法是在牛顿法的基础上发展来的。牛顿法的基本思想是在现有极小值点估计值的附近对目标函数进行二阶泰勒展开,进而找到极小点的下一个估计值。因而,牛顿法具有二次收敛性;然而,牛顿法要求海森矩阵为正定阵,同时对海森矩阵的计算也意味着很大的计算代价,包括对海森矩阵求逆的过程。
随后,拟牛顿算法应运而生,拟牛顿法属于梯度法的一种,具有下面形式:,其中是正定矩阵。该方法在迭代过程中通过对迭代方向的调整,使其接近牛顿下降方向。它的特点是:收敛速度快,避免牛顿法的二次微分计算。相对于共轭梯度法,它的不足在于,在计算迭代方向的矩阵向量乘法中,需要存储矩阵。并被证明在解决有约束、无约束以及大规模优化问题上比牛顿法更有效。拟牛顿算法的基本思想是不通过求偏导而直接构造出可近似海森矩阵(或海森矩阵的逆矩阵)的对称正定矩阵,在“拟牛顿条件”下优化目标函数。不同的拟牛顿算法则对应不同的构造海森矩阵或其逆矩阵的方式。
拟牛顿条件:
假定在第k次迭代后,使用二次模型对目标函数在处进行近似,为求导操作:
(26)
这里表示求导,和分别对应和。为n*n对称正定矩阵,并且在每次迭代中会进行更新。
对上式求极值点可得:
(27)
那么则视为下一步迭代的搜索方向,在该方向上进行一维线搜索得到步长之后,将会确定下一步迭代的取值:
(28)紧接着,使用相似的方法,在处对该目标函数使用二次模型进行近似,可以得到:
(29)
接下来将建立点处和点处的关系,即上式在处和处的梯度值应该和目标函数一致。因此,可以得到以下的关系:
(30)
整理可得:
(31)
令,
将得到以下关系式:
(32)
这就是割线方程,描述了目标函数自变量偏移量和梯度变化量之间的关系,也就是拟牛顿算法需要满足的条件。其中是对目标函数相应的海森矩阵的近似,假定对海森矩阵的逆矩阵进行近似,则可以得到另一等价的割线方程:
(33)
BFGS算法是通过近似海森矩阵来实现的,同时是对称正定矩阵。接下来给出的构造方法。
BFGS算法:
采用直接法进行构造,并定义矩阵的更新方式:
(34)
为了保证矩阵的对称正定特性,对按以下方式进行定义:
(35)
将上式和割线方程联立可得:
(36)
括号中表示数值结果,并非向量结果。在这里,假定括号中数值分别是1和-1;之后,确定和的数值,可得:
(37)
再令,并进一步得到和的数值:
(38)
最终得出了的更新方程:
(39)
对上式应用Sherman–Morrison–Woodbury公式将得到该方程的另一表示:
(40)
以上就是BFGS算法的海森矩阵(或其逆矩阵)的估计值的更新方程。
L_BFGS算法:
L-BFGS算法是在BFGS算法的基础上得到的,由于原始的BFGS算法需要保存n*n的矩阵,该存储量随n成平方规模增长,为了减少存储量,减小内存开销,适应大规模的优化问题,L_BFGS算法应运而生。L_BFGS算法是对BFGS算法的近似,其核心思想是不再存储完整的n*n矩阵,而是仅仅保留m个最近的n维向量和,这样存储量就由降低至。与此同时,算法性能也接近原始BFGS算法(选取合适的m值,依问题而定)。
紧接着,将给出L_BFGS算法的具体原理。根据BFGS算法中的更新方程,可以根据公式展开得到与的关系,如下:
(41)
很自然的,考虑L_BFGS算法,如果k<=m-1,那么用来计算的公式成立,无需修改;如果k>m-1(即k>=m)时,仅仅保留最近的m个向量和m个向量,则用来计算的公式变为:
(42)
那么可以将上述两种情况进行综合,令,则有:
(43)
在每步迭代中得到后,在处建立相应的二次模型,根据极值点条件:
(44)
将成为处下一步进行搜索的方向,根据Jorge Nocedal Stephen J. Wright 《Numerical Optimization》书中的介绍,这里给出一个计算的高效的算法:
3.2算法流程
以上给出了L_BFGS算法的原理和算法流程,这部分将给出在具体优化过程中该算法的应用。通常,需要将L_BFGS算法和线搜索方向配合起来使用,以达到不错的效果,其收敛性也能得到一定的保证。L-BFGS可以被用来求解大型的无约束优化问题(Machine Learning中的很多问题都可以用其求解,如Logistic Regress等)。
这里首先给出一种广泛使用的非精确一维线搜索算法---Wolfe非精确线搜索。非精确线搜索算法是指对目标函数来说,给出在点处沿着下降方向的步长值,使在处的函数值相比处的函数值有一定的下降。而不同的非精确一维线搜索算法通过构造不同的测试条件来达到使函数值取得一定下降的目的,本文仅给出满足(强)Wolfe条件的一维非精确线搜索算法。
下面给出满足Wolfe条件的可接受步长区间的图:
图7 Wolfe条件的可接受步长区间的图
(1) (45)
(2) (46)
强Wolfe条件:(2) (47)
这里条件1用来使处的函数值有一定的下降值,条件2用来限定处的斜率应大于处斜率的倍;而强Wolfe条件(2)的进一步限定了处斜率值,使可接受步长落在某个波谷中。
当然,在该算法具体的实现中,仅仅有这些是不够的,当每次迭代步长落在不满足(强)Wolfe条件的地方,需要使用插值算法给出新的步长值,这样才能够达到满意的结果。
下面给出Wolfe非精确一维线搜索算法的流程:
现在已经介绍了线搜索以及L_BFGS 算法的相关内容。下面给出整体算法流程,用来实现实际的最优化问题。
3.3算法收敛性分析:
根据割线方程,和应为对称正定矩阵,这在时成立。当目标函数为凸函数,成立;然而对非凸函数来说,该不等式不一定成立,但是,如果线搜索算法满足Wolfe或强Wolfe条件,将成立。此外,线搜索算法中初始步长的选择也尤为重要。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)