上一节笔记:数值优化(6)——拟牛顿法:BFGS,DFP,DM条件
————————————————————————————————————
大家好!首先跟大家说一件事情,就是受到疫情的影响,我今年将不前往CMU攻读硕士,而开始入职从事偏DS的算法工程师的工作~最近因为这些事情也比较忙,在更新的进度上有了较大的滞后,这里向大家表示抱歉!在这一年专栏的更新会有什么样的一个倾斜,目前我还没有一个头绪。但我相信,这丝毫不会影响大家对于专栏更新的期待哈哈哈。
这一节我们主要会关注用于求解大规模问题的优化算法。这一节也是有关无约束优化的最后一节。之后我们会开始介绍一些更加偏应用和实际的带约束规划的内容。
需要强调的是,我们的这一个系列关注的更多的是最优化,不是凸优化,会更加偏重于数值算法,而不是凸分析的理论。意味着大家可能最关心的有关拉格朗日乘数法和对偶形式的内容,其实不会在这个系列出现(但是KKT条件是会有的,因为我们很多的算法依赖于这个条件)。但是没有关系,凸优化的相关内容必然也会在专栏中出现,只是可能需要很长一段时间,所以大家倒也不必太担心。如果对于对偶理论等内容比较好奇,可以参考一下这个
https://zhuanlan.zhihu.com/p/52544386
好的不说废话了,我们开始吧。
提到大规模问题必然要提到机器学习这个领域。比方说对于回归模型,如果我们利用梯度下降法去优化函数
那么必然会依赖到所有的数据点(因为
就是它的梯度,
是一个与所有样本都有关的量)。那么如果你每一次的迭代,都需要计算到所有的样本点,当样本数到达足够大的量级的时候,这个时间的开销就会难以承受。
要解决这个问题,工业界一般使用的是SGD(随机梯度下降)和mini-batch(小批量下降),相当于说每一次更新只会采取一个样本/一小部分样本。这样的思想除了在梯度下降,在聚类中心的计算中(也就是K-means)也会有用到,具体的可以参考吴恩达Coursera的课程。
但是大规模问题并不是只有一种的,事实上,如果我们说优化模型长下面这个样子
那么之前的例子就是
会特别大。但是如果是
特别大呢?这种情况下,对于每一个数据点,它都涵盖很多信息,这个时候很多方法就不再奏效了。比方说在第5节所提到的牛顿CG方法,这个方法的实现可以依赖海塞矩阵的作用(就是矩阵与向量的相乘,这样子可以避免直接计算海塞矩阵,比方说
这个量,如果你知道了
和
就可以计算,并不需要知道
是什么)。所以如果说海塞矩阵比较稀疏,计算作用的复杂度就会很低,那么这个方法就可行。反过来,如果海塞矩阵很稠密,那就完全的不可行了。
事实上,按照这个思维来看,对于上一节我们刚提到的拟牛顿法,很多时候就不奏效了,比方说BFGS方法就需要依赖我们每一步计算的对称正定矩阵,如果说
比较大,那么储存这个矩阵需要依赖
的一个储存空间,这在现实中是做不到的。
到此我们算是介绍了大规模问题的主要的两种情况,我们后面的方法主要关注的问题,都是第二种问题。
拟牛顿方法算是在一次收敛速度和二次收敛速度之间找了一个平衡,换句话说,我们希望对方法做一些修改,使得新的方法依然能够保证收敛速度,且可以应用于大规模问题。这就产生了限制空间的拟牛顿方法(Limited Memory Quasi-Newton Methods)。
我们先回顾一下拟牛顿法。对于一般的拟牛顿法,其核心思想可以写成
其中
,
。也就是说,通过给定了这几个量,我们会希望推出下一个矩阵
是什么。有了这个思路,我们自然会想,既然是限制空间了,那么可以产生的信息一定会受限,也就是说,如果我们以迭代的思维把这个函数写开,正常情况下就是
现在我们要限制空间,其含义就是保存部分数据。那么这个时候,迭代就会变成
你可以看出来,我们相当于保留了最近的
组数据。对于更加靠后的数据,我们就丢弃不要了。这样的想法其实也不难理解,相信你知道牛顿法的局部二次收敛速度只有在迭代点足够靠近极值点的时候才会存在。而优化算法的迭代过程其实刚开始一般都会偏离的很远,所以丢弃一些足够远的数据无伤大雅。
丢弃数据之后必然会产生一个问题就是这里的
应该是什么?很显然,我们需要找一个已知的矩阵代替它。这就是限制空间拟牛顿法的思路。
还是一样,我们先提一下BFGS方法。如果变成了限制空间的情况,这个方法就会变成LBFGS。
在上一节我们提过一般情况下的BFGS方法,它利用的是线搜索方法的框架。那么在这里我们依然考虑的是这个框架,所以我们要选取的搜索方向其实就是
有一件非常离谱的事情在于,通过两次循环即可计算出这个搜索方向,并且不需要计算出
。我们简单提一下这个思路和算法,但不会给出详细的计算过程。
回顾一下上一节所提到的带逆形式的BFGS更新公式
我们令
,
,我们就可以得到
我们如果代入
,就可以得到
所以可以一直按照这个思路写下去,一直写到最后的
,再靠后的数据就丢弃了。而这个矩阵我们会用一个简单的
代替。
好的,接下来我们祭出这个计算的方法,这个方法就可以很好地计算出
这个量
它的计算复杂度为
。我们建议大家代入表达式一步一步地计算一遍。如果你没有亲手一步一步的算一遍,你可能也不会相信这个方法和我们上面写的东西居然是完全一样的……
那么现在,问题就落在了我们的对于
,也就是
的选取上。一般来说,取单位阵的倍数(也就是数量矩阵)是方便计算的,所以一般来说,我们设置为
其中
为BB步长(见第3节)。使用BB步长的原因在于,如果我们将其理解为我们正常的最速下降法,取
其实本质上就是在取初始步长。因此取成BB步长是有依据的,当然了它在之后的证明中也起到了作用。
一般来说,BB2是使用的比较多的,也就是一般来说,我们有
这里还有个细节是我们使用的是最近一步的BB步长。这里虽然我们对应的矩阵
不是最近一步,但是我们希望这个我们代替的矩阵,可以更好地反映当前我们迭代的函数的海塞矩阵特征值的情况,这就是我们如此定义的原因。
那么到此为止,我们就可以放出它的算法部分了。
这里的two-loop recursion,就是我们上面所写的那个循环。
最后,我们来看一下LBFGS方法的收敛性分析。我们主要还是想说的是它的全局收敛性。体现在下面这个定理中。
Theorem 1: 设
为初值,
,
凸,并且存在
,使得
对任意的
成立。那么LBFGS更新会使得
收敛到
的极小值点
。
我们证明一下这个结论。事实上,主要的证明过程都和上一节证明BFGS的过程相似。
我们考虑同样的BFGS的原版更新(也就是说,我们考虑的是
的公式,不是
的),这个时候自然就就会有
这个地方要注意的是我们把
改成了
。这是因为我们的更新公式不再是更新到
,而是更新到
就停止了。所以为了体现这个变化,我们用
表示它。
设
,
(除了改了下标记以外,都和之前的证明没有任何本质区别),并设
,那么同样的思路我们可以推导出
因此我们迭代
步(只保留
步的信息),就可以得到
这里
。
到此情况开始有一些变化了。我们思考一下之前的证明是如何做的?它是利用迭代不可能无限做下去,使得最终推出
。那么在这里,我们自然也是希望说明这一个条件是成立的,那会怎么利用上这个定理呢?
首先我们注意到其实这个条件的本质就是说明搜索方向不能取得太差。换句话说,我们的搜索方向对应的对称正定的矩阵不能够太过于病态,也就是条件数不能没有上界。这个思路会引导我们去使用第2节的Theorem 5
也就是要证明它的条件数存在上界。而我们看到,其实
这个函数本质就是一个条件数的估计,因为
这个函数如果有界,那么
的各个特征值就一定有界(想想为什么?),所以基于这个思考,只要证明
有界就可以了,而这是非常容易的,因为我们使用的
是一个数量矩阵,这个系数是BB步长,它的本质是一个特征值的加权平均(要理解这个结论,可以考虑二次凸问题的情况,这个情况下
,代入即可发现结论)。因此我们有理由相信存在
,使得
通过这个,我们就可以推出来
,其中
为这个矩阵的各个特征值。也就可以推出来,存在
,使得
这也就是证明了存在
,使得
,那么自然全局收敛性就得到了保证。
这个部分的证明其实很多部分都是上一节内容。而后半部分的推论思考则需要花时间消化一下。关于它的局部收敛性,其实结论和上一节的结论无异,也就是说局部超线性收敛速度依然存在。
最后提一下它的实操。其实我们可以看出,要求海塞矩阵凸的条件依然是存在的,也就是说非凸问题它是不保证全局收敛性的。因此上一节提到的各种修正,到这一节依然是需要继续使用的,具体的可以参考上一节的相关内容。
到此,我们就介绍好了LBFGS的全部内容。
我们在上一节有提到过SR1方法,事实上限制空间的SR1方法(也即LSR1方法)也在近期被提出,但是远不如LBFGS历史悠久了。它也是存在一个很有趣的展开表示使得它可以通过修正,在大规模的情况下被使用。
我们回顾一下SR1方法的更新公式,其实就是
如果我们设
,那么会有
非常牛逼的地方在于这个公式也被人发现了一个通用的限制空间版本的更新公式,就是下面的这个定理。
Theorem 2: 设
,
,且
,且
定义为
设
为对称阵,且
,那么有下面的公式成立
并且
可逆。
这个定理我们不证明,具体的可以参考Source上的BKS96(对应年份和名字首字母)(好吧我似乎应该很早就把每一个地方要用的source文献标记一下位置……)。
我们可以看出,这个方法与我们上面写的LBFGS方法不同的地方在于,我们这里给出了一个直接可以一步到位,从
到
的公式。所以我们的目标自然也就是修改
为
。有了LBFGS的经验,我们的修改方法也应运而出,考虑BB步长。现实中一般采用
这里要注意的是,因为我们关注的问题一般都不是纯凸的问题,所以很多情况下,好的,它的更新公式介绍完了,但是它的算法过程不是很简单。上一节我们说过,SR1方法一般是使用信赖域框架解决的。换句话说我们如何解对应的信赖域子问题?
我们看一下我们的信赖域子问题,其实本质上就是下面这个问题
但是这里的
,其中
对称非奇异,
(我们修改了标记,所以要对应上面的那个定理的表达式来看)。所以要解这个子问题,联想到第5节的Proposition 1,我们其实就需要找到这样的
,使得
为对称半正定的矩阵。
事实上,这就相当于一方面找到一个合适的
,也就是求
。再进一步找到一个合适的
,也就是求解
。你也能看出来,总的来说就是希望
。
同时要保证
是可行解。
要化简上面的式子,这个地方的处理确实需要一点技巧。我们注意到
的一部分是一个半正定的矩阵,所以可以做的一件事情是对它做一个合同变换,使得它的特征值被暴露出来。为什么要做这件事我们到之后再解释。
为了找到合同变换,我们需要想尽办法构造一些正交矩阵,所以我们的第一件事就是做QR分解。这里想到QR分解,是因为我们的矩阵
并不是一个方阵。再然后,我们保留
,对剩下的部分再做一次谱分解。具体来说就是
然后考虑令
即可。
但是对于
来说,构造并没有结束。我们有说过,如果说我们有
为一般的谱分解,那么
,但是这是要
的大小和
的相同才可以做到。在这里因为
的大小并不是
而是
(想想为什么),所以必须要对特征值补0,才可以进行我们上面的操作。在这个时候,
因为只是列正交矩阵,要想做到谱分解那一步,还需要补上正交补空间的那一部分。总体来说我们可以写成
这个时候,新的矩阵
就是一个成熟的正交矩阵啦!为了讨论的方便,后面我们把
的这一部分拉出来,假设
的
个特征值是按从小到大重新排列的,重新写成一个特征值矩阵
。
在做了特征值分解之后,我们所关注的函数的书写都不再抽象复杂了。因为这个时候,我们有
(注意我们有
)。有了这个之后,注意到如果我们记
且
,就可以利用补空间的正交性和勾股定理,得到
这样的话,我们可以看到,因为我们所有的
都是非负的,这也意味着,只要我们的
,这个函数就会变成一个关于
的增函数。在有增函数的条件下,想得到根是极其容易的,二分法,牛顿法都是很好的主意(这里有一个思想是求根和求函数极值在某些情况下是等价的)。
现在,我们来观察一下,我们的一个好的思路是针对信赖域方法的第二个式子,也就是
来找突破口。如果说我们有
,也就是说,这个最优的解位于球的内部。那么这个时候,很容易找到
,这个时候直接令
即可。
反过来,如果说
,那么这个时候,如果有
,那么这个时候因为满足信赖域条件的
是存在的,并且非负,因此根据这个论断就不难得出,一定存在一个
满足
,这个
就是我们要的值。如果说
,这个时候,其实相当于说
就是我们要的解了,这个时候直接带入即可,但要注意
不再是一个可逆阵,换句话说要考虑广义逆的存在。也就是
。最后如果说
,那么这个时候没辙了,我们很显然不能够再通过降低
来缩小
了。所以没啥办法,我们也只能换一个思路。
注意看一下
的写法,如果考虑取
,那么其实,当我们的
的时候,分母中的某一项的分母会趋于0,使得分母趋于无穷大,整个式子会趋于
。但注意到这个是在对应的分子不为0的情况下才存在的,换句话说,出现
的反常现象,其实就是
或
的模长为0导致的,换句话说就是我们的
对应的特征向量,与
这个方向正交了。这一点说明我们需要人工添加这个向量,一方面不会影响
对最小值的收敛方向(因为与梯度正交的方向移动多少,函数值都不会下降),另一方面也可以降低
的值,所以这样的话,我们的目标其实就是
,只要我们设
使得
。
好的,我们用了非常多的文字描述了我们的结果,相信大家在理解了这些之后,就不会再对下面的算法过程感到陌生。
接下来,我们给出这个算法的合理性,也就是说我们要证明,这个算法是能够达到一定程度上的收敛性的。
Theorem 3: 设
。并设
的梯度是Lipschitz连续的。也就是说对于任意的
,我们都有
。并且对于任意的
,我们都有
,其中
为常数,且
为算法过程中的Hessian的估计。那么我们有
要想说清楚这个证明,理解之前传统的SR1的证明自然是必不可少的。其实如果大家有观察我们的上一节的Theorem 1,我们可以看到,除去要求我们的
一致的有一个上界以外,其他的条件都是相同的,因此实际上如果我们能够说明
的这个性质,就足够完成这里的证明。
首先我们注意到,根据条件我们可以得到
,所以有
这个东西就说明我们可以加上这样的条件,因为我们需要使用数学归纳法来解决这样的问题。同时因为我们需要说明一个一致的上界,所以对于之前的几步,也就是“限制空间”还没有填满的时候,我们是不用多过担心的(想想为什么?)。换句话说,我们可以人工的设置
,然后以递推和归纳的方式证明。
首先我们来计算
,注意到
所以我们会有
通过这样的变换,我们大胆的做一个推断,就是说我们认为会有
如果这个成立的话,要验证它也就是一步归纳法,因为我们有
(这中间其实跳了挺多步的,但是如果你看过前面的推导,你不会对这些感到困难)所以不难推导出我们的推断,换句话说,我们的所有的
最大也不会超过我们所要求的
,因为我们不管做了多少步,都只会保留很少的几步,这样的操作保证了只要我们的运算中不会让模长爆破,有界的要求就可以达到。所以这样的话,证明就算完成了,因为剩下的部分都和上一节的Theorem 1一模一样了。
好的,到此我们算是介绍好了限制空间的SR1方法,而且更重要的是,我们也算正式的结束了对于无约束优化的方法的介绍。
本节我们主要关注在了两个方法:限制空间的BFGS和SR1方法。而它们性质的证明都充满了浓浓的限制空间的意味。因为限制空间的特性,我们得以在大规模机器学习中看到这些方法(比方说深度学习中的优化算法,就有一个是LBFGS)。事实上这么多方法说完,相信大家对于数值优化也算有了一定的了解,不过这才只是刚刚说完无约束优化的部分,后面我们会开始进入新的方向,介绍一些新的方法与思路。