稀疏编码来源于神经科学,计算机科学和机器学习领域一般一开始就从稀疏编码算法讲起,上来就是找基向量(超完备基),但是我觉得其源头也比较有意思,知道根基的情况下,拓展其应用也比较有底气。哲学、神经科学、计算机科学、机器学习科学等领域的砖家、学生都想搞明白人类大脑皮层是如何处理外界信号的,大脑对外界的“印象”到底是什么东东。围绕这个问题,哲学家在那想、神经科学家在那用设备观察、计算机和机器学习科学家则是从数据理论和实验仿真上推倒、仿真。在神经编码和神经计算领域,我所能查到最早关于稀疏编码的文献是 1996年,在此之前的生命科学家的实验观察和假设都不说了,1996年Cornell大学心理学院的Bruno在Nature上发表了一篇题名为:“emergence of simple-cell receptive field properties by learning a sparse code for nature images”的文章,大意是讲哺乳动物的初级视觉的简单细胞的感受野具有空域局部性、方向性和带通性(在不同尺度下,对不同结构具有选择性),和小波变换的基函数具有一定的相似性。当时描述这些性质主要从自然图像编码的统计结构上来理解这些视觉细胞的特性,但是大部分都没有成功,接着Bruno在文章中提出通过最大化稀疏编码假说成功描述了上述细胞的性质,然后稀疏编码就火了。先来看看这篇文章的核心思想,作者基于一个基本假设,图像是有一些基的线性组合形成,如(公式一)所示:

(公式一)

      其中phi(x,y)是基函数,alpha是系数,随着不同的图像变化而变化。有效编码的目标就是为了寻找完备的基函数来生成图像空间,而且要求系数尽可能独立,只所以独立就是为了寻找信号的本质结构。当时的淫们很自然的想到PCA,因为PCA可以找到一些统计结构上的空间轴(类似坐标轴)来构成基函数,但是PCA一对噪声太敏感,也就是只能对一些类似高斯分布的数据有效,这样的干净数据可以很好的找到空间轴,对更复杂分布的数据(比如现在的流形分布)无效,作者受信息论启发,即相关变量的联合熵小于个体熵之和(当变量alpha之间互相独立时,二者相等,二者之间差了一个互信息),如果保持图像的联合熵不变,一个使得降低变量相关性的可能方法就是降低个体的熵,因此基于Barlow’s term,作者寻找一个最小熵编码(注:Barlow’s term那本书因年代久远,我找不到源头了,大意是统计独立降低编码冗余度),基于上面,作者猜测自然图像是个稀疏结构,即任何给定图像都可以用大数据里面的少数几个描述符(基)来表示。稀疏编码出生咯,作者开始寻找使得每个系数的概率分布是单模态并且在0处是峰分布的低熵(low-entropy)方法。作者提出稀疏编码的寻找方案可以通过最小化(公式二)来完成:

(公式二)

     其中第一项就是保持信息的代价(cost),如(公式三)所示:

(公式三)

     当然如果基于基函数重建的图像和原图像I(x,y)一致的话,代价为0(为最小)。

     (公式二)的第二项则是稀疏价值函数,其中的lambda是个常量正系数,平衡下稀疏系数alpha的重要性,和SVM的常量C有异曲同工之妙。作者提出了三个稀疏价值函数,如(图一)所示:

(图一)

      可以惊喜的发现,现在经常用的L1正则赫然在列,其他两个应该被淘汰了,其实当时LASSO也开始出现了,只是当时的人们没有直接意识到L1正则可以增加稀疏性。至于为什么L1正则可以增加稀疏性,推荐读下MIT的博士pluskid的这篇博文:http://freemind.pluskid.org/machine-learning/sparsity-and-some-basics-of-l1-regularization/

Pluskid的数学功底雄厚,阅读者也需要一些功底才行。继续我们今天的话题,要最小化公式二,参数变量只有alpha,对其求导,然后用梯度下降法迭代更新alpha即可,更新alpha后,也要继续更新基函数,二者的步骤一并通过(图二)给出:

(图二)

   求出后的参数alpha和系数如(图三)所示:

(图三)

      其中a是基函数,b是其系数,c则是验证感受野的特性,d表明系数是在0处单峰。通过图像展示,对于初级视觉细胞的感受野信号的那些属性得到了验证,图像信息得到了保持,而且编码是稀疏的,至此稀疏编码拉开了序幕,衍生了后续各种优化版本和应用。

参考文献:

       [1] emergence of simple-cell receptive field properties by learning a sparse code for nature images. 1996

       [2] Sparse Coding with an Overcomplete BasisSet: A Strategy Employed by V1 ?  1997

转载请注明链接:http://blog.csdn.net/cuoqu/article/details/8980853

Sparsity稀疏编码(一)的更多相关文章

  1. Sparsity稀疏编码(三)

    稀疏编码(sparse coding)和低秩矩阵(low rank)的区别        上两个小结介绍了稀疏编码的生命科学解释,也给出一些稀疏编码模型的原型(比如LASSO),稀疏编码之前的探讨文章 ...

  2. Sparsity稀疏编码(二)

           为了更进一步的清晰理解大脑皮层对信号编码的工作机制(策略),需要把他们转成数学语言,因为数学语言作为一种严谨的语言,可以利用它推导出期望和要寻找的程式.本节就使用概率推理(bayes v ...

  3. UFLDL深度学习笔记 (七)拓扑稀疏编码与矩阵化

    UFLDL深度学习笔记 (七)拓扑稀疏编码与矩阵化 主要思路 前面几篇所讲的都是围绕神经网络展开的,一个标志就是激活函数非线性:在前人的研究中,也存在线性激活函数的稀疏编码,该方法试图直接学习数据的特 ...

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

    转载 http://blog.sina.com.cn/s/blog_4a1853330102v0mr.html Sparse coding: 本节将简单介绍下sparse coding(稀疏编码),因 ...

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

    该论文是一篇来自CMU 的CVPR2013文章,提出了一种基于稀疏编码的轮廓特征,简称HSC(Histogram of Sparse Code),并在目标检测中全面超越了HOG(Histogram o ...

  6. 稀疏编码概率解释(基于1996年Olshausen与Field的理论 )

    一.Sparse Coding稀疏编码 稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据.稀疏编码算法的目的就是找到一组基向量 ,使得我们能将输入向量 表示为这些 ...

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

    稀疏编码来源于神经科学,计算机科学和机器学习领域一般一开始就从稀疏编码算法讲起,上来就是找基向量(超完备基),但是我觉得其源头也比较有意思,知道根基的情况下,拓展其应用也比较有底气.哲学.神经科学.计 ...

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

    为了更进一步的清晰理解大脑皮层对信号编码的工作机制(策略),须要把他们转成数学语言,由于数学语言作为一种严谨的语言,能够利用它推导出期望和要寻找的程式.本节就使用概率推理(bayes views)的方 ...

  9. k-svd字典学习,稀疏编码

    1.     K-SVD usage: Design/Learn a dictionary adaptively to betterfit the model and achieve sparse s ...

随机推荐

  1. [extjs] ExtJS 4.2 开发环境搭建

    到官网下载Extjs ,现在最新版的是Ext5.1. 这里用ext4.2演示开发.http://extjs.org.cn/. EXT4.1 在线API 项目结构中ext4.2导入的资源文件: 第一个页 ...

  2. python--条件判断和循环--3

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 一.if语句 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄, ...

  3. laravel 控制器多个方法共用一个路由

    直接上代码: Route::get('Index/{action}', function(App\Http\Controllers\IndexController $index, $action){ ...

  4. scala函数进阶篇

    1.求值策略scala里有两种求值策略Call By Value -先对函数实参求值,在函数体中用这个求出的参数值.Call By Name -先不对函数实参求值,而是函数实参每次在函数体内被用到时都 ...

  5. Hash表(hash table ,又名散列表)

    直接进去主题好了. 什么是哈希表? 哈希表(Hash table,也叫散列表),是根据key而直接进行访问的数据结构.也就是说,它通过把key映射到表中一个位置来访问记录,以加快查找的速度.这个映射函 ...

  6. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

    MySQL在linux安装之后,连接到服务,报了下面的错误: ERROR 2002 (HY000): Can't connect to local MySQL server through socke ...

  7. Zookeeper异常org.apache.zookeeper.KeeperException$ConnectionLossException

    在虚拟机上安装了CenOS Linux系统,然后配置好了 zookeeper的集群环境,在本地写了一个Zookeeper测试程序,如下: package com.xbq.zookeeper; impo ...

  8. IntersectRect、wcsrchr、CComPtr、GetFileAttributes

    IntersectRect    两矩形相交形成的新矩形 The IntersectRect function calculates the intersection of two source re ...

  9. 《C++ Primer Plus》第7章 函数——C++的编程模块 学习笔记

    函数是C++的编程模块.要使用函数,必须提供定义和原型,并调用该函数.函数定义是实现函数功能的代码:函数原型描述了函数的接口:传递给函数的值的书目和种类以及函数的返回类型.函数调用使得程序将参数传递给 ...

  10. SMGP3.0协议的概念知识

    该项目主页在https://code.google.com/archive/p/smgp/,可以使用VPN进去看看,该项目是开源的,根据SMGP3.0协议写的API,我们要用的话直接调用就好了,这里主 ...