浅谈共轭梯度法的原理

       共轭梯度法作为优化算法中常见算法,在很多基于梯度优化的机器学习算法中可以见到它的身影,比如在稀疏编码(sparsenet)中。本文主要参考清华大学出版社,陈宝林编写的最优化教材中对共轭梯度的介绍。

       写这个文章的起源是我最近在思考一个简单的函数:.........................................1

或者更加复杂的二次型函数:....................................2,在这里x拔是数据中心

第一个问题是如何保证输出 f 始终大于0,由线性代数的知识知道我们知道保证矩阵A是正定的,而如果A是半正定的,那么就能保证输出非负。第二个问题就是这种二次型函数的几何意义。先从最简单的二次型函数说起,   ............3

其中。将公式3写成公式2的形式为,其中。这个函数的形状是什么样子的呢?首先为了保证非负,我们将a取值分别为-1,0,1三个数值。然后,我们画出函数形状如→:

浅谈共轭梯度法的原理_第1张图片  在图中,由于A是2*2的方阵,我们得到的是三个三维的曲面。曲面图像都位于x-y平面的上方,说明了非负性。对于每一层,代表的是不同的a数值下的曲面(共3层)。而在某一层上,每一个等值线(也就是等高线)代表的是不同的输出值,我们都已经在图中标了出来,我们发现曲面投影到x-y平面是一个旋转之后的椭圆(如下)。

浅谈共轭梯度法的原理_第2张图片

               而推广更一般形式的,当A的维数大于2时候就会得到超曲面,这个时候的等值线(准确的讲是等值面)的形式为:这个是以x拔为中心的椭球面。由于在x拔处的梯度为。A正定,从而x拔是函数的极小点(记住这个正是我们想要的)。假设在这个椭球面上(也就是等值面上)有一个点

,那么在这个点处,等值面的法向量为,还是举二维的例子

浅谈共轭梯度法的原理_第3张图片

我们假设d(1)是在点处的切向量,d(2)是沿着该点和中心点的连线的方向的向量,即

。法向量垂直于平面的任何向量,自然也垂直于切向量,我们有:

浅谈共轭梯度法的原理_第4张图片对于last equation 我们说d(1) 和d(2)关于A是共轭的。

写到这儿终于将梯度和共轭都说出来了。对于这个last equation我们认为二维等值线上的任意一点处的切向量是与这一点的指向极小值点的向量关于A共轭,也就意味着二次函数的话经过两次迭代就可以找出极小值点。对于多维的情况,也是能在有限步内收敛到极小值点的。具体证明可以参考教材。

     于是我们在进行最优化中极小值的寻找的时候,我们一直寻找极小值点,而可以先找到指向它的方向,寻找方向还得寻找与之共轭的方向,与之共轭的方向还可以通过与该方向共轭的方向来获得,这样的依次往前推,最后我们在开始共轭梯度之前首先是计算初始点的最速下降方向。

     下面基于上述思路介绍FR共轭梯度法。给定一个初始点x(1)计算它的梯度d(1),然后将这个d(1)作为切向量方向,沿它的方向搜索得到x(2),计算x(2)处的梯度g(2),利用g(2)和d(1)构造新的搜索方向d(2),一次下去。这个过程需要计算两个量,一个是每一步的搜索步长,一个是下一步的搜索方向。搜索步长采用比较通用的计算公式,而在计算下一步的搜索方向的时候 体现出了共轭的特点。

  具体算法实现步骤和实现参考:http://blog.sciencenet.cn/blog-54276-569356.html。


你可能感兴趣的:(机器学习)