稀疏编码(Sparse Coding)的前世今生(一) 转自http://blog.csdn.net/marvin521/article/details/8980853
稀疏编码来源于神经科学,计算机科学和机器学习领域一般一开始就从稀疏编码算法讲起,上来就是找基向量(超完备基),但是我觉得其源头也比较有意思,知道根基的情况下,拓展其应用也比较有底气。哲学、神经科学、计算机科学、机器学习科学等领域的砖家、学生都想搞明白人类大脑皮层是如何处理外界信号的,大脑对外界的“印象”到底是什么东东。围绕这个问题,哲学家在那想、神经科学家在那用设备观察、计算机和机器学习科学家则是从数据理论和实验仿真上推倒、仿真。在神经编码和神经计算领域,我所能查到最早关于稀疏编码的文献是1996年,在此之前的生命科学家的实验观察和假设都不说了,1996年Cornell大学心理学院的Bruno在Nature上发表了一篇题名为:“emergence of simple-cell receptive fieldproperties by learning a sparse code for nature images”的文章,大意是讲哺乳动物的初级视觉的简单细胞的感受野具有空域局部性、方向性和带通性(在不同尺度下,对不同结构具有选择性),和小波变换的基函数具有一定的相似性。当时描述这些性质主要从自然图像编码的统计结构上来理解这些视觉细胞的特性,但是大部分都没有成功,接着Bruno在文章中提出通过最大化稀疏编码假说成功描述了上述细胞的性质,然后稀疏编码就火了。先来看看这篇文章的核心思想,作者基于一个基本假设,图像是有一些基的线性组合形成,如(公式一)所示:
(公式一)
其中fai(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
稀疏编码(Sparse Coding)的前世今生(一) 转自http://blog.csdn.net/marvin521/article/details/8980853的更多相关文章
- 稀疏编码(Sparse Coding)的前世今生(二)
为了更进一步的清晰理解大脑皮层对信号编码的工作机制(策略),须要把他们转成数学语言,由于数学语言作为一种严谨的语言,能够利用它推导出期望和要寻找的程式.本节就使用概率推理(bayes views)的方 ...
- Sublime Text3 离线安装Package Control并使用GBK编码 --转自https://blog.csdn.net/swhard/article/details/78930371
1.关闭Sublime Text 3,去https://github.com/wbond/package_control/releases下载一个zip包,我下载的是 2.将包内的顶层文件夹解压至C: ...
- ubuntu16.04 tomcat7安装和编码修改(转发:https://blog.csdn.net/zl544434558/article/details/76735564)
有直接通过命令安装的,但是我还是喜欢把文件下载下来,然后自己配置. 1,下载tomcat7二进制文件 https://tomcat.apache.org/download-70.cgi 2,解压tom ...
- C++ IPv4与IPv6的兼容编码(转,出自http://blog.csdn.net/ligt0610/article/details/18667595)
这里不再对IPv6 socket相关编程的基础知识进行讲解,只提供一个IP协议无关的服务端和客户端的代码,仅供参考. 服务端代码: #include <iostream> #include ...
- Sparsity稀疏编码(一)
稀疏编码来源于神经科学,计算机科学和机器学习领域一般一开始就从稀疏编码算法讲起,上来就是找基向量(超完备基),但是我觉得其源头也比较有意思,知道根基的情况下,拓展其应用也比较有底气.哲学.神经科学.计 ...
- 理解sparse coding
理解sparse coding 稀疏编码系列: (一)----Spatial Pyramid 小结 (二)----图像的稀疏表示——ScSPM和LLC的总结 (三)----理解sparse codin ...
- Sparsity稀疏编码(三)
稀疏编码(sparse coding)和低秩矩阵(low rank)的区别 上两个小结介绍了稀疏编码的生命科学解释,也给出一些稀疏编码模型的原型(比如LASSO),稀疏编码之前的探讨文章 ...
- 稀疏编码概率解释(基于1996年Olshausen与Field的理论 )
一.Sparse Coding稀疏编码 稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据.稀疏编码算法的目的就是找到一组基向量 ,使得我们能将输入向量 表示为这些 ...
- k-svd字典学习,稀疏编码
1. K-SVD usage: Design/Learn a dictionary adaptively to betterfit the model and achieve sparse s ...
随机推荐
- 5、python中的列表
list是python内置的一种有序.可变的数据结构. 一.如何创建一个list? 示例: 注意: list中的元素可以是任意的数据类型如字符串.数字.布尔值.None等,也可以是其他的数据结构如另外 ...
- mysql sum聚合函数和if()函授的联合使用
今天去面试遇到一个数据库试题,首先说一下表结构如下: 表结构:mytest 表数据:mytest 要查询的结果如下: 在本题目中,需要用到sum聚合函数和if函数 sql如下: ,)) ,)) AS ...
- uoj206 [APIO2016]最大差分
ref #include "gap.h" #include <iostream> #include <cstdio> using namespace std ...
- 使用Jmeter做性能测试
上周刚刚做完项目的性能测试.今天整理和总结一下,随便分享给大家. 首页呢,测试前,我们是有明确的性能指标的,而且测试环境和数据都已准备好,业务分析.场景分析大家根据自己的项目系统进行分析设计,我们选用 ...
- MapReduce 使用案例
MapReduce 使用案例 MapReduce在面试过程中出现的频率还是挺高的,尤其是数据挖掘等岗位.通常面试官会出一个大数据题目,需要被试者根据题目设计基于MapReduce的算法来解答.我在一个 ...
- Leetcode 623.在二叉树中增加一行
在二叉树中增加一行 给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创 ...
- JVM虚拟机系列(三)Class文件格式
- linux文件备份到windows方法
目录 背景 方案 过程记录 在windows上创建共享目录 将windows上共享的目录绑定到/mnt目录下 问题处理 背景 需编写部门wiki备份数据脚本.但wiki部署在linux上,而需将备份数 ...
- jquery版右下角弹窗效果
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- redis应用场景及实例
Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储;它的数据模型非常独特,用的是单线程.另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不 ...