一、Auto-encoder
通过重建输入得到一个低维空间的code
二、Deep Auto-encoder
输入从高维映射到低维再到高维。可以约束对应的encoder和decoder层的参数互为逆变换,即W1与W1^T对应,但一般没有必要约束,直接train就行。
在手写数字辨识中,Deep Auto-encoder比PCA重构的结果好,数据映射到低维空间区分度也更高。
三、应用
1、文字检索
2、图片搜索
直接对比图片像素可能得不到好的效果,如图所示可能将人脸识别成马蹄铁。而进行自编码得到code进行比较效果会更好。
3、预训练:Auto-encoder pre-training
auto-encoder可以帮助找到一组比较好的初始化参数。
预训练过程中,每一层的参数分别训练:
(1)如图1所示,对于左边的encode结构,首先取第一个隐藏层对输入进行重构,训练第一层参数(右边所示);训练完成之后保留w1参数,并去掉解码层,如图2所示;
(2)紧接着加入encoder第二层,对第一层的vector进行重构,如图3、4所示
(3)对于分类任务,每一层自编码预训练完成之后,加入分类层进行fine-tune微调。
(4)除了预训练,自编码可以用在数据很多但labeled数据不多的情形。
图1
图2
图3
图4
4、去噪自编码
四、其他非线性降维方法
RBM受限玻尔兹曼机并不是neural network
深度信念网络也与深度神经网络有所区别,具体参考链接
五、卷积自编码
1、unpooling:一种做法是在maxpooling的时候记录取值的位置,将这些位置标记成1,另外的标记成0,如图黑白矩阵所示;然后,在unpooling的时候将实际值填入1对应的位置。另外一种做法是将直接放大图片,2*2的unpooling将四个位置都填上相同的值。
2、Deconvolution
实质上,deconvolution就是convolution,如下例子是一维的卷积。
(1)如图最左边是一维卷积的示意图,卷积核大小为3,圆圈代表neural,箭头代表卷积操作,一个卷积核的三个参数用三种颜色表示。那么,依次移位做卷积操作,得到三个神经元,同一个卷积核的参数共享。
(2)如图中间的示意图,deconvolution应该是convolution反过来,每一个神经元影响三个神经元,然后在右边进行叠加,比如右边第二行有两条边,其结果就是两个结果叠加。
(3)再看最右边的示意图,对左边三个神经元进行padding操作(上下补零),相应的补上箭头,即变成卷积操作。区别在于,将原来卷积核的weight值反过来(看颜色)。
六、decoder生成数据(图片)
做法:在低维空间中随意取一些点,不一定是源数据映射的,可以是他们所在区域的采样点。如图所示,左边是实际数据train得到的低维分布,对红色方框内进行等间隔采样(包含空白区域),用decoder生成了手写字母。
图中数据在有些区域分布较分散,有些生成的数据比较怪,则可以对code进行正则化约束,如L2范数,使得code都在0附近,结果如右图所示。