《机器学习》学习笔记(十七)—无监督学习:深度自动编码器

自动编码器

将神经网络的隐含层看成是一个编码器和解码器,输入数据经过隐含层的编码和解码,到达输出层时,确保输出的结果尽量与输入数据保持一致。也就是说,隐含层是尽量保证输出数据等于输入数据的。 这样做的一个好处是,隐含层能够抓住输入数据的特点,使其特征保持不变。

例如,假设输入层有100个神经元,隐含层只有50个神经元,输出层有100个神经元,通过自动编码器算法,我们只用隐含层的50个神经元就找到了100个输入层数据的特点,能够保证输出数据和输入数据大致一致,就大大降低了隐含层的维度。

《机器学习》学习笔记(十七)—无监督学习:深度自动编码器

从 PCA 开始

使用PCA对数据进行降维和重构的过程大致上如下图所示

《机器学习》学习笔记(十七)—无监督学习:深度自动编码器
首先将输入的数据乘以一个矩阵 WW 得到降维之后的结果,之后再将降维之后的数据乘以之前权重矩阵的转置 WTW^T,恢复得到近似的原始图像。在这个过程中,我们希望输入层与输出层的图像之间越相似越好。这个过程也已通过神经网络的方式实现,其中输入层到隐藏层的过程是编码(encode)过程,而从隐藏层到输出层的过程是解码的过程(decode)。因为隐藏层得到的结果往往会比原始的维数小,就像一个瓶子的瓶颈一样狭窄,所以也将隐藏层称为 bottleneck layer 。

深度自动编码器

在神经网络中添加层数,将编码器深度化,我们容易想到这个过程
《机器学习》学习笔记(十七)—无监督学习:深度自动编码器

其中有两点需要注意,首先这里认为前后的权重矩阵是对称的,然而不是对称的也没过关系,因为用的是神经网络的方法而不是PCA的方法,不必满足前后的对称慈宁宫;其次这个模型原先需要采用RBM的方法逐层初始化,以现在训练神经网络的技术也可以不用了,所以上面的训练过程和一般的神经网络并没有什么区别。

训练结果
《机器学习》学习笔记(十七)—无监督学习:深度自动编码器

上图所示自动编码器,784维的输入经过多层编码器,得到30维的code,接着再将其进行解码,可以看出效果是较理想的。

深度自动编码器的应用

1、文本检索
《机器学习》学习笔记(十七)—无监督学习:深度自动编码器
一般的文本检索方法有向量空间模型(Vector Space Model),上图中蓝色的点代表的是文档(经过降维后),接着计算要查询的文档与其他的距离,选择较为接近,相似程度高的,但这个模型的好坏关键取决于向量化的好坏;单词包(Bag-of-word),通过建立一个词向量,若文档中存在某些词记1否则记0,然后再计算相似性,但此模型不能很好的表达语义层面。

自编码器可以很好的实现文本搜索。具有相同主题的文档会有相近的code。
《机器学习》学习笔记(十七)—无监督学习:深度自动编码器

2、图像搜索
通过在code上计算相似度,有着很好的效果。
《机器学习》学习笔记(十七)—无监督学习:深度自动编码器
3、预训练深度神经网络(Pre-training DNN)
在深度学习中,自编码器可用于在训练阶段开始前,确定权重矩阵W的初始值。

神经网络中的权重矩阵 WW 可看作是对输入的数据进行特征转换,即先将数据编码为另一种形式,然后在此基础上进行一系列学习。如果编码后的数据能够较为容易地通过解码恢复成原始数据,我们则认为 WW 较好的保留了数据信息。

《机器学习》学习笔记(十七)—无监督学习:深度自动编码器
4、卷机神经网络中的自动编码器
《机器学习》学习笔记(十七)—无监督学习:深度自动编码器
CNN主要是卷积(Convolution)和池化(Pooling)操作。

因此相对应的就要有反卷积(Deconvolution)和反池化(Depooling)操作。

反池化很好理解,只需记住池化过程中的位置(最大值出现的地方),在反池化的过程中,将对应位置置相应的值,其余位置置0即可。

而反卷积的过程实际上就是一个卷积的过程,我们以一维的卷积为例进行说明 ,如左下图所示是一个一维卷积的例子,我们可以看到经过三个卷积核之后,数据由5维降低至3维,所以如果想得到原来的效果就应该如中间图那样进行计算,每一个神经元伸出去三个权重,得到的位置重叠的结果进行相加,这个过程实际上等同与右侧的过程,但是需要进行补零,所以反卷积的过程实际上就是卷积。
《机器学习》学习笔记(十七)—无监督学习:深度自动编码器