sparse coding

Deep Learning(深度学习)学习笔记整理系列php

zouxy09@qq.comweb

http://blog.csdn.net/zouxy09算法

做者:Zouxy网络

version 1.0 2013-04-08dom

 

声明:机器学习

1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的。具体引用的资料请看参考文献。具体的版本声明也参考原文献。函数

2)本文仅供学术交流,非商用。因此每一部分具体的参考资料并无详细对应。若是某部分不当心侵犯了你们的利益,还望海涵,并联系博主删除。学习

3)本人才疏学浅,整理总结的时候不免出错,还望各位前辈不吝指正,谢谢。优化

4)阅读本文须要机器学习、计算机视觉、神经网络等等基础(若是没有也不要紧了,没有就看看,能不能看懂,呵呵)。编码

5)此属于初版本,如有错误,还需继续修正与增删。还望你们多多指点。你们都共享一点点,一块儿为祖国科研的推动添砖加瓦(呵呵,好高尚的目标啊)。请联系:zouxy09@qq.com

 

 

目录:

1、概述

2、背景

3、人脑视觉机理

4、关于特征

       4.一、特征表示的粒度

       4.二、初级(浅层)特征表示

       4.三、结构性特征表示

       4.四、须要有多少个特征?

5、Deep Learning的基本思想

6、浅层学习(Shallow Learning)和深度学习(Deep Learning)

7、Deep learning与Neural Network

8、Deep learning训练过程

       8.一、传统神经网络的训练方法

       8.二、deep learning训练过程

9、Deep Learning的经常使用模型或者方法

       9.一、AutoEncoder自动编码器

       9.二、Sparse Coding稀疏编码

       9.三、Restricted Boltzmann Machine(RBM)限制波尔兹曼机

       9.四、Deep BeliefNetworks深信度网络

       9.五、Convolutional Neural Networks卷积神经网络

10、总结与展望

11、参考文献和Deep Learning学习资源

 

 

 

接上

 

9.二、Sparse Coding稀疏编码

       若是咱们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即O = a11 + a22+….+ ann, Φi是基,ai是系数,咱们能够获得这样一个优化问题:

Min |I – O|,其中I表示输入,O表示输出。

       经过求解这个最优化式子,咱们能够求得系数ai和基Φi,这些系数和基就是输入的另一种近似表达。

       所以,它们能够用来表达输入I,这个过程也是自动学习获得的。若是咱们在上述式子上加上L1的Regularity限制,获得:

Min |I – O| + u*(|a1| + |a2| + … + |an |)

        这种方法被称为Sparse Coding。通俗的说,就是将一个信号表示为一组基的线性组合,并且要求只须要较少的几个基就能够将信号表示出来。“稀疏性”定义为:只有不多的几个非零元素或只有不多的几个远大于零的元素。要求系数 ai 是稀疏的意思就是说:对于一组输入向量,咱们只想有尽量少的几个系数远大于零。选择使用具备稀疏性的份量来表示咱们的输入数据是有缘由的,由于绝大多数 的感官数据,好比天然图像,能够被表示成少许基本元素的叠加,在图像中这些基本元素能够是面或者线。同时,好比与初级视觉皮层的类比过程也所以获得了提高 (人脑有大量的神经元,但对于某些图像或者边缘只有不多的神经元兴奋,其余都处于抑制状态)。

         稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据。虽然形如主成分分析技术(PCA)能使咱们方便地找到一组 “完备”基向量,可是这里咱们想要作的是找到一组“超完备”基向量来表示输入向量(也就是说,基向量的个数比输入向量的维数要大)。超完备基的好处是它们 能更有效地找出隐含在输入数据内部的结构与模式。然而,对于超完备基来讲,系数ai再也不由输入向量惟一肯定。所以,在稀疏编码算法中,咱们另加了一个评判标准“稀疏性”来解决因超完备而致使的退化(degeneracy)问题。(详细过程请参考:UFLDL Tutorial稀疏编码

       比 如在图像的Feature Extraction的最底层要作Edge Detector的生成,那么这里的工做就是从Natural Images中randomly选取一些小patch,经过这些patch生成可以描述他们的“基”,也就是右边的8*8=64个basis组成的 basis,而后给定一个test patch, 咱们能够按照上面的式子经过basis的线性组合获得,而sparse matrix就是a,下图中的a中有64个维度,其中非零项只有3个,故称“sparse”。

       这 里可能你们会有疑问,为何把底层做为Edge Detector呢?上层又是什么呢?这里作个简单解释你们就会明白,之因此是Edge Detector是由于不一样方向的Edge就可以描述出整幅图像,因此不一样方向的Edge天然就是图像的basis了……而上一层的basis组合的结 果,上上层又是上一层的组合basis……(就是上面第四部分的时候我们说的那样)

       Sparse coding分为两个部分:

1)Training阶段:给定一系列的样本图片[x1, x 2, …],咱们须要学习获得一组基[Φ1, Φ2, …],也就是字典。

       稀疏编码是k-means算法的变体,其训练过程也差很少(EM算法的思想:若是要优化的目标函数包含两个变量,如L(W, B),那么咱们能够先固定W,调整B使得L最小,而后再固定B,调整W使L最小,这样迭代交替,不断将L推向最小值。EM算法能够见个人博客:“从最大似然到EM算法浅解”)。

       训练过程就是一个重复迭代的过程,按上面所说,咱们交替的更改a和Φ使得下面这个目标函数最小。

      每次迭代分两步:

a)固定字典Φ[k],而后调整a[k],使得上式,即目标函数最小(即解LASSO问题)。

b)而后固定住a [k],调整Φ [k],使得上式,即目标函数最小(即解凸QP问题)。

      不断迭代,直至收敛。这样就能够获得一组能够良好表示这一系列x的基,也就是字典。

2)Coding阶段:给定一个新的图片x,由上面获得的字典,经过解一个LASSO问题获得稀疏向量a。这个稀疏向量就是这个输入向量x的一个稀疏表达了。

例如:

相关文章
相关标签/搜索