上节使用简单方法阐述了自编码问题与简单操作,本节将正式开始探索深度学习的相关问题,第一个问题就是稀疏编码。
关于稀疏编码需要理解的几点:
(1)什么是稀疏编码?
(2)为什么要稀疏编码?
(3)稀疏编码的实现途径。
首先什么是稀疏编码?在这之前先看看稀疏表示。
从一个简单的例子说起,相信大多数人学过线性代数或者矩阵论之类的课程吧,再线性代数中,最初始的时候就会学到关于如何判断一大堆向量线性的相关或者不相关性,进而确定一组线性无关组。这里比如说空间中一个向量X是一个三维坐标点吧,用(x,y,z)表示。假设现在有一堆点X1(1,0,0);X2(0,1,0);X3(0,0,1);X4(4,3,5);X5(2,1,4)……等等吧,那么我们是不是可以找到这一大堆向量的最大线性无关组其实就可以用X1,X2,X3来表示,其他的任何向量Xi都可以用这三个向量来线性表示,当然用X1,X2,X3来表示任何一个向量来表示是最简单情况,你一个向量同样可以用X1,X2,X3,X4,X5来表示,不过这个多两个待确定系数而已。好了现在假设我们已知有X1~X10这十个向量,那么同空间中有一个向量我们就可以用X1~X10这十个向量线性表示,就有10个待确定系数。但是我们事先是知道一个向量只需要用X1,X2,X3来表示即可了,那么我们可以让上面需要确定的10个参数中的后7个参数约束为0即可,那么其实这个过程就是一种稀疏表示思想。
可以看出稀疏表示就是找到空间中的一组基,用这组基可以扩展到空间中的任何向量。
在比如在信号处理中,如何稀疏表示一个呢?比如下面一个信号:
同样的我们可以用一系列的基信号来表示(至于用什么基,这里谈一下,上面我们看出这个图其实无非是一个函数,只不过不太好直接写出函数表达式表示而已,如果能,傅里叶变换告诉我们,什么函数都可以分解成一系列正弦余弦函数表示吧),所以我们可以找到一系列基信号如下:
当然可能不止4个,可以有更多,越多表示的越准确,这也反过来说明稀疏表示的一个问题,那就是稀疏到什么程度?上述信号,如果只用前2个基信号表示的话,肯定会差很多,用前3个表示,好点,越多基信号,表示的越准确,然而另一个问题可以看出,用两个表示,极其稀疏,表示起来也简单,但是效果差,用n个,很不稀疏,但是效果好,所以一个信号到底要稀疏表示到什么程度需要自己去设计的,也就是说这是一个变化的参数。
把上述抽象成数学表示,假设原始信号为X,基信号为d1~dp,这些基信号组合成X的权值参数分别为a1~ap,那么也就是说
X=a1*d1+a2*d2+…+ap*dp=[d1,d2,…,dp]*[a1,a2,…,ap]’;如下所示
那么 α 就是我们要稀疏表示的吧,如果它之中0元素越多,就认为越稀疏表示了。这里再展开一点,就是实际中我们怎么去确定