深度学习五

转载:http://blog.csdn.net/zouxy09/article/details/8777094php

接上web

 

9.二、Sparse Coding稀疏编码算法

       若是咱们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即O = a11 + a22+….+ ann, Φi是基,ai是系数,咱们能够获得这样一个优化问题:dom

Min |I – O|,其中I表示输入,O表示输出。函数

       经过求解这个最优化式子,咱们能够求得系数ai和基Φi,这些系数和基就是输入的另一种近似表达。学习

       所以,它们能够用来表达输入I,这个过程也是自动学习获得的。若是咱们在上述式子上加上L1的Regularity限制,获得:优化

Min |I – O| + u*(|a1| + |a2| + … + |an |)编码

        这种方法被称为Sparse Coding。通俗的说,就是将一个信号表示为一组基的线性组合,并且要求只须要较少的几个基就能够将信号表示出来。“稀疏性”定义为:只有不多的几个非零元素或只有不多的几个远大于零的元素。要求系数 ai 是稀疏的意思就是说:对于一组输入向量,咱们只想有尽量少的几个系数远大于零。选择使用具备稀疏性的份量来表示咱们的输入数据是有缘由的,由于绝大多数的感官数据,好比天然图像,能够被表示成少许基本元素的叠加,在图像中这些基本元素能够是面或者线。同时,好比与初级视觉皮层的类比过程也所以获得了提高(人脑有大量的神经元,但对于某些图像或者边缘只有不多的神经元兴奋,其余都处于抑制状态)。spa

         稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据。虽然形如主成分分析技术(PCA)能使咱们方便地找到一组“完备”基向量,可是这里咱们想要作的是找到一组“超完备”基向量来表示输入向量(也就是说,基向量的个数比输入向量的维数要大)。超完备基的好处是它们能更有效地找出隐含在输入数据内部的结构与模式。然而,对于超完备基来讲,系数ai再也不由输入向量惟一肯定。所以,在稀疏编码算法中,咱们另加了一个评判标准“稀疏性”来解决因超完备而致使的退化(degeneracy)问题。(详细过程请参考:UFLDL Tutorial稀疏编码.net

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

       这里可能你们会有疑问,为何把底层做为Edge Detector呢?上层又是什么呢?这里作个简单解释你们就会明白,之因此是Edge Detector是由于不一样方向的Edge就可以描述出整幅图像,因此不一样方向的Edge天然就是图像的basis了……而上一层的basis组合的结果,上上层又是上一层的组合basis……(就是上面第四部分的时候我们说的那样)

       Sparse coding分为两个部分:

1)Training阶段:给定一系列的样本图片[x1, x 2, …],咱们须要学习获得一组基[Φ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问题)。

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

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

例如:

 

下续