本文简要叙述当前流行的Bregman迭代算法的一些原理。

1、简介

近年来,由于压缩感知的引入,L1正则化优化问题引起人们广泛的关注。压缩感知,允许通过少量的数据就可以重建图像信号。L1正则化问题是凸优化中的经典课题,用传统的方法难以求解。我们先从经典的图像复原问题引入:

在图像复原中,一种通用的模型可以描述如下: 
 e.q.(1)

f:观测到的图像(m维向量) 
u:未知的真实图像(n维向量) 
A:线性算子,例如反卷积问题中的卷积算子,压缩感知中则是子采样测量算子。

:噪声,通常是高斯加性白噪声。方差为:sigma^2。

目标:由f得到u。

在式(1)中,我们仅知道观察到的图像f,其他的一概不知。因此这种问题是病态的,我们可以通过正则化把它变成良态的。

正则化方法: 
假定对未知的参数 μ 引入一个先验的假设,例如稀疏性,平滑性。正则化问题的常见方法Tikhonov方法,它通过求解下面的优化问题: 

其中 μ 是一个大于零的标量,事先设定的常数,用于权衡观测图像f和正则项之间的平衡。双绝对值符号是L2范数。L2条件约束。

下面,为了引入Bregman迭代算法,需要对两个重要的概念进行描述(次梯度和Bregman距离)。

2、Bregman距离

这里先复习一下梯度和导数的概念:

导数:lim(△x->0) ( f(x+△x) - f(x) ) / △x 
方向导数:lim( dis(P0,P1) ->0) ( f(P1) - f(P0) ) / dis(P0,P1)。。上面讲的导数就是沿着 x 轴 方向的方向导数。 
!!导数是 f(x) 在某个方向的变化率,是一个值,标量。

梯度:沿方向导数最大值的方向,大小为该方向导数的值。 
!!梯度是一个向量。

次梯度

subgradient(次梯度,又称子梯度、弱梯度等), 
泛函 J 在 u 点的次梯度定义如下: 

J: X->R, 凸函数。 
u:作用域X中的一点。 
v:作用域 X 中的任一点。 
p:X 的对偶空间 X* 的中的某一点。 
: 是内积运算。如果泛函 J 是简单的一元函数,则就是两个实数相乘。

J 在 u 点的所有次梯度的集合成为 J 在 u 点的次微分,记为

次梯度有什么好处呢? 
对于一般的导数定义,例如 y=|x| 在0点是不可导的,但是对于次梯度,它是存在的。

Bregman距离

点u和v之间的Bregman距离定义如下: 

J:X->R, 凸函数。 
。。所以 p 是 J 在 u 点的一个次梯度。 
凸函数两个点u,v之间的Bregman距离:等于其函数值之差,再减去其次梯度点p与自变量之差的内积。

注意:这个距离不满足对称性,这和一般的泛函分析中距离定义是不一样的。

!!Bregman 距离有一些十分良好的性质,使得他在解决 L1 正则化问题时十分有效。

2.  Bregman距离

注意这个定义,它是对泛函J在u点的subgradient的定义,p点是其对偶空间的中的某一点。subgradient可以翻译为次梯度,子梯度,弱梯度等。等式左边最右边一项是内积运算。如果泛函J是简单的一元函数,则就是两个实数相乘。次梯度有什么好处呢?对于一般的导数定义,例如y=|x|在0点是不可导的,但是对于次梯度,它是存在的。

上面的这个定义就是Bregman距离的定义。对于凸函数两个点u,v之间的Bregman距离,等于其函数值之差,再减去其次梯度点p与自变量之差的内积。要注意的是这个距离不满足对称性,这和一般的泛函分析中距离定义是不一样的。

3、Bregman迭代算法

要解决的问题:求u(最小化)

Bregman迭代算法可以高效的求解下面的泛函的最小值问题。

J:X->R, 凸函数,非负。u∈X。 
H:X->R, 凸函数,非负。u∈X,f 是已知常数(通常是一个观察得到的图像数据,是矩阵或向量)。 
X:作用域,是凸集也是闭集。

注意:上述泛函会根据具体问题的不同具有不同的具体表达式。例如,对于简介中的图像复原问题, J(u) 是平滑先验约束,是正则化项;而H则是数据项。

Bregman迭代算法

首先,初始化相关的参数为零; 
然后,再迭代公式u。。直到 uk 满足收敛条件。 
u,左边一项是泛函 J 的Bregman距离。 
p,右边一项是泛函 H 的梯度(次梯度)。

可以看出: 
· 第一次迭代, 
u1=argmin(u) { D(u, 0) + H(u) }, 其中D(u, 0)=J(u) - J(0) - <0, u>=J(u) 
 
· 再经过多次的迭代, 
就能够收敛到真实的最优解。

对于具体的问题: 
定义的具体形式是不同的。 
例如对于压缩感知使用的基追踪算法,J是L1范数;

而对于图像去噪问题,可能就是u的梯度L1范数,同时A也变成了恒等算子了。

3.  Bregman迭代算法

Bregman迭代算法可以高效的求解下面的泛函的最小

上式中的第一项J,定义为从X到R的泛函,其定义域X是凸集也是闭集。第二项H,定义为从X到R的非负可微泛函,f是已知量,并且通常是一个观测图像的数据,所以f是矩阵或者向量。上述泛函会根据具体问题的不同具有不同的具体表达式。例如,对于简介中的图像复原啊问题,J(u)就是平滑先验约束,是正则化项;而H则是数据项。

Bregman迭代算法首先是初始化相关的参数为零,再迭代公式u,其左边一项是泛函J的Bregman距离。再来看p点的迭代公式,其最右边一项是泛函H的梯度。

其迭代一次产生的输出是公式3.2,经过多次的迭代,就能够收敛到真实的最优解。这个证明过程可以参考后面的文献。

对于具体的问题,泛函3.1定义的具体形式是不同的。例如对于压缩感知使用的基追踪算法,J是L1范数。而对于图像去噪问题,可能就是u的梯度L1范数,同时A也变成了恒等算子了。

4、线性Bregman迭代算法

Bregman算法对于基追踪问题来说是一种很好的工具。但是,算法中的每一步都要求解公式的最小值,从而使得计算复杂度非常高。 
因此提出了——

线性Bregman迭代算法推导

首先,利用矩阵的泰勒公式,将公式 
 
中的 H(u) 线性展开,得到:

但是这种近似展开只有在u和uk十分接近的时候上式才准确。因此,把泰勒公式中的二次项加上,则原来的问题就变成了:

可以看到,二次项可以使 u 和 uk 很靠近。因为向量的平方就是L2范数的平方。

又因为: 

注意  和  是关于 u 的常数。

所以, 

考虑基追踪算法,令 H(u) =

得到: 

考虑该式的一个特殊情况, 。并将pk回代,得到:

C是一个常量,与uk有关的常量。uk也是一个常量。

分3种情况来考虑 u,则 

进一步整理,得到: 

定义shrink算子,当a>0时,有: 

线性Bregman算法总结

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||^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操作,这个收缩算子很重要,在后面所有的Bregman算法中都有这个操作。根据这个操作,我们导出下面的表达式,并最终把线性Bregman迭代算法总结如下:

5.  Split Bregman 算法

Split Bregman 算法是另一种高效的算法。我们已经知道,Bregman迭代算法用于求解下面的凸优化问题:

我们可以把上面的表达式变换为下面的等价形式:

这一步,看似是多此一举,但是Bregman经过推导,得出了一种高效的迭代算法,分裂Bregman迭代。

上面的5.2是一个等式约束优化问题,把它转化为无约束优化问题如下:

上面这个公式中,优化变量多了一个d。做如下的变量替换:

如果我们对5.5,应用最前面提到Bregman 迭代算法,很容易写出下面的迭代序列:

式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去噪模型,其迭代的具体表达式是不同的。

Split-Bregman迭代方式相关推荐

  1. 凸优化问题中的Bregman迭代算法

    对于搞图像处理的人而言,不懂变分法,基本上,就没法读懂图像处理的一些经典文献.当然,这已经是10年之前的事情了. 现在,如果不懂得Bregman迭代算法,也就没法读懂最近几年以来发表的图像处理的前沿论 ...

  2. 基于水平集LBF模型的图像边缘轮廓分割凸优化 - Split Bregman分裂布雷格曼算法的最优解

    目录 1. 凸优化简介 : 2. 次梯度(subgradient): 次梯度概念: 次梯度例子: 次梯度存在性: 3. Bregman距离(布雷格曼距离) : Bregman距离概念 : Bregma ...

  3. 分裂布雷格曼方法--(Split Bregman Method)

    因为毕设做TV去噪去卷积相关的内容,需要用到分裂布雷格曼算法,算是认真读了经典论文<The Split Bregman Method for L1-Regularized Problems> ...

  4. 树形结构:迭代方式遍历树,宽度优先,先序遍历,中序遍历,后序遍历

    迭代的方式处理树,就必须清楚你将要访问的顺序,对应的就是指针怎么走,你必须很清楚 树的宽度优先搜索,他是一层一层的访问,就搞不清楚怎么划分子问题了,但是你访问的顺序 你很清楚,那么就使用迭代的方式实现 ...

  5. 分治:分治和动态规划的区别,二分检索递归和迭代方式实现

    分治法 分治一般可以直接使用递归实现,在不考虑空间消费的情况下和迭代方式时间消耗相差不多 ======================================================= ...

  6. 01背包问题:回溯法和限界分支、递归和迭代方式

    01背包问题 递归方式模板: void backtrack(int t){ if(t > n) output(x); else{ for(int i = f(n,t); i <= g(n, ...

  7. MATLAB代码:全面ADMM算法代码,实现了三种ADMM迭代方式

    MATLAB代码:全面ADMM算法代码,实现了三种ADMM迭代方式 关键词:综合能源 分布式协同优化 交替方向乘子法 最优潮流 参考文档:<基于串行和并行ADMM算法的电_气能量流分布式协同优化 ...

  8. Web系统版本更新与迭代方式——持续集成与持续部署(Python Django框架)

    一.持续集成与持续部署 在软件工程中,CI/CD是指持续集成和持续交付或者持续部署的组合. CI/CD通过构建应用程序.在测试和部署中实施自动化,从而在开发团队和运维团队之间架起一座桥梁,让项目能够更 ...

  9. java中迭代方式_JAVA中LIST迭代的方式汇总

    此文汇总了基本所有List迭代的写法,以及其优缺点. 第一种:基本的for循环(不推荐使用)for (int i = 0; i E element = list.get(i); // 1 - 可以调用 ...

最新文章

  1. 在VM上安装centOS后的网络配置
  2. C#中一道关于多线程的基础练习题——模拟仓库存销过程
  3. This tutorial code needs the xfeatures2d contrib module to be run.
  4. 玩转mini2440开发板之【编译u-boot提示没有规则可以创建“XX.o”需要的目标】
  5. 前端学习(3023):vue+element今日头条管理-首页layont布局
  6. 云栖社区 mysql_mysql
  7. Delphi中CoInitialize之探究
  8. linux 安装virtualbox5.2
  9. 新浪微博html5模板,个人主题建站首选微博秀模板,仿新浪微博官网
  10. johnson算法 java_Johnson-trotter 算法,一种高效的全排序算法的java实现
  11. 计算机网络与基础第五章答案,第五章 计算机网络基础
  12. 应届毕业生应该怎样写简历?
  13. 微信公众号服务器需要备案,微擎不备案可以用吗?微信公众号开发域名一定要备案吗?...
  14. 「AI产品」产品小姐姐分析抖音背后的计算机视觉技术
  15. python 让电脑发出声音代码_python - 代码完成时发出声音警报
  16. 气传导耳机和骨传导耳机的区别是啥?气传导耳机有哪些优缺点?
  17. Android性能优化:如何让App更快、更稳、更省(含内存、布局优化等)
  18. 记2019北航计算机夏令营体验~
  19. js实现颜色从蓝色渐变到红色
  20. python课程设计编写电子通讯录_python写一个通讯录

热门文章

  1. 计组之存储系统:8、Cache写策略(全写法、写回法、写分配法、非写分配法、多级Cache)
  2. 计算机网络之数据链路层:3、差错控制(奇偶校验、CRC冗余校验、海明校验)
  3. (计算机组成原理题目题型总结)第四章:指令系统
  4. libjpeg(1)
  5. 全面介绍Windows内存管理机制及C++内存分配实例(三):虚拟内存
  6. qt setData()和data()
  7. Qt下QTableWidget的使用
  8. 斗地主综合案例之有序版本
  9. Cowrie蜜罐的部署(ubt亲测)
  10. 汇编语言:实验10 根据材料编程—3.数值显示,编程,将data段中的数据以十进制形式显示出来