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

借鉴前人的文章链接

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%8F%E7%BC%96%E7%A0%81

如果我们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即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)问题。

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

Sparse coding分为两个部分:

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

稀疏编码是k-means算法的变体,其训练过程也差不多(EM算法的思想:如果要优化的目标函数包含两个变量,如L(W, B),那么我们可以先固定W,调整B使得L最小,然后再固定B,调整W使L最小,这样迭代交替,不断将L推向最小值。

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

每次迭代分两步:

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

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

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

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

例如:

LASSO问题

使用数理统计模型从海量数据中有效挖掘信息越来越受到业界关注。在建立模型之初,为了尽量减小因缺少重要自变量而出现的模型偏差,通常会选择尽可能多的自变量。然而,建模过程需要寻找对因变量最具有强解释力的自变量集合,也就是通过自变量选择(指标选择、字段选择)来提高模型的解释性和预测精度。指标选择在统计建模过程中是极其重要的问题。Lasso算法则是一种能够实现指标集合精简的估计方法。

Tibshirani(1996)提出了Lasso(The Least Absolute Shrinkage and Selectionator operator)算法。这种算法通过构造一个惩罚函数获得一个精炼的模型;通过最终确定一些指标的系数为零,LASSO算法实现了指标集合精简的目的。这是一种处理具有复共线性数据的有偏估计。Lasso的基本思想是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而能够产生某些严格等于0的回归系数,得到解释力较强的模型。R统计软件的Lars算法的软件包提供了Lasso算法。根据模型改进的需要,数据挖掘工作者可以借助于Lasso算法,利用AIC准则和BIC准则精炼简化统计模型的变量集合,达到降维的目的。因此,Lasso算法是可以应用到数据挖掘中的实用算法。Lasso是一个线性模型,用于评估稀少系数下的数据类型。当参数值较少时Lasso算法非常有用,可以有效降低数据误差。

  原始文章在这里,http://statweb.stanford.edu/~tibs/lasso/lasso.pdf

凸QP问题

在一般情况下,求解任意一个函数的全局最优值是很困难的。但是对于一种特定类型的函数——凸函数(convex function), 我们可以很有效的求解其全局最优值。这里的“有效”是指在实际问题求解中,能在多项式复杂度的时间里求解。 人们将这类函数的最值问题称为凸优化问题(Convex Optimal Problem)

凸集的定义:一个集合C是凸集,当且仅当对任意x,y∈C和θ∈RR且0≤θ≤1,都有

θx+(1−θ)y∈C.       其几何意义在于,在集合C中任取两个点,连接两点的直线段上的任一点也在集合C中。下图是凸集和非凸集的例子:

常见的凸集有:n维实数空间;一些范数约束形式的集合;仿射子空间;凸集的并集;n维半正定矩阵集;凸优化中的一个核心概念就是凸函数。

凸函数定义:一个函数f:Rn→R是凸函数当且仅当其定义域(设为D(f))是凸集, 且对任意的x,y∈D(f)和θ∈R且0≤θ≤1,都有

f(θx+(1−θ)y≤θf(x)+(1−θ)f(y))

设f(x)为一元函数,那么上式的几何意义在于,曲线上任意两点处的割线在函数曲线的上方,常见的凸函数有指数函数(f(x)=ax,a>1)、负对数函数(f(x)=−logax,a>1,x>0)、开口向上的二次函数等。

有了凸集和凸函数的定义,现在我们重点讨论凸优化问题的求解方法。凸优化的一般描述为:

其中f(x)为凸函数,C是一个凸集,这是不带约束条件的情况下的凸优化问题。对于带约束条件的问题而言,其一般描述为:
 
其中f(x)为凸函数,gi(x)对所有的ii均为凸函数,hj(x)均为仿射函数。注意gi(x)不等式中不等号的方向。

凸问题中的全局优化:首先要分清楚什么是局部最优,什么是全局最优。局部最优是指在该最优值附近的点对应的函数值 都比该最优值大,而全局最优是指对可行域里所有点,其函数值都比该最优值大。对于凸优化问题,它具有一个很重要的特性, 那就是所有的局部最优值都是全局最优的。

(1)线性规划(Linear Programing, LP): 目标函数和约束条件函数都是线性函数的情况,一般形式如下:

(2)二次规划(Quadratic Programing, QP): 目标函数为二次函数,约束条件为线性函数,一般形式为:

LP可以看做是QP的特例,QP包含LP。

(3)二次约束的二次规划(Quadratically Constrained Quadratic Programming, QCQP): 目标函数和约束条件均为 二次函数的情况,QP可以看做是QCQP的特例,QCQP包含QP。

(4)半正定规划(Semide?nite Programming,SDP)QCQP可以看做是SDP的特例,SDP包含QCQP。SDP在machine learning中有非常广泛的应用。

凸优化应用举例

下面我们来看几个实例。
(1)支持向量机(Support Vector Machines,SVM):凸优化在machine learning中的一个典型的应用就是基于支持向量机分类器, 它可以用如下优化问题表示:

其中决策变量w∈Rn,ξ∈Rn,b∈R. C∈R,x(i),y(i),i=1,2,…,m由 具体问题定义。可以看出,这是一个典型的QP问题。

(2)带约束的least squares问题:其一般描述为

这也是一个很典型的QP问题。

(3)Maximum Likelihood for Logistic Regression:该问题的目标函数为:其中g(z)g(z)为Sigmoid函数,

对于凸优化问题,目前没有一个通用的解析式的 解决方案,但是我们仍然可以用非解析的方法来有效的求解很多问题。内点法被证明是很好的解决方案, 特别具有实用性,在某些问题中,能够在多项式时间复杂度下,将解精确到指定精度。 

时间: 2024-09-30 21:11:22

深度学习浅层理解(四)-- 稀疏编码的相关文章

深度学习浅层理解(一)

来源和参考,参见以下链接等相关网站: http://blog.csdn.net/zouxy09/article/details/8775360 http://blog.csdn.net/zouxy09/article/details/8775488 http://blog.csdn.net/zouxy09/article/details/8775518 1958 年,DavidHubel 和Torsten Wiesel 在 JohnHopkins University,研究瞳孔区域与大脑皮层神经

深度学习浅层理解(二)

参见链接文献如下: http://blog.csdn.net/zouxy09/article/details/8775518 Deep Learning和  neural network异同 二者的相同在于deep learning采用了神经网络相似的分层结构,系统由包括输入层.隐层(多层).输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logistic regression模型:这种分层结构,是比较接近人类大脑的结构的. 而为了克服神经网

《神经网络与深度学习》(三) 稀疏编码

转自:http://www.cnblogs.com/caocan702/p/5666175.html 借鉴前人的文章链接 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://

吴恩达 DeepLearning.ai课程笔记(1-3)神经网络和深度学习 --- 浅层神经网络

以下为在Coursera上吴恩达老师的DeepLearning.ai课程项目中,第一部分<神经网络和深度学习>第二周课程部分关键点的笔记.笔记并不包含全部小视频课程的记录,如需学习笔记中舍弃的内容请至 Coursera 或者 网易云课堂.同时在阅读以下笔记之前,强烈建议先学习吴恩达老师的视频课程. 1. 二分类问题 对于二分类问题,大牛给出了一个小的Notation. 样本:  ,训练样本包含  个: 其中  ,表示样本 包含 个特征:  ,目标值属于0.1分类: 训练数据:  输入神经网络时

深度学习入门必须理解这25个概念

深度学习入门必须理解这25个概念 2017年05月22日 21:11:51 Star先生 阅读数:30013 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/pangjiuzala/article/details/72630166 神经网络基础 1)神经元(Neuron)--就像形成我们大脑基本元素的神经元一样,神经元形成神经网络的基本结构.想象一下,当我们得到新信息时我们该怎么做.当我们获取信息时,我们一般会处理它,然后生成一个输出.类似地,在

struct2.1笔记01:MVC框架思想浅层理解

1. Struts 1是全世界第一个发布的MVC框架,它由Craig McClanahan在2001年发布,该框架一经推出,就得到了世界上Java Web开发者的拥护,经过长达6年时间的锤炼,Struts 1框架更加成熟.稳定,性能也有了很好的保证.因此,到目前为止,Struts 1依然是世界上使用最广泛的MVC框架. 目前,基于Web的MVC框架非常多,发展也很快,每隔一段时间就有一个新的MVC框架发布,例如像JSF.Tapestry和Spring MVC等.除了这些有名的MVC框架外,还有一

Deep Learning(深度学习)之(四)Deep Learning学习资源

十一.参考文献和Deep Learning学习资源 先是机器学习领域大牛的微博:@余凯_西二旗民工:@老师木:@梁斌penny:@张栋_机器学习:@邓侃:@大数据皮东:@djvu9-- (1)Deep Learning http://deeplearning.net/ (2)Deep Learning Methods for Vision http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/ (3)Neural Network for

&lt;转&gt;深度学习浅谈

深度学习--人工神经网络再掀研究热潮 胡晓林 转自:http://caai.cn/contents/118/1934.html 人工神经网络起源于上世纪40年代,到今天已经70年历史了.就像人的一生,经历了起起落落,有过辉煌,有过黯淡,有过嘈杂,有过冷清.总体说来,过去的20年中人工神经网络的研究不温不火,直到最近三五年,随着深度学习概念的提出,人工神经网络才又重新焕发生机,甚至再度掀起研究热潮.本文简述一下人工神经网络的"前世今生",并简单展望一下它的未来. 第一个神经元模型是194

AI - 深度学习之美十四章-概念摘要(8~14)

原文链接:https://yq.aliyun.com/topic/111 08 反向传播(Back Propagation,简称BP) 算法 在神经网络(甚至深度学习)参数训练中,BP算法占据举足轻重的地位. 实际上BP算法是一个典型的双向算法,但通常强调的是反向传播. 工作流程分两大步: 正向传播输入信号,输出分类信息(对于有监督学习而言,基本上都可归属于分类算法).简单说来,就是把信号通过激活函数的加工,一层一层的向前"蔓延",直到抵达输出层. 反向传播误差信息,调整全网权值.如果