您的位置:首页 > 其它

Deep Learning 学习 Toolbox学习记录四 Sparse Coding

2014-04-07 16:13 274 查看
Deep Learning 学习 Toolbox学习记录四 Sparse Coding

一、Sparse Coding的基本思想

根据线性代数中基的概念,Sparse Coding试图寻找一组“超完备”基向量,用这组基可以线性重构原始图像。



对于超完备基来说,系数 ai 不再由输入向量X唯一确定。因此,在稀疏编码算法中,我们另加了一个评判标准“稀疏性”来解决因超完备而导致的退化(degeneracy)问题。

Sparse Coding的稀疏化是通过在上述式子中加入L1的Regularity限制,得到下面的优化方程



根据前面的的描述,稀疏编码是有一个明显的局限性的,这就是即使已经学习得到一组基向量,如果为了对新的数据样本进行“编码”,我们必须再次执行优化过程来得到所需的系数。这个显著的“实时”消耗意味着,即使是在测试中,实现稀疏编码也需要高昂的计算成本,尤其是与典型的前馈结构算法相比。该问题即求解LASSO问题。



二、Sparse Coding的实现问题

稀疏编码是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问题)。

三、Sparse CodingSparseAutoencoder的关系

两者的区别可以从其求解的优化方程中观察出来

Sparse Autoencoder如下所示(激活函数sigmoid没有在公式中体现出来,且decoder不一定是W矩阵)



与Sparse Coding所求解的问题


或者


形式上两个优化方程有很大相似性,但其思想是不同的:SAE是降维,SparseCoding是稀疏的基向量线性表示(类似PCA)。

另外,SAE的优势在于训练完成后,对新样本的前向传播编码速度很快(只是一个等式运算);SparseCoding则要对新样本解LASSO问题,计算速度很慢。

改进:论文《有稀疏编码k-Sparse Autoencoders》,其中讨论了SAESparseCoding的优缺点,K-Sparse Autoencoders can be effciently learnt and used for sparsecoding

四、实验结果:

(1)非拓扑结构8x8



figure(3);plot(featureMatrix(:,4),'o');%系数ai的波形,找出绝对值大的那几个

figure(4);display_network(batchPatches(:,4));%显示原始图案

pic=featureMatrix(20,4)*weightMatrix(:,20)+featureMatrix(21,4)*weightMatrix(:,21)+featureMatrix(55,4)*weightMatrix(:,55)+featureMatrix(80,4)*weightMatrix(:,80)+featureMatrix(104,4)*weightMatrix(:,104);

figure(5);display_network(pic);%显示重组图案



这是找到的最稀疏的基向量的系数ai,i=1:121。



原始图像



sparse Coding 重组图像:整体效果不错,局部灰度有差异

这里有个问题:有一些系数确实小,但是其对应基向量比较大时,SparseCoding就会出现较大的误差。

(2)拓扑结构8x8





系数的稀疏性不是很强(也是大部分结果的特征),应该是由于拓扑结构训练出来的基直接有很强的相似性。

(3)非拓扑结构16x16



稀疏性都不好

(4)拓扑16x16







来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: