Split Bregman算法读书笔记

一、预备知识  

    假设一元函数z=f(u)的极小值存在,且函数f关于u可导,我们如何求函数z的极小值呢?应用高数的基本结果,显然要求解df/du=0,求解出u的值,然后代入到一元函数中即可。

      如果二元函数z=f(u,v)呢?将一元函数的情形推广,二元函数情形无非是求解一个联立方程组

将得到的结果代入到函数即可。

      以上是针对极值函数十分理想的情况下的结果。但是在实际问题的求解中,可能面临以下的问题:

  1. 如果函数J关于u或者v的偏导数不存在怎么办?

    一个可行的方法是将导数的定义进行扩充,以保证其存在性。而常用的一种扩充范数为subgradient(中文翻译成次微分或次导数或次切线),记作 。它有如下性质:对于凸函数而言,subgradient一定是非空的,即它一定存在;对于凸函数,如果它在u点处有极小值,充要条件是0 .

      补充:(1)关于凸函数的定义和几何意义

              详情请wiki之 

            (2)关于subgradient的定义

            

      凸函数(蓝)和x0处的“次切线”(红)

           注意:不同于一般的导数在某点处是一个元素,此时在某点处的次导数是一个集合。

          详情wiki之

       2. 如果函数导数形式很复杂,以至于对应的方程组无法求解怎么办?

       这个时候,可以采用交替迭代法。拿刚才的 二元函数来说明交替迭代法。我们可以先给出u的值,记作u_0,然后求此时函数的极小值,显然,求解df(u_0,v)/dv=0即可,求得的v值记为v_0;固定v_0,求函数关于u的极小值,即求解df(u,v_0)/du=0,将求得的结果记为u_1,接着固定u,求解v,固定v,求解u,知道关于u和v的数列收敛为止。

      补充:交替迭代法经常用于优化问题的求解中,如冯象初的涉及到split Bregman算法的两篇文章,以及Tom Goldstein那篇PPT中的第11页中Step 1和Step 2。

       至于三元及三元以上的函数可以类似讨论。而实际的优化问题常常涉及泛函的极值,这个时候,关于函数极值的方法可以类似的移过来,其几何意义和一些基本的性质保持不变。

二.Split Bregman算法

     原始的Bregman算法,可以用来求解以下的优化问题:

              min  J(u)+H(u,f)

其中泛函:J(u)和H(u,f)关于u是非负凸函数,而且要求H(u,f)可导。

     如果忽略泛函前面的正常数(它不影响函数的上述性质),则

   (1)在CS中,

   (2)在ROF中,

 

幸运的是,上述两种情况下涉及到的J(u)和H(u,f)都满足优化问题中关于函数的要求。

J Bush的文章P8中给出了相应的算法: 

关于该算法的几点说明:

    (1)怎么计算?

    这涉及到泛函中两点u和v之间的Bregman距离的定义,见J Bush的文章P7中给出了定义。

   (2)算法适定吗?收敛性能保证吗?

    关于适定性,J Bush的文章P9 Proposition 3.1中说到,只要函数满足一定的条件,算法是一个适定的算法。而关于收敛性证明,参见文章中的3.1.

补充:证明中的一个关键,P12 (3.8)和证明(3.4)的一个技巧:该技巧在NMF算法的收敛性证明中也提及过。

   (3)如何求解?

 

     一种方法是,即对于凸泛函,如果它在u点处有极小值,充要条件是0 . 文章中关于TV Denoising的算法有一步就是基于此的。另一种方法是针对一种特殊情形

文中称为线性的Bregman方法。该方法将H(u)在u_k这一点做Taylor展开,只展开到二次项,且二次项前面的系数用一个小的正常数来代替,然后利用Shrinkage的方法得到一个迭代算法,详见J Bush的文章P16或P17。

补充几点:一,一个很自然的想法,使用Toylar展开后的近似和原函数相比,肯定存在一定的误差,这个误差对算法没有影响吗?在文章中(参见S.Osher的《Fast Linearized 
Bregman Iteration for Compressive Sensing and SparseDenoising》一文中P5给出的结果)给出的证明结果可以看出,虽然这一步采用了近似,但是最后的结果恰好是
我们需要的。这一手法在Steffensen加速方法中也用到; 二,针对算法线性Bregman算法,迭代进行一定的次数后,迭代速度基本处于停滞状态(称为staircase或者period of
stagnation)。针对这一情况,文中给出Kicking加速方法;三,P15 (4.6)有一处笔误,将H(u_k)改为H(u_{k+1})。
 

    Split Bregman算法可以用于求解下列泛函极值问题:              

    

其中和H(u)都是关于u的泛函。

     补充:在Tom Goldstein的PPT中说这类问题是一个Hard问题,而如果采用Split技巧后就可以将其转化为Bregman迭代解决的泛函极值问题,从而问题得到解决。

Split的过程:

 

 

最后转化得到的目标泛函和用原始的Bregman算法求解的泛函min J(u)+H(u)比较,只要目标泛函中的泛函满足相应的条件,即要求其实凸泛函,则Bregman算法可以应用到该优化目标的求解,只不过多了一维自变量而已。

相应的Bregman算法求解过程如P21 (5.6)-(5.8),但是在具体的编程实现中,常常将(5.6)转化为P22 (5.16)的求解。具体的实现过程参见P22。

     补充:使用Split算法后的目标泛函和原问题的目标泛函相比,貌似更麻烦了一些,因为泛函多了一个自变量。和传统的降维方法不一样,这里采用升维的方法,将低维的复杂问题转化 为高维的相对简单的问题,神经网络中的SVM神经网络也采用过类似的技巧,将低维的非线性可分问题转化为高维的线性可分问题来求解。

个人的一点想法:

P23 中(5.20)

 

中涉及到的\lambda和\mu两个参数,能否将其中的\mu设置为两个不同的参数呢?   

 

参考文献:

[1] Jacqueline Bush. Bregman Algorithms. University of Callfornia, 2011.

[2] Stanley Osher, Yu Mao, Bin Dong,Wotao Yin. Fast linearized Bregman iteration for compressive sensing and sparse denoising. 2011.

[3] Tom Goldstein. The split Bregman method for L1-regularized problems. 2008.(PPT)

[4] Tom Goldstein and Stanley Osher. The split Bregman method for L1- regularized problems. SIAM J. Imaging Sci., 2(2):323–343, 2009. (paper)

 

 

 

 

 

 

 

 

posted on 2014-02-17 20:31  caicailiu  阅读(3405)  评论(0)    收藏  举报