CG : Conjugate Gradient Method

前几天学习了ICA模型,发现不同的优化方法对训练结果影响很大,就想学习下比较流行的优化方法:SGD , BFGS , CG,CG以前完全没有接触过,所以就从CG开始,各种数学推导,搞得我头都大了,从上周中下看到这周初,终于可以理出个思路来了。废话不多说了,直接进入主题。

 

共轭方向: 若有两个向量X,Y,满足如下关系:

  XTAY = 0 ,其中A是n*n的正定阵,则 称X和Y是关于A共轭的,X,Y称为共轭方向。若<X,Y> = 0,则X,Y正交,因此可以看出共夯是正交的推广。

共轭向量:

则称这m个向量是A的共轭向量。如果A不n维单位阵,则称这m个为正交向量。

使用共轭解决优化算法的原理:

  

  

  使用差分表示式(3-6-9)得:

  

  经过K+1次迭代后,Xk+1->X*,Xk+1为目标函数沿Sk方向的一个极小点,则有

对于优化算法来说,就是如何确定下一步迭代的X。那么如果能够构造出一系列共轭向量Sk(K=1,2,....,n-1),则可以求出 , 就可以不断的得到下一步的迭代值X,对于二次问题最终可以求得最优解。

 

构造共轭方向的一般方法:

  对于n维空间来说,n个单位向量是线性无关的,该n维空间中的任意向量可由这n个单位向量来表示。那么在n维空间中构造线性无关的共轭向量,共轭向量也可以由这一组单位向量的线性组合来表示。

  

  注:由于Sk与S1, S2 ,....., SK-1都是共轭向量,因此Sk为前k-1个共轭向量的线性组合。

共轭梯度法:

  共轭梯度法是一种构造共轭方向的方法。与前面介绍的构造共轭方向的方法不同的是,前面的方法使用单位向量作为基向量,而共轭梯度法使用每次迭代的梯度作为基向量作为基向量来构造一组共轭方向:

  

  如果目标函数是凸优化问题,那么经过n次迭代后必然可以收敛到极小点。

从式(3-6-25)与式(3-6-26)可以看出每次计算都需要计算及海赛矩阵A,并且需要保存前K-1个共轭方向及梯度方向,在实用性上存在困难,并且加大了计算负担,因此为了避免在计算过程中出现A,现在对以上公式作一些简化。

共轭梯度优化方法:

  这部分主要证明两个问题:

  1、Sk只与Xk处的梯度及Sk-1有关,即

  2、与A无关

 

  下面就是一堆数学推导了,如果不感兴趣可以不看。。

  

  可见在迭代过程中,前后两次迭代点的梯度之差与其他任一共轭方向是正交的,即

  

  上式中,gj+1是迭代点Xj+1   处的梯度,而Xj+1是沿Sk方向取得的最小值。接下来证,即点Xj+1处的梯度与第j次搜索方向是正交的。

    (3-6-34)

,则

   (式 3-6-34  取最小值,则导数为0 )

dk为第k+1次的搜索方向,因此点Xk+1处的梯度与第k次搜索方向是正交的,即。(gj+1是Xj+1处的梯度,Sj为第j次的搜索方向)。

因此由式(3-6-33)得 ,也就是说,某迭代点的梯度方向与此点以前各点的搜索方向均是正交的。再回到构造共轭方向的问题上来

那么,到这里以上两个问题得证,即共轭方向的构造与海森矩阵A无关,并且在迭代过程中只需存储梯度方向与搜索方向,计算仅仅包含向量间的点乘运算,复杂度为O(N^2)。

 

看着上面的方法貌似还有点晕,本人用较通俗的方法描述下CG优化方法:

  1. 任选初始点X0
  2.  迭代 
    1. 对于迭代点Xk,计算gk, 再根据式(3-6-49)计算 (与gk,gk-1有关)
    2. 根据式(3-6-44)计算Sk (与gk ,  , Sk-1有关 )
    3. 对于每个迭代点及共轭方向求, 使
  3. 判断是否收敛,若是停机,否则继续迭代直到满足条件

不过作者到现在还不晓得共轭的具体含义,在一般数学中共轭有对称的意思,如复数中的共轭,一对共轭复数长度相同,但复部相反(1+2i 与 1-2i ),共轭矩阵也类似,但共轭向量的具体物理意义该怎么解释呢?以后还得继续探究

 future work:

  关于cg方法与SGD及BFGS方法的区别及应用环境,还得再通过论文继续学习

 

 参考资料:http://wenku.baidu.com/link?url=ZVTlNTc-StnJrfMZjJ5OPk_2s_mmz27IN_yOzOUdUApBy6cbzcWqvLynUzmlVs6984nkYCUqmNYmMqsi4IagN3iw9kA6lrOsHu8Y4KpWKMm###

 

posted @ 2014-12-15 16:06  dupuleng  阅读(1783)  评论(0)    收藏  举报