http://blog.csdn.net/zouxy09/article/details/8777094
如何理解深度学习中的deconvolution networks?谭旭的回答
如果我们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即
ϕi 是基, ai 是系数,我们可以得到这样一个优化问题:
I 是输入,
稀疏性
只有很少的几个非零元素或只有很少的几个远大于零的元素。
系数 ai 是稀疏的
对于一组输入向量,我们只想有尽可能少的几个系数远大于零。
选择使用具有稀疏性的分量来表示我们的输入数据是有原因的,因为绝大多数的感官数据,比如自然图像,可以被表示成少量基本元素的叠加,在图像中这些基本元素可以是面或者线。同时,比如与初级视觉皮层的类比过程也因此得到了提升(人脑有大量的神经元,但对于某些图像或者边缘只有很少的神经元兴奋,其他都处于抑制状态)。
稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”(详见《特征选择和特征学习中的过完备》)基向量来更高效地表示样本数据。虽然形如主成分分析技术(PCA) 能使我们方便地找到一组“完备”基向量,但是这里我们想要做的是找到一组“超完备”基向量来表示输入向量(也就是说,基向量的个数比输入向量的维数要大)。超完备基的好处是它们能更有效地找出隐含在输入数据内部的结构与模式(pattern)。由于basis空间是over-complete的,所以系数a就不是唯一的了(一个不太恰当的类比就是方程组求解中,求解三个未知数,但只有两个方程,所以求得的未知数不唯一),所以要引入sparsity,方法就是加正则。因此,在稀疏编码算法中,我们另加了一个评判标准“稀疏性”来解决因超完备而导致的退化(degeneracy)问题。(详细过程请参考:UFLDL Tutorial稀疏编码)
Sparse coding分为两步:
- Training:给定一系列的样本图片
[x1,x2,...]
,我们需要学习得到一组基
[ϕ1,ϕ2,...]
,也就是字典。
稀疏编码是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问题)。
不断迭代,直至收敛。这样就可以得到一组可以良好表示这一系列 xi 的基,也就是字典。 - Coding:给定一个新的图片x,由上面得到的字典,通过解一个LASSO问题得到稀疏向量a。这个稀疏向量就是这个输入向量x的一个稀疏表达了。
例如: