Spars Coding理论
参考网页:
http://deeplearning.stanford.edu/wiki/index.php/Sparse_Coding
http://deeplearning.stanford.edu/wiki/index.php/Sparse_Coding:_Autoencoder_Interpretation
搞了好几天的sparse coding,终于基本上搞明白了,当时看了网页知识觉得挺简单,但当动手做的时候才发现有各种问题,看来动手真的很重要。
Sparse Coding:
Sparse Coding是一种无监督学习方法,目标是寻找一组过完备基(over-complete)以更好的表达数据,那么数据就是这一组基的线性表示,即

其实PCA可以找到一组完备基,那么为什么要使用过完备基呢,因为过完备基可以更好的捕捉数据内存的结构,那么系数由样本x 与稀疏性(sparsity)两者共同决定,所以稀疏性就是只有少数基被激活,即
为1,大多数基未被激活,
=0 。因此目标函数需要加上稀疏惩罚项:

稀疏惩罚项可以用L0
,不可导且很难优化,L1
, 或者log 惩罚
从目标函数可以看出,对于一组最优解(,
),我们可以将
缩放K倍,将
扩大K倍,使目标函数的值更小,为了解决这个问题,我们对基
增加约束,类似于在求正交基时要求每个基的模为1。

Sparse Coding的概率解释:

我们的目标是找到一组特征基,使
与经验分布
尽可能的接近,即最小化
与
的KL散度

由于 P*(X)为常量,因此上式等价于最大化的似然函数,现在的问题是
的分布到底是怎样的?由于
,那么分别计算右边两项即可。
假设V是高斯白噪声,那么

假设基之间相互独立

基于稀疏性的要求,即系数 = 0的概率很大,即p(
)的分布非常的陡,很快落到0,大于0的取值区间很小。

因此:

我们的目标即优化以下函数 :

如前面所讲需要增加稀疏惩罚项,那么根据能量原理


Sparse Coding的anutoencoder解释:
autoencoder的目标函数是:

第一项为重构误差,第二项为稀疏性约束,我们可以通过将s缩放K倍,将A增大K倍而不改变重构误差,使目标函数更小。因为对A增加约束,每一列的模小于1

为方便优化,化为拉格朗日函数:

那么问题变为凸优化问题,可以非常方便的求解,gamma为权重衰减因子
在使用梯度下降法求解时,第二项在0处不可导,可以通过加平滑项来处理

Topographic sparse coding:
大脑皮层识别图像时,相邻的神经元识别比较相似的特征,一个神经元识别水平边缘,那么相邻的神经元会识别水平方向稍微倾斜一点的边缘。我们也希望我们学习到的特征有类似的特征,即一个特征被激活,那么它的相邻特征会以比较弱的程度被激活,这样学习到的特征之间存在一种“topographic order"。怎样实现这种拓扑结构呢,假设将特征特征保存在一个方阵中,我们期望相邻的特征比较相似,可以通过将这些相似的特征作为一组来进行L1稀疏惩罚,


用V表示分组情况,每行表示一个组别,值为1表示属于该组。

使用矩阵表示可以非常方便的计算梯度,上式的表示有两个问题
1、第二项应该是s.^2,因为我们是计算每个特征的模。VS^2表示将特征根据V分组,然后对每个组进行稀疏惩罚。S的每一列是A的一个线性表示,我们对A进行分组,希望每一组学习到的特征相似,表现在S中即:S中每一列中属于同一组的维度具有相似的激活性
可参考:http://metaoptimize.com/qa/questions/8540/topographic-sparse-coding
2、第一项应该除以样本数据,否则样本数目不同的话求解结果不同
因此目标函数应该为
这里为什么将特征以方阵来组织呢,可能是为了后面编程时比较容易的获得V吧。 我们学习到的特征其实是神经网络中的隐含层,我们想将这些特征以某种规则排序,使相邻的特征可以检测相似的特征,如边缘,没有发现方阵组织的必要性。
难道是由于 S的每一列是一个图片块的特征表示,而图片一般表示为方阵????
实现细节:
目标函数求解时,若固定A则为s的凸优化问题,若固定s为A的凸优化问题,因此可以通过迭代算法求解:

如果使用所有数据进行上述操作,那么每一轮求解将非常耗时,而且收敛速度也将非常慢,为了解决这个问题,提出了以下两个trick加快收敛速度:
1、baching examples into "mini-batches"
每一轮只使用一部分数据计算,类似于批梯度下降算法与随机梯度下降算法,不仅可以提高迭代速度,还可以加快收敛速度(why)
2、good initialization of s

(1) 在已知A的情况下,我们期望找到s使,那么我们将s = ATx作为s的初始值
(2) 不清楚为什么要这么做,ng的网页讲义上说是为了使稀疏项更小
因此求解过程如下:

注意第4步,可以直接求解,因为s已知时,目标函数是关于A的凸问题,可以直接使用计算解析解。

浙公网安备 33010602011771号