转载:稀疏编码

原文地址:http://blog.csdn.net/jwh_bupt/article/details/9902949

Many thanks

---------------------------------------------------------------------------

本文的内容主要来自余凯老师在CVPR2012上给的Tutorial。前面在总结ScSPM和LLC的时候,引用了很多Tutorial上的图片。其实这个Tutorial感觉写的挺好的,所以这次把它大致用自己的语言描述一下。不过稀疏编码是前两年比较火的东西,现在火的是deep learning了。

1、What is sparse coding?

1988年,神经稀疏编码的概念由Mitchison提出,由牛津大学的Rolls等正式引用。灵长目动物颚叶视觉皮层和猫视觉皮层的电生理实验报告和一些相关模型的研究结果都说明了视觉皮层复杂刺激的表达是采用稀疏编码原则的。研究表明:初级视觉皮层V1区第四层有5000万个(相当于基函数),而负责视觉感知的视网膜和外侧膝状体的神经细胞只有100万个左右(理解为输出神经元)。说明稀疏编码是神经信息群体分布式表达的一种有效策略。1996年,加州大学伯克利分校的Olshausen等在Nature杂志发表论文指出:自然图像经过稀疏编码后得到的基函数类似V1区简单细胞感受野的反应特性(空间局部性、空间方向性、信息选择性)。

典型的sparse coding的过程分为训练和测试。

Training:给定一些训练样本(training samples)[ x1, x2, …, xm(in Rd)],学习一本字典的基(bases)[Φ1,Φ2……(also in Rd)]。可是用k-means等无监督的方法,也可以用优化的方法(这时training完了同时也得到了这些training samples的codes,这是一个LASSO和QP问题的循环迭代);

Coding:用优化的方法求解测试样本的codes(此时字典已经学得)。经典的方法是求解LASSO:

                  (1)

自我学习就是在Training的时候采用大量无标注的自然图像训练字典,然后对带标注的图像进行编码得到特征codes。

2、Connections to RBMs, autoencoders

(1)式(经典的稀疏编码)有几个特点:

——系数a是稀疏的;

——a的维数一般比x的维数大;

——编码过程a=f(x)是一个非线性的关于x的隐函数(即我们没有f(x)的显示表达,因为求解LASSO没有解析解);

——重建过程x‘=g(a)是一个线性的显示的关于a的函数(X’=ΣaiΦi)。

而RBM和自编码的特点则是:

——有显示的f(x);

——不会必然得到稀疏的a,但是如果我们增加稀疏的约束(如稀疏自编码,稀疏RBM),通常能得到更好的效果(进一步说明sparse helps learning)。

从广义上说,满足这么几个条件的编码方式a=f(x)都可以叫稀疏编码:

1) a是稀疏的,且通常具有比x更高的维数;

2) f(x)是一个非线性的映射;(jiang1st2010注:该条要求存疑,见下面解释。)

3) 重建的过程x‘=g(a),使得重建后的x‘与x相似。

因此,sparse RBM,sparse auto-encoder,甚至VQ都可以算是一种sparse coding。(jiang1st2010注:第二条要求称f(x)是一个非线性映射,然而SPM中用到的VQ是一个线性映射,原因可以参见这里这里。余凯老师也是LLC论文的作者,似乎存在矛盾?不过这是个小问题了,没必要深究。)

3、Sparse activations vs. sparse models

现在可以用a=f(x)表示稀疏编码的问题了。它可以分解成两种情况:

1)sparse model:f(x)的参数是稀疏的

--例如:LASSO f(x)=<w,x>,其中w要求是稀疏的。(jiang1st2010注:这个例子中f(x)也是线性的!)

--这是一个特征选择的问题:所有的x都挑选相同的特征子集。

--hot topic.

2)sparse activation:f(x)的输出是稀疏的

--就是说a是稀疏的。

--这是特征学习的问题:不同的x会激活不懂的特征子集。

                  

4、Sparsity vs. locality

其实这个问题在这里已经谈过了。简单的说就是sparsity不一定导致locality,而locality肯定是sparse的。sparse不比locality好,因为locality具有smooth的特性(即相邻的x编码后的f(x)也是相邻的),而仅仅sparse不能保证smooth。smooth的特性对classification会具有更好的效果,并且设计f(x)时,应尽量保证相似的x在它们的codes中有相似的非0的维度。

Tutorial上展示了(1)中取不同的λ,字典中各项呈现的效果:

   

   

作者想说明的问题是分类效果越好的情况下,basis会更清晰地表现出属于某几个特定的类。但是我没太看明白。

5、Hierarchical sparse coding

这里图3曾说明了SIFT本身就是一个Coding+Pooling的过程,所以SPM是一个两层的Coding+Pooling。而Hierarchical sparse coding就是两层的coding都是sparse coding,如下图:

整个HSC的第一层就从pixel层级开始(不需要手动设计SIFT特征了),经过两层SC后,形成codes。这个过程可以从无标注的数据中学习,就是self-taught learning。从pixel层级开始,这点和DNN啥的很像了。

从结果来看,HSC的性能会比SIFT+SC稍微好些。

Tutorial的最后列举了关于SC的其他主题,我也不懂,这里就不废话了。

-----------------

作者:jiang1st2010

时间: 2024-10-22 16:25:29

转载:稀疏编码的相关文章

转载 deep learning:八(SparseCoding稀疏编码)

转载 http://blog.sina.com.cn/s/blog_4a1853330102v0mr.html Sparse coding: 本节将简单介绍下sparse coding(稀疏编码),因为sparse coding也是deep learning中一个重要的分支,同样能够提取出数据集很好的特征.本文的内容是参考斯坦福deep learning教程:Sparse Coding,Sparse Coding: Autoencoder Interpretation,对应的中文教程见稀疏编码,

稀疏编码(Sparse Coding)的前世今生(二)

为了更进一步的清晰理解大脑皮层对信号编码的工作机制(策略),须要把他们转成数学语言,由于数学语言作为一种严谨的语言,能够利用它推导出期望和要寻找的程式.本节就使用概率推理(bayes views)的方式把稀疏编码扩展到随时间变化的图像上,由于人类或者哺乳动物在日常活动中通过眼睛获取的信号是随时间变化而变化的,对于此类信号仍然有一些稀疏系数和基能够描写叙述他们,同类型的处理方式也有慢特征分析(slow features analysis).废话不多说了,进入正题: 我们把图像流(图像序列)看成时空

稀疏编码(Sparse Coding)的前世今生(一) 转自http://blog.csdn.net/marvin521/article/details/8980853

稀疏编码来源于神经科学,计算机科学和机器学习领域一般一开始就从稀疏编码算法讲起,上来就是找基向量(超完备基),但是我觉得其源头也比较有意思,知道根基的情况下,拓展其应用也比较有底气.哲学.神经科学.计算机科学.机器学习科学等领域的砖家.学生都想搞明白人类大脑皮层是如何处理外界信号的,大脑对外界的“印象”到底是什么东东.围绕这个问题,哲学家在那想.神经科学家在那用设备观察.计算机和机器学习科学家则是从数据理论和实验仿真上推倒.仿真.在神经编码和神经计算领域,我所能查到最早关于稀疏编码的文献是199

稀疏编码

Deep learning:二十六(Sparse coding简单理解) Sparse coding: 本节将简单介绍下sparse coding(稀疏编码),因为sparse coding也是deep learning中一个重要的分支,同样能够提取出数据集很好的特征.本文的内容是参考斯坦福deep learning教程:Sparse Coding,Sparse Coding: Autoencoder Interpretation,对应的中文教程见稀疏编码,稀疏编码自编码表达. 在次之前,我们需

稀疏编码直方图----一种超越HOG的轮廓特征

该论文是一篇来自CMU 的CVPR2013文章,提出了一种基于稀疏编码的轮廓特征,简称HSC(Histogram of Sparse Code),并在目标检测中全面超越了HOG(Histogram of Gradient)本文介绍HSC的思路及其计算过程. 如图3所示,HSC方法种采用了疏编码原理来提取图像特征的方法,即根据学习得到的字典对图像块Patch进行重新编码. 算法主要包括了两部分,分别是字典学习和特征提取. 字典学习. 1. 类似于基于K-Means方法的字典学习,稀疏编码的字典学习

深度学习浅层理解(四)-- 稀疏编码

借鉴前人的文章链接 http://blog.csdn.net/zouxy09/article/details/8777094 http://www.gene-seq.com/bbs/thread-2853-1-1.html http://ibillxia.github.io/blog/2012/09/26/convex-optimization-overview/ UFLDL教程 http://ufldl.stanford.edu/wiki/index.php/%E7%A8%80%E7%96%8

UFLDL教程笔记及练习答案六(稀疏编码与稀疏编码自编码表达)

稀疏编码(SparseCoding) sparse coding也是deep learning中一个重要的分支,同样能够提取出数据集很好的特征(稀疏的).选择使用具有稀疏性的分量来表示我们的输入数据是有原因的,因为绝大多数的感官数据,比如自然图像,可以被表示成少量基本元素的叠加,在图像中这些基本元素可以是面或者线. 稀疏编码算法的目的就是找到一组基向量使得我们能将输入向量x表示成这些基向量的线性组合: 这里构成的基向量要求是超完备的,即要求k大于n,这样的方程就大多情况会有无穷多个解,此时我们给

UFLDL 教程答案 稀疏编码与softmax篇的答案已经传到资源,大家可以免费下载~

UFLDL 教程答案 稀疏编码篇与softmax篇的答案已经传到资源,大家可以免费下载~ 另外,关于资源里面描述的低效率的代码的问题,逗比的博主已经找到了解决方案,大家需要修改两个文件的两处代码,绿色是需要被注释的 softmaxCost.m文件 %% 非向量化 %for i = 1 : numCases %    thetagrad = thetagrad + (groundTruth(:,i) - Hx(:,i)) * data(:,i)'; % 10 * 100, 8 * 100 %end

Deep Learning 系列(4):稀疏编码(sparse coding)和主成分分析(ICA)

一直犹豫稀疏编码怎么写,来来回回看了好几遍的UFLDL.因为这不仅是DL深度学习的重要概念,也是我这段时间一直在研究的stacked ISA 深度特征学习的支柱. 这章将主要介绍一下稀疏编码的主要概念,及主成分分析的方法. 一. 稀疏编码(sparse coding): 稀疏编码算法是一种无监督(unsupervised)学习方法,它用来寻找一组"超完备"基向量来更高效地表示样本数据.(设x的维数为n,则k>n) 超完备基能更有效地找出隐含在输入数据内部的结构与模式.然而,系数a