凸优化中的Bregman迭代算法

2023-11-21 03:38
文章标签 算法 优化 迭代 bregman

本文主要是介绍凸优化中的Bregman迭代算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/celerychen2009/article/details/9058315

对于搞图像处理的人而言,不懂变分法,基本上,就没法读懂图像处理的一些经典文献。当然,这已经是10年之前的事情了。

现在,如果不懂得Bregman迭代算法,也就没法读懂最近几年以来发表的图像处理的前沿论文了。国内的参考文献,基本上都是直接引用Bregman迭代算法本身,而对于其原理基本上找不到较为详细的论述。本文简要叙述当前流行的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 正则化问题时十分有效。

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 的梯度(???or次梯度???)。

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

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

4、线性Bregman迭代算法

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

线性Bregman迭代算法推导

首先,利用矩阵的泰勒公式,将公式
这里写图片描述
中的 H(u) 线性展开,得到:

这里写图片描述

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

这里写图片描述

可以看到,二次项可以使 u 和 uk 很靠近。

为什么这里的二次项是L2范数的平方?
答:因为向量的平方就是L2范数的平方。。
???二阶导数不见了????

又因为:
这里写图片描述

注意 这里写图片描述这里写图片描述 是关于 u 的常数。

所以,
这里写图片描述

考虑基追踪算法,令 H(u) =这里写图片描述

得到:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

考虑该式的一个特殊情况,这里写图片描述 。并将pk回代,得到:

这里写图片描述

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

分3种情况来考虑 u,则
这里写图片描述

进一步整理,得到:
这里写图片描述

定义shrink算子,当a>0时,有:
这里写图片描述

线性Bregman算法总结

这里写图片描述

5、Split Bregman 迭代算法

参考书:《Bregman算法》http://download.csdn.net/detail/celerychen2009/5552551

这篇关于凸优化中的Bregman迭代算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/399542

相关文章

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭