Deep Learning 学习 Toolbox学习记录四 Sparse Coding
2014-04-07 16:13
274 查看
Deep Learning 学习 Toolbox学习记录四 Sparse Coding
一、Sparse Coding的基本思想
根据线性代数中基的概念,Sparse Coding试图寻找一组“超完备”基向量,用这组基可以线性重构原始图像。
![](http://images.cnitblog.com/blog/616898/201404/071613333569062.jpg)
对于超完备基来说,系数 ai 不再由输入向量X唯一确定。因此,在稀疏编码算法中,我们另加了一个评判标准“稀疏性”来解决因超完备而导致的退化(degeneracy)问题。
Sparse Coding的稀疏化是通过在上述式子中加入L1的Regularity限制,得到下面的优化方程
![](http://images.cnitblog.com/blog/616898/201404/071613335906992.jpg)
根据前面的的描述,稀疏编码是有一个明显的局限性的,这就是即使已经学习得到一组基向量,如果为了对新的数据样本进行“编码”,我们必须再次执行优化过程来得到所需的系数。这个显著的“实时”消耗意味着,即使是在测试中,实现稀疏编码也需要高昂的计算成本,尤其是与典型的前馈结构算法相比。该问题即求解LASSO问题。
![](http://images.cnitblog.com/blog/616898/201404/071613352156462.jpg)
二、Sparse Coding的实现问题
稀疏编码是k-means算法的变体,其训练过程也差不多(EM算法的思想:如果要优化的目标函数包含两个变量,如L(W, B),那么我们可以先固定W,调整B使得L最小,然后再固定B,调整W使L最小,这样迭代交替,不断将L推向最小值。EM算法可以见我的博客:“从最大似然到EM算法浅解”)。
训练过程就是一个重复迭代的过程,按上面所说,我们交替的更改a和Φ使得下面这个目标函数最小。
![](http://images.cnitblog.com/blog/616898/201404/071613355123203.jpg)
每次迭代分两步:
a)固定字典Φ[k],然后调整a[k],使得上式,即目标函数最小(即解LASSO问题)。
b)然后固定住a [k],调整Φ [k],使得上式,即目标函数最小(即解凸QP问题)。
三、Sparse Coding和SparseAutoencoder的关系
两者的区别可以从其求解的优化方程中观察出来
Sparse Autoencoder如下所示(激活函数sigmoid没有在公式中体现出来,且decoder不一定是W矩阵)
![](http://images.cnitblog.com/blog/616898/201404/071613358723861.jpg)
与Sparse Coding所求解的问题
![](http://images.cnitblog.com/blog/616898/201404/071613333569062.jpg)
或者
![](http://images.cnitblog.com/blog/616898/201404/071613360754332.jpg)
形式上两个优化方程有很大相似性,但其思想是不同的:SAE是降维,SparseCoding是稀疏的基向量线性表示(类似PCA)。
另外,SAE的优势在于训练完成后,对新样本的前向传播编码速度很快(只是一个等式运算);SparseCoding则要对新样本解LASSO问题,计算速度很慢。
改进:论文《有稀疏编码k-Sparse Autoencoders》,其中讨论了SAE和SparseCoding的优缺点,K-Sparse Autoencoders can be effciently learnt and used for sparsecoding。
四、实验结果:
(1)非拓扑结构8x8
![](http://images.cnitblog.com/blog/616898/201404/071613364181761.jpg)
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);%显示重组图案
![](http://images.cnitblog.com/blog/616898/201404/071613366845745.jpg)
这是找到的最稀疏的基向量的系数ai,i=1:121。
![](http://images.cnitblog.com/blog/616898/201404/071613370594931.jpg)
原始图像
![](http://images.cnitblog.com/blog/616898/201404/071613372476874.jpg)
sparse Coding 重组图像:整体效果不错,局部灰度有差异
这里有个问题:有一些系数确实小,但是其对应基向量比较大时,SparseCoding就会出现较大的误差。
(2)拓扑结构8x8
![](http://images.cnitblog.com/blog/616898/201404/071613375751074.jpg)
![](http://images.cnitblog.com/blog/616898/201404/071613379034274.jpg)
系数的稀疏性不是很强(也是大部分结果的特征),应该是由于拓扑结构训练出来的基直接有很强的相似性。
(3)非拓扑结构16x16
![](http://images.cnitblog.com/blog/616898/201404/071613382936688.jpg)
稀疏性都不好
(4)拓扑16x16
![](http://images.cnitblog.com/blog/616898/201404/071613387785373.jpg)
![](http://images.cnitblog.com/blog/616898/201404/071613391068572.jpg)
![](http://images.cnitblog.com/blog/616898/201404/071613393565029.jpg)
来自为知笔记(Wiz)
一、Sparse Coding的基本思想
根据线性代数中基的概念,Sparse Coding试图寻找一组“超完备”基向量,用这组基可以线性重构原始图像。
![](http://images.cnitblog.com/blog/616898/201404/071613333569062.jpg)
对于超完备基来说,系数 ai 不再由输入向量X唯一确定。因此,在稀疏编码算法中,我们另加了一个评判标准“稀疏性”来解决因超完备而导致的退化(degeneracy)问题。
Sparse Coding的稀疏化是通过在上述式子中加入L1的Regularity限制,得到下面的优化方程
![](http://images.cnitblog.com/blog/616898/201404/071613335906992.jpg)
根据前面的的描述,稀疏编码是有一个明显的局限性的,这就是即使已经学习得到一组基向量,如果为了对新的数据样本进行“编码”,我们必须再次执行优化过程来得到所需的系数。这个显著的“实时”消耗意味着,即使是在测试中,实现稀疏编码也需要高昂的计算成本,尤其是与典型的前馈结构算法相比。该问题即求解LASSO问题。
![](http://images.cnitblog.com/blog/616898/201404/071613352156462.jpg)
二、Sparse Coding的实现问题
稀疏编码是k-means算法的变体,其训练过程也差不多(EM算法的思想:如果要优化的目标函数包含两个变量,如L(W, B),那么我们可以先固定W,调整B使得L最小,然后再固定B,调整W使L最小,这样迭代交替,不断将L推向最小值。EM算法可以见我的博客:“从最大似然到EM算法浅解”)。
训练过程就是一个重复迭代的过程,按上面所说,我们交替的更改a和Φ使得下面这个目标函数最小。
![](http://images.cnitblog.com/blog/616898/201404/071613355123203.jpg)
每次迭代分两步:
a)固定字典Φ[k],然后调整a[k],使得上式,即目标函数最小(即解LASSO问题)。
b)然后固定住a [k],调整Φ [k],使得上式,即目标函数最小(即解凸QP问题)。
三、Sparse Coding和SparseAutoencoder的关系
两者的区别可以从其求解的优化方程中观察出来
Sparse Autoencoder如下所示(激活函数sigmoid没有在公式中体现出来,且decoder不一定是W矩阵)
![](http://images.cnitblog.com/blog/616898/201404/071613358723861.jpg)
与Sparse Coding所求解的问题
![](http://images.cnitblog.com/blog/616898/201404/071613333569062.jpg)
或者
![](http://images.cnitblog.com/blog/616898/201404/071613360754332.jpg)
形式上两个优化方程有很大相似性,但其思想是不同的:SAE是降维,SparseCoding是稀疏的基向量线性表示(类似PCA)。
另外,SAE的优势在于训练完成后,对新样本的前向传播编码速度很快(只是一个等式运算);SparseCoding则要对新样本解LASSO问题,计算速度很慢。
改进:论文《有稀疏编码k-Sparse Autoencoders》,其中讨论了SAE和SparseCoding的优缺点,K-Sparse Autoencoders can be effciently learnt and used for sparsecoding。
四、实验结果:
(1)非拓扑结构8x8
![](http://images.cnitblog.com/blog/616898/201404/071613364181761.jpg)
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);%显示重组图案
![](http://images.cnitblog.com/blog/616898/201404/071613366845745.jpg)
这是找到的最稀疏的基向量的系数ai,i=1:121。
![](http://images.cnitblog.com/blog/616898/201404/071613370594931.jpg)
原始图像
![](http://images.cnitblog.com/blog/616898/201404/071613372476874.jpg)
sparse Coding 重组图像:整体效果不错,局部灰度有差异
这里有个问题:有一些系数确实小,但是其对应基向量比较大时,SparseCoding就会出现较大的误差。
(2)拓扑结构8x8
![](http://images.cnitblog.com/blog/616898/201404/071613375751074.jpg)
![](http://images.cnitblog.com/blog/616898/201404/071613379034274.jpg)
系数的稀疏性不是很强(也是大部分结果的特征),应该是由于拓扑结构训练出来的基直接有很强的相似性。
(3)非拓扑结构16x16
![](http://images.cnitblog.com/blog/616898/201404/071613382936688.jpg)
稀疏性都不好
(4)拓扑16x16
![](http://images.cnitblog.com/blog/616898/201404/071613387785373.jpg)
![](http://images.cnitblog.com/blog/616898/201404/071613391068572.jpg)
![](http://images.cnitblog.com/blog/616898/201404/071613393565029.jpg)
来自为知笔记(Wiz)
相关文章推荐
- Deep Learning 学习 Toolbox学习记录一 CNN例子的学习理解
- Deep Learning 学习 Toolbox学习记录一 CNN例子的学习理解
- Deep Learning 学习 Toolbox学习记录二 稀疏自编码器
- Deep Learning 学习 Toolbox学习记录二 稀疏自编码器
- Deep Learning 学习 Toolbox学习记录三DenoisingAutoencoder
- 传统方法学习(Sparse coding and ICA model)的过完备字典带来的问题
- [Deep Learning]学习记录1-Python实现神经网络BP算法
- Deep learning:二十六(Sparse coding简单理解)
- deep learning学习-caffe安装记录
- Sparse Coding Toolbox——Open-Source!
- deep learning学习记录三
- Deep Learning:Sparse Coding ScSPM & LLC
- Deep Learning 1_深度学习UFLDL教程:Sparse Autoencoder练习(斯坦福大学深度学习教程)
- Deep Learning 系列(4):稀疏编码(sparse coding)和主成分分析(ICA)
- 深度学习基础(九)—— 稀疏编码(sparse coding)
- deep learning学习记录一
- [Deep Learning]学习记录1-Python实现神经网络BP算法
- 在线字典学习(Online dictionary learning for sparse coding)-机器学习
- Deep learning:二十九(Sparse coding练习)
- Deep learning:二十七(Sparse coding中关于矩阵的范数求导)