1、 浅谈凸优化问题中的 Bregman 迭代算法 分类: 图像处理 信号处理 2013-06-08 17:59 1117 人阅读 评论(3) 收藏 举报 目录 (?)+对于搞图像处理的人而言,不懂变分法,基本上,就没法读懂图像处理的一些经典文献。当然,这已经是 10 年之前的事情了。现在,如果不懂得 Bregman 迭代算法,也就没法读懂最近几年以来发表的图像处理的前沿论文了。国内的参考文献,基本上都是直接引用 Bregman 迭代算法本身,而对于其原理基本上找不到较为详细的论述。本文简要叙述当前流行的 Bregman 迭代算法的一些原理。1. 简介近年来,由于压缩感知的引入,L1 正则化优化问
2、题引起人们广泛的关注。压缩感知,允许通过少量的数据就可以重建图像信号。L1 正则化问题是凸优化中的经典课题,用传统的方法难以求解。我们先从经典的图像复原问题引入:在图像复原中,一种通用的模型可以描述如下: 我们目标是从观测到的图像 f,寻找未知的真实图像 u,u 是 n 维向量空间中的元素,f 是 m 维向量空间中的元素。 f 在压缩感知的术语叫做测量信号。 是高斯白噪声其方差为 sigma2。A 是线性算子,例如反卷积问题中的卷积算子,压缩感知中则是子采样测量算子。上述方程中,我们仅仅知道 f,其它变量都不知道的。而且这种问题通常情况都是病态的,通过引入正则项可以使之成为良态的。正则化方法假
3、定对未知的参数 u 引入一个先验的假设,例如稀疏性,平滑性。正则化问题的常见方法 Tikhonov 方法,它通过求解下面的优化问题:其中 mu 是一个大于零的标量,事先设定的常数,用于权衡观测图像 f 和正则项之间的平衡。双绝对值符号是 L2 范数。下面,为了引入 Bregman 迭代算法,需要对两个重要的概念进行描述。2. Bregman 距离注意这个定义,它是对泛函 J 在 u 点的 subgradient 的定义,p点是其对偶空间的中的某一点。subgradient 可以翻译为次梯度,子梯度,弱梯度等。等式左边最右边一项是内积运算。如果泛函 J 是简单的一元函数,则就是两个实数相乘。次梯
4、度有什么好处呢?对于一般的导数定义,例如 y=|x|在 0 点是不可导的,但是对于次梯度,它是存在的。上面的这个定义就是 Bregman 距离的定义。对于凸函数两个点 u,v之间的 Bregman 距离,等于其函数值之差,再减去其次梯度点 p 与自变量之差的内积。要注意的是这个距离不满足对称性,这和一般的泛函分析中距离定义是不一样的。3. Bregman 迭代算法 Bregman 迭代算法可以高效的求解下面的泛函的最小 上式中的第一项 J,定义为从 X 到 R 的泛函,其定义域 X 是凸集也是闭集。第二项 H,定义为从 X 到 R 的非负可微泛函, f 是已知量,并且通常是一个观测图像的数据,
5、所以 f 是矩阵或者向量。上述泛函会根据具体问题的不同具有不同的具体表达式。例如,对于简介中的图像复原啊问题,J(u)就是平滑先验约束,是正则化项;而 H 则是数据项。Bregman 迭代算法首先是初始化相关的参数为零,再迭代公式 u,其左边一项是泛函 J 的 Bregman 距离。再来看 p 点的迭代公式,其最右边一项是泛函 H 的梯度。其迭代一次产生的输出是公式 3.2,经过多次的迭代,就能够收敛到真实的最优解。这个证明过程可以参考后面的文献。对于具体的问题,泛函 3.1 定义的具体形式是不同的。例如对于压缩感知使用的基追踪算法,J 是 L1 范数。而对于图像去噪问题,可能就是u 的梯度
6、L1 范数,同时 A 也变成了恒等算子了。4. 线性 Bregman 迭代算法Bregman 迭代算法的每一步迭代都要求解泛函 4.1 的最小值,这一步的计算代价是很高的。线性 Bregman 迭代的思路是对泛函 4.1 的第二项进行线性展开,根据矩阵函数的泰勒公式,泛函 4.1 的第二项可以展开为上面 4.2 的形式。注意,上述公式 4.2 省略了泰勒公式中二次项。把二次项加上,带入前面基本的 Bregman 迭代算法公式的第一步,我们得到公式 4.3。如果我们计算 4.3 和 4.4 中间那个表达式,比较其相同项,很容易得到公式4.4.如果我们考虑基追踪算法,则 H 等于 |Au - f|
7、2 /2, 将 H 的导数带入公式 4.4,我们得到公式 4.5, 公式 4.6 是基本 Bregman 迭代算法的第二步,注意上述 4.6 公式中 u 的上标是错的,应该改为 k+1 ,这样才可能得到公式 4.7,公式 4.8,4.9, 4.10, 4.11 都是显而易见的。下面我们把 4.11 和前面定义的 Bregman 距离带入到 4.5 里面去,具体如下:在上面的推导中,u_k 是常量,C 是与 u_k 有关的一个常量,将上式对 u 求导,由于有绝对值项,所以要分开讨论,得到上面这个分段表达式。进一步整理得到:这里,我们定义了一个 shrink 操作,这个收缩算子很重要,在后面所有的
8、 Bregman 算法中都有这个操作。根据这个操作,我们导出下面的表达式,并最终把线性 Bregman 迭代算法总结如下:5. Split Bregman 算法Split Bregman 算法是另一种高效的算法。我们已经知道,Bregman 迭代算法用于求解下面的凸优化问题:我们可以把上面的表达式变换为下面的等价形式:这一步,看似是多此一举,但是 Bregman 经过推导,得出了一种高效的迭代算法,分裂 Bregman 迭代。上面的 5.2 是一个等式约束优化问题,把它转化为无约束优化问题如下:上面这个公式中,优化变量多了一个 d。做如下的变量替换:如果我们对 5.5,应用最前面提到 Breg
9、man 迭代算法,很容易写出下面的迭代序列:式 5.9 是根据 5-6 按照 Bregman 距离展开的结果。式 5.7,5.7 后面一项是对 5-5 分别对 u,d 求其偏导数得到。如果我们对 5.7 迭代展开,于是得到:同理,对于 5.8,有注意到式 5.11 和 5.12 有一个公共的 SIGMA 求和项,把它重新定义如下:把 5.14,5.15 带入 5.9,具体如下:在对 5.16 的化简中,要注意的是 u,d 为变量,其它看做常量。到此,我们可以给出 Split Bregman 迭代算法的通用优化步骤:对 u 的迭代,把 u 看做自变量,其它所有变量看做常数,对 d 的迭代则是 d 为自变量,其它变量都是常数。 之所以说是通用迭代优化过程,是因为对于具体的问题,其迭代的具体表达式不同。例如,对于基于各向异性 TV 的去噪模型,各向同性 TV 去噪模型,其迭代的具体表达式是不同的。最后列出本文的参考文献如下:http:/