稀疏向量:假设向量X={x1,x2,…xn}中的元素绝大部分为零元素,则称该向量是稀疏的。

稀疏表示:将原始信号表示为在适当选取的一组过完备基(字典D=[d1,d2…dp])上的稀疏线性组合,即信号的稀疏表示,其中d1,d2…dp为字典中的原子。过完备基的意思是其中的原子数大大的超过原始信号的维数。


在表达式中:X=Da,X称为原始信号,D为字典,a为X的稀疏表示。其实该表达式中间的=是理想化的情况,一般只是用Da逼近原始信号X。这就类似于用神经网络或者卷积神经网络等深度学习的网络去模拟任意函数。只不过,在神经网络中,求的是权值的最最优值,而此处求得是在字典下的最优解a。因此,类似的求解a的过程变成了最优化Da和原始信号Da的过程。即信号的稀疏表示问题转化为求解稀疏正则优化问题。

损失函数:


其中B为字典,a为稀疏表示。Lambda为正则项占整个损失函数的比重。正则项为L1范数,(L1范数是向量中,非零项的个数。L2范数是非零项的绝对值之和,L3范数是非零项的平方开方)

这个损失函数是不是和神经网络的损失函数神似?但是区别在于,神经网络求得是权重B的最优,此处求a的最优,因此此处的解法也不同。通常正则稀疏的解法有:

从任意一个字典中为原始信号寻找最稀疏的表示常用的方法分类两类:

①贪婪算法,比如匹配追踪(MP)、正交匹配追踪(OMP)、弱匹配追踪(WMP)、阈值方法等;

②松弛算法,比如迭代加权最小二乘(Iterative-Reweighed-Least-Squares,IRLS)、基追踪(BP)等。

其中,贪婪算法的特点是速度快,精度相对较低;松弛算法是精度高,但速度慢。

穷举法——NP难:

假设 稀疏表示的非零项数目为L(sparse level),先令L=1,字典里的每一个原子(列向量)尝试一遍,看是否满足终止条件,共有K种组合。如果没有满足,再令L=2,再次尝试,共有K(K-1)/2种组合。还没有满足条件的,则令L=3……组合的数目呈指数增长,于是遇到了NP难问题。难在计算量太大。

贪婪算法——Matching Pursuit

第一步,找到最接近X的原子,等效于 向量上仅取一个非零项,求出最接近的原子,保留下来;

第二步,计算误差是否满足要求,如果满足,算法停止,否则,计算出残差信号,和第一步类似,找到最接近残差向量的原子,保留下来;

第三步,调整已选向量的系数,使得 最接近X,重复第二步。

松弛算法——Basis Pursuit,将L0问题转化为L1问题,解决的方法有很多,比如内点法、迭代收缩法等。事实上,它可以化成一个线性规划的问题,用MATLAB很容易解。

上式中第一个累加项说明了字典学习的第一个目标是字典矩阵与稀疏表示的线性组合尽可能的还原样本;第二个累加项说明了αi应该尽可能的稀疏。之所以用L1范式是因为L1范式正则化更容易获得稀疏解。具体原因参看该书11.4章或移步机器学习中的范数规则化之(一)L0、L1与L2范数。字典学习便是学习出满足上述最优化问题的字典B以及样本的稀疏表示A(A{α1,α2,…,αi})。L1正则化常用于稀疏,可以获得稀疏解。如下图表示,L1正则化交点在轴上,所得的解一般只是在某个轴上有实数,另外的轴为0,从而最终得到稀疏解。

2.字典学习:

寻找字典的过程称为字典学习。字典学习的一个假设是字典对于指定信号具有稀疏表示。因此,选择字典的原则就是能够稀疏地表达信号。

两种方法来设计字典:

•从已知的变换基中选取,比如 DCT 、小波基等,这种方法很通用,但是不能自适应于信号。

学习字典,即通过训练和学习大量的与目标数据相似的数据来获得。这里,我们介绍一种叫K-SVD的方法

字典学习算法理论包含两个阶段:字典构建阶段(DictionaryGenerate)和利用字典(稀疏的)表示样本阶段(Sparse coding with a precomputed dictionary)。这两个阶段(如下图)的每个阶段都有许多不同算法可供选择,每种算法的诞生时间都不一样,以至于稀疏字典学习的理论提出者已变得不可考。笔者尝试找了Wikipedia和Google Scolar都无法找到这一系列理论的最早发起人。


字典学习的第一个好处——它实质上是对于庞大数据集的一种降维表示。第二,正如同字是句子最质朴的特征一样,字典学习总是尝试学习蕴藏在样本背后最质朴的特征(假如样本最质朴的特征就是样本最好的特征).稀疏表示的本质:用尽可能少的资源表示尽可能多的知识,这种表示还能带来一个附加的好处,即计算速度快。我们希望字典里的字可以尽能的少,但是却可以尽可能的表示最多的句子。这样的字典最容易满足稀疏条件。也就是说,这个“字典”是这个“稀疏”私人订制的。

稀疏表达有两点好处:
1) 省空间;
2) 奥卡姆剃刀说:如果两个模型的解释力相同,选择较简洁的那个。稀疏表达就符合这一点。
原文地址:https://blog.csdn.net/tiaxia1/article/details/80264228

稀疏表示与字典学习大略讲解相关推荐

  1. 稀疏表示和字典学习的简单理解

    稀疏表示和字典学习的简单理解 特征分类 稀疏表示 字典学习 特征分类 相关特征:对当前有用的属性 冗余特征:所包含的信息有时能从其他特征中推演出来.如若某个冗余特征恰好对应了学习任务所需"中 ...

  2. 稀疏表示、字典学习、压缩感知的简单理解

    注意:本文不涉及任何公式推导,仅对大致原理和作用进行介绍,不当之处欢迎指正. 为什么要稀疏? 1)特征选择 稀疏规则化能实现特征的自动选择,当Xi存在与输出Yi没有关系的特征(冗余特征)时,在最小化损 ...

  3. Sparse编码和字典学习(1)基础知识和python简单实现

    Sparse编码和字典学习 1. 稀疏表示与字典学习简介 1.1 Motivation 1.2 字典学习的流程 1.3 字典学习的数学模型 2 python实现 2.1字典学习 2.1 稀疏性统计和误 ...

  4. 机器学习(十三)k-svd字典学习

    k-svd字典学习 原文地址:http://blog.csdn.net/hjimce/article/details/50810129 作者:hjimce 一.字典学习 字典学习也可简单称之为稀疏编码 ...

  5. 『ML笔记』深入浅出字典学习2(Dictionary Learning)

    深入浅出字典学习2(Dictionary Learning) 文章目录 一.理解K-SVD字典学习 二.K-SVD字典学习算法概述 2.1.随机初始化字典D 2.2.固定字典,求取每个样本的稀疏编码 ...

  6. 稀疏编码(sparse code)与字典学习(dictionary learning)

    Dictionary Learning Tools for Matlab. 1. 简介 字典 D∈RN×KD\in \mathbb R^{N\times K}(其中 K>NK>N),共有 ...

  7. Dictionary Learning(字典学习、稀疏表示以及其他)

    第一部分 字典学习以及稀疏表示的概要 字典学习(Dictionary Learning)和稀疏表示(Sparse Representation)在学术界的正式称谓应该是 稀疏字典学习(Sparse D ...

  8. [转]字典学习/稀疏编码

    本文转自https://zhuanlan.zhihu.com/p/26015351 机器学习--字典学习/稀疏编码学习笔记 Esquirrel 2 个月前 以下资料是小编学习字典学习/稀疏编码时,整理 ...

  9. 字典学习/稀疏表示学习笔记

    首先向大家安利一下南大周志华老师写的<机器学习>这本书,作为一个对此一窍不通的人看了都觉得很有意思,受益匪浅.语言平实却又干货十足,比某些故弄玄虚泛泛而谈的其它国内教材高到不知哪里去了. ...

  10. 字典学习以及稀疏表示的概要

    https://www.cnblogs.com/hdu-zsk/p/5954658.html https://www.cnblogs.com/endlesscoding/p/10090866.html ...

最新文章

  1. java iterator如何知道数量_Java开发岗面试题基础篇(二)
  2. [CF396E]On Iteration of One Well-Known Function
  3. 编译php ./configure命令enable和with有什么区别
  4. mysql count(*),count(1)与count(column)区别
  5. python odoo_odoo python 使用缓存
  6. gerrit Cannot Merge
  7. android studio防止反编译,防反编译利器-Android studio混淆代码压缩apk包体积
  8. 一个mysql可以存多少数据类型_mysql一张表到底能存多少数据?
  9. Linux安装winetim简单教程,ubuntu wine安装TIM
  10. 大数据时代是什么意思?
  11. 91p3.space/index.php,writeup_for_SCTF2016
  12. Flink StreamingFileSink 文件到hdfs 文件一直处于inprogress状态无法生成正式文件
  13. ubuntu下如何打开root文件夹,如何用root权限管理员权限打开文件夹,以及如何获取root权限
  14. c++实现经典游戏——贪吃蛇
  15. 从大数据应用案例中理解大数据的应用价值
  16. morlet包络检波matlab,包络检波技术,envelope detection technique,音标,读音,翻译,英文例句,英语词典...
  17. 程序员的十层楼(http://softwareblogs-zho.intel.com/2009/02/04/1071/)
  18. 航信 PNR解析详解
  19. Guess Number(Java版)
  20. 英文版软件测试程序,《软件测试英文1》.doc

热门文章

  1. Linux驱动开发-编写OLED显示屏驱动
  2. 在 mac 上用海盗船键盘
  3. java 同步操作降低效率解惑
  4. CSS-div圆角被内部元素覆盖问题
  5. Axure share如何自适应手机屏幕
  6. OPPO R9s刷机教程 可解锁线刷包 救砖升级
  7. 编译原理与编译构造 LR文法
  8. 局域网远程桌面无法连接到远程计算机,局域网无法远程连接桌面怎么解决
  9. H5基础阶段二(表格、表单)
  10. 持久层框架Hibernate和Mybatis对比