稀疏学习之设计字典

稀疏信号的一个最重要的部分就是字典A。那么选择A?怎么样选择才是合理?

一、字典的选择和学习

如何选择合适的字典,一种基本的方法是选择预定义的字典,如无抽样小波、可操纵小波、轮廓博、曲波,等等。近期很多学者提出来主要针对图像的字典,特别是类似于“卡通”的图像内容,假设分段平滑并具有平滑边界。

这些提出的字典附有详细的理论分析,能够对简单信号建立稀疏表示系数。一个典型的应用时M项近似衰减率——用M个最佳的非零系数表示信号。

另一种选择字典的方法是可调节的——通过在特定参数(连续或者离散的)控制下生成基或帧。两个最熟知的例子就是小波包和Bandelets.

尽管预定义和自适应的字典通常具有较快的变换速度,他们无法处理稀疏信号,并且,这些字典限制于特定类型的图像和信号,无法应用于新的,任意类型的信号。因此我们需要寻找克服这些限制的新方法——通过一种学习的观点。

基于学习的方法首先需要构建一个训练信号集,然后构建一个经验学习字典,即通过经验数据中生成潜在的原子,而不通过理论模型。这样的字典可以实际应用,作为固定或冗余字典。

与预定义和自适应的字典不同,学习字典能够适用于符合稀疏场定义的任何类型的信号。然而,这将带来更重的计算负担,且只能应用于低维信号(至少目前为止是这样的)这是为什么这种方法只能应用于图像块。

二、字典学习算法

下面我们讨论如何用学习算法构建A,加收训练集 已给出,且已知它是由未知的稀疏场模型 生成的,这个训练集能否定义唯一的生成模型,并选择特定的字典A?这个问题比较复杂,由Field和Oishausen于1996年提出。

这里,我们介绍两个机制,第一个叫优化方向法(MOD),由Engan提出,第二个叫K-SVD,由Aharon提出。

1.字典学习的核心内容

假设模型的偏差 已知,我们的目的是估计A。考虑如下的优化问题:

2.MOD算法

显然,没有一种通用的算法可以求解(12.1)和(12.2),和我们无法求解(P0)的原因类似。然而,没有理由我们不去寻找一个启发式算法,并研究它在特殊情况下的执行表现。

我们可以将(12.1)看成一种嵌套最小化策略:在第k步,我们利用第k-1步得到字典A(k-1),对数据库中的M个实例yi求解对应的 :这可以得到矩阵 ,然后我们通过最小二乘法求解

这里我们使用了Frobenius范数来评价误差(矩阵的F范数为矩阵中所有元素的平方和的平方根)。允许对获得的字典的元素进行缩放。递增k并重复上述循环,直到满足收敛准则。这样的块坐标松弛算法首先由Engan提出,称为最优方向法(Method of Optimal Direction,MOD),这个算法描述如图12.1

以下是本人对MOD算法的理解

1,匹配追踪算法

在分析该算法前,先介绍下匹配追踪算法

匹配追踪最早是时频分析的分析工具,目的是要将一已知讯号拆解成由许多被称作为原子讯号的加权总和,而且企图找到与原来讯号最接近的解。其中原子讯号为一极大的原子库中的元素。以数学式子表示可以得到:

其中,是权重,是由字典D中获得的原子讯号。

如同傅立叶级数将一讯号拆解成一系列的正弦波的相加,其中每个成分拥有不同的系数作为权重,其数学式子如下:

而匹配追踪也具有将讯号拆解成一系列原子相加的意涵,而甚至可以使用匹配追踪去描述傅立叶级数,也就是原子库对应到的所有正弦函数的集合

2.贪婪算法

为了找到最符合原讯号的一组原子加权总合,如果对原子库进行所有组合的尝试过于耗费时间。在1993年由Mallat SZhang Z的论文[1]中,提出了一个贪婪算法(Greedy Algorithm),并大幅降低找出近似解的时间。其作法首先在原子库中寻找与原讯号内积结果最大的原子,找到此讯号以及其内积结果之后再将原讯号减掉作为下一次重复运算的原始讯号,如此反复做下去即可得到一系列的以及原子,直到达到停止条件为止,其详细的算法如下:

输入: Signal: , dictionary .
输出: List of coefficients: .
初始化:
;
;
重复:
find with maximum inner product ;
;
;
;
直到达到停止条件,例如:)
此时的 是稀疏表示的

3.字典更新

2中的 即为此式中的  ,将其代入,求解该方程的最小值,

到此获得最终的字典

初次接触,理解不到位,请各位大神多多指教

时间: 2024-10-27 19:57:17

稀疏学习之设计字典的相关文章

稀疏表示 过完备 字典

2基于局部时窄特征的动作识别模哩2.1 动作识别的基本思想实现了基于时空兴趣点和时空单词的动作表示和识别方法,该方法首先通过训练从样本中提取出准确的时空兴趣点,建立基于兴趣点特征的时空码本,并构造出动作分类器.在动作识别过程中,计算待分类视频中的兴趣点特征和时空码本的距离对兴趣点进行分类,生成对视频动作进行表征的时空单词,最后通过动作分类器进行分类识别. 目前已有很多方法和技术用于构造分类模型,如决策树.神经网络.贝叶斯方法.Fisher线性分析(Fld)以及支持向量机(Support Vect

深度学习:从头设计一个TensorFlow3一样的新一代深度学习系统,到底需要把握哪些要点?

深度学习工具潮流滚滚,各种工具层出不穷.也有各种文章从易用性,可移植性,灵活性和效率方面对于各个系统进行比较.这篇文章希望从系统设计上面来讲来回答这个讨论这个问题:如果想到从头设计一个TensorFlow3一样的新一代深度学习系统,到底需要把握哪些要点. 计算单元:从layer abstraction到operator 大家熟悉的第一代深度学习系统,以cuda-convnet21和caffe为代表.这些系统主要的一大特点是提出了一个以深度学习计算层次layer为基本单元的计算单位.不同的laye

黑马程序员_学习IOS之字典常用的方法

字典是无序的 数组是有序的.字典分为:可变字典和不可变字典  不可变字典对象 NSDictionary * dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil]; //value = ke

《Java程序性能优化》学习笔记 Ⅰ设计优化

豆瓣读书:http://book.douban.com/subject/19969386/ 第一章 Java性能调优概述 1.性能的参考指标 执行时间: CPU时间: 内存分配: 磁盘吞吐量: 网络吞吐量: 响应时间: 2.木桶定律   系统的最终性能取决于系统中性能表现最差的组件,例如window系统内置的评分就是选取最低分.可能成为系统瓶颈的计算资源如,磁盘I/O,异常,数据库,锁竞争,内存等. 性能优化的几个方面,如设计优化,Java程序优化,并行程序开发及优化,JVM调优,Java性能调

python 学习笔记 三 字典

字典 Python的高效的key/value哈希表结构叫做"dict", dict的内容可以写成一系列的key:value对并放入{ }中, 相当于: dict = {key1:value1, key2:value2, ...}, 一个空的字典就是俩个大括号{ }. 下面是从一个空字典创建字典以及一些关键点: 数字, 字符串和元组可以作为字典的key, value可以是任何类型(包括字典). ## Can build up a dict by starting with the the

学习网页设计第三周

对于一个有理想,没抱负的有志青年来说.每一次的失败,都表明你离成功更近了一步.我们在成长的道路上会遇到不少的挫折,然而,每次我都是选择逃避,最好的方法,就是沉迷在好玩的世界里.从小我就喜欢看电视,主要是电视里有很多神奇又好玩的地方,这是我能暂时逃避一些人一些事.长大之后我就开始沉迷游戏,游戏在我来看,有些时候是可有可无的,但是有些时候是一种心灵的寄托. 然而,我在学习网页设计的时候才知道,自己的能力是多麽的有限,我们这次老师布置了两道题目.一道是显示当前的时间,并且每秒刷新一次,显示现在的时间是

Swift学习笔记(5)--字典

1.定义 //1.基本定义 [key 1: value 1, key 2: value 2, key 3: value 3] var dict = ["name":"Xiaoqin","sex":"female","age":"20"] for (key,value) in dict { println(key,value) } //2.类型强制定义 Dictionary<keyT

零基础从现在开始学习ui设计就业前景怎么样?

Ui设计是什么?学习ui设计前景怎么样呢?对于很多还在ui设计门外的同学来说.在没有了解ui设计的时候度会有迟疑,不知道学习这这门技术后能不能很好的就业,能不能拿到高的薪水. 其实很多时候你想去尝试一门新的技术的时候,只有自己真心的喜欢,去了解它之后才能知道,就像我们去追一个喜欢的人一样,除了看到表面的东西,我们还得去看看人的品质怎么样,三观是不是一致的,只有全方面的了解之后才知道是不是适合自己那个人而学习ui设计也是一样的,既然我想从事这门行业,那么我们是不是该去好好的了解一下这门技术呢? U

为什么C/C++程序员都要阅读Redis源码之:Redis学习事件驱动设计

为什么我说C/C++程序员都要阅读Redis源码 主要原因就是『简洁』.如果你用源码编译过Redis,你会发现十分轻快,一步到位.其他语言的开发者可能不会了解这种痛,作为C/C++程序员,如果你源码编译安装过Nginx/Grpc/Thrift/Boost等开源产品,你会发现有很多依赖,而依赖本身又有依赖,十分痛苦.通常半天一天就耗进去了.由衷地羡慕 npm/maven/pip/composer/...这些包管理器.而Redis则给人惊喜,一行make了此残生. 除了安装过程简洁,代码也十分简洁.