机器学习的各类算法中,常常需要用到最优化算法来求解参数.
这篇文章将总结一下机器学习中常用到的最优化算法,偏数理.
本文将会提到以下5种最优化算法
梯度下降方法的导出
梯度下降法最核心的部分在于:”当 在 点可微时, 在 的梯度方向是 的值增长最快的方向,且沿该方向的变化率就是梯度的模.”
那么相应的,减少最快的方向就是 在 的负梯度方向了
下面给出其证明:
方向导数衡量函数在某特定方向l上的变化率,其定义为:
其中 为方向 上一点, 为 与 的距离
可以证明(用一阶泰勒展开证),方向导数可表示为梯度与 的方向余弦的内积,即:
其中,限制 为 方向上的单位向量,它的模为1; 为梯度向量与 的夹角
这个其实挺容易理解,就是将 方向上的梯度分解到各坐标轴方向.要看详细证明的可以看<数学分析>"方向导数与梯度"章节.
注意:要使这个式子成立,有前提: rho趋于0.
因为求方向导数本来就是求 rho趋于0时的极限.这也是后面讲到的迭代步长要小的原因数学分析>
可以看到,当为0,即方向为梯度方向时,方向导数取最大值.且为梯度向量的模.
因此, 在 的梯度方向为 的值增长最快的方向.
显然,这是在欧氏度量意义下才正确.但不在欧氏空间下的梯度一般没什么意义.
下面用两个小例题解释一下什么叫” 沿着梯度方向改变”:
例一: ,求 在 处的梯度.
解:
即 处梯度方向是(2,4)
例二: ,从 发出一条射线 , 方向为(2,4),求 方向上的点.
解: 显然,答案为
看到这应该已经非常直白了,f(x)沿着梯度方向改变,就是指其自变量x沿着梯度方向移动.
注意移动的步长要足够小,因为
很自然推出梯度下降算法:
梯度下降法的收敛性
梯度下降法在”f(x)是连续可微实函数”的条件下是收敛的,且收敛于极值点
严格的数学描述及证明看<最优化理论与算法 第二版=""> 陈宝林 P285
最优化理论与算法>
上面讲的梯度下降法,我们提到它是用一阶泰勒展开来证明的
我们看一下它一阶泰勒展开是什么样子:
那如果我们用二阶泰勒展开,又会得到什么呢?我们来看一下
泰勒展开的实质是用多项式去逼近原函数.
对于梯度下降法,它只用了一阶泰勒展开,只有一次多项式的信息,因此要找到极值点只能通过方向导数,或者说斜率来寻找.
而对于二阶泰勒展开,我们有了二次多项.
二次多项式有个特点就是,它包含了极点的信息.由于该二次多项式是原函数的逼近,因此找到二次多项式的极值位置就能大概知道原函数的极值位置!
那我们在每次迭代中找近似函数的极值点就好了.
这样的优化可不是一星半点.我们可以想象,梯度下降就是往周围坡度最陡的方向一步一步走;而牛顿法是根据参照物直接找到了谷底大概在哪,然后一下子就跳了过去.
因此,牛顿法的收敛速度一般比梯度下降法快.
直观的看就是这样:
图中展示了 在x=0.7处的泰勒展开.从x=0.7开始迭代,实际极大值点在C.步长设为0.1
显然牛顿法收敛更快.
牛顿法的导出
根据上面的分析,我们进行下面推导
对f(x)进行泰勒展开,保留其二阶项,记为:
对x求偏导并令其为0:
其中,
为海赛矩阵
看,迭代公式出来了,就是
牛顿法流程
牛顿法的收敛性
非常值得注意的是,牛顿法的最后结果与初始值的选取有很大关系.
从算法提出过程来看,牛顿法是每次迭代都是为了到达近似函数的极值点,因此可能到达极大值点,也可能到达极小值点.
从迭代目标公式可以看到,迭代方向由”负梯度”与”海赛矩阵”共同构成,因此若海赛矩阵非正定,目标函数值可能会上升.若初始点远离极值点,也可能不收敛.
牛顿法收敛速度很快,但也有明显的缺陷.海赛矩阵还有可能是奇异的,根本就就不了逆.就算可逆,每次迭代都需要计算海赛矩阵的逆矩阵.当特征成千上万维的时候,计算量会非常大,是不可接受的.而且于是人们希望找到n阶矩阵来替代海赛矩阵的逆矩阵.这样得到的方法就叫拟牛顿法.不同的替代矩阵就得到不同的算法.
要想替代海赛矩阵的逆矩阵,必须先知道海赛矩阵有什么性质.
如果能找到矩阵满足上面三个条件,我们就认为可以将其作为海赛矩阵的近似.
假设我们现在已经找到了一个初始的近似矩阵 .由于每轮迭代中,海赛矩阵都会更新,因此我们也要考虑该矩阵 的迭代更新如何进行.
不妨假设:
接下来我们看一下不同的的构造.
在这之前,我们先整理一下思路.在计算 之前,我们已知的有 , , .我们希望构造出来的 与已知变量这些有关.
取正定对称矩阵.最简单的当然是单位矩阵.因此一般取 为单位矩阵.
DFP算法的导出
DFP算法核心在于寻找矩阵去逼近海赛矩阵的逆矩阵
即令其满足公式(2)
的寻找我们可以用待定系数法
由于要求 为对称矩阵,我们不妨假设:
由于这里面有四个未知数,我们对它一无所知.因此不可避免地我们起码需要作四个假设才能把它们找出来.
回过头来看待定的式子, 要满足拟牛顿条件(公式(1)),那我们两边先乘个 看看:
稍微换一下位置:
我们会发现 , 都是常数.
既然是数,我们也不妨添加两个假设:
从这两个假设中我们可以得到:
有了这两个假设,我们的式子变成了这样:
若满足拟牛顿条件,则有:
还需要两个假设,那我们可以大胆地令:
好啦,四个假设用光了,我们将四个假设代回公式(3),我们有:
由于 为对称阵, ,上面的式子可以稍微化简:
这就是我们找到的迭代目标.
只要给出一个正定对称阵作为初始矩阵 ,在之后的迭代里, 都将满足上面的三个条件.认为其可以替代海赛矩阵的逆矩阵.
这就是DFP算法的核心
DFP算法流程
DFP算法虽然很厉害,但却很快被BFGS算法代替.实践证明BFGS算法性能更好.因此也是目前流行的拟牛顿法.
BFGS算法的导出
BFGS算法核心在于寻找矩阵去逼近海赛矩阵
即令其满足公式(1).
与上面的DFP算法一样,先用待定系数法,假设
两边乘 ,然后作以下四个假设:
我们能得到迭代公式:
BFGS算法流程
L-BFGS算法看名字就知道是BFGS算法的优化.BFGS算法又有什么地方需要优化呢?
显然BFGS算法把计算量降了下来,但仍然需要储存矩阵或者.
这个矩阵是非常大的,我们来计算一下. 假设特征有十万维,每个数字占用4字节.那么这个矩阵占用的内存是:
而十万维在NLP中根本就是稀松平常的事情,甚至说远不止十万维.因此这就是需要优化的地方.
L-BFGS算法的思想是不储存或,而是用的时候再通过递推公式计算.因此需要储存的只有, 和 .
甚至仅储存最新的前m个:
和
具体的计算推导可以参考这篇文章 传送门.
关于优化方法就讲到这啦.总结一下.
这些算法都只能找到局部极小值点.
要确保找到的是全局最小值,其充分条件是函数为光滑凸函数(Convex function).
若不是光滑凸函数,可以考虑近似或转换为光滑凸函数.
要想找到任意函数的最小值,可以考虑一些智能优化算法如:
在这里就不展开讲了.
好啦,文章就到这啦.
页面下方有我的邮箱.如果有不当的地方欢迎指出.
E-mail: liangyaorong1995@outlook.com