自动编码机(Auto-encoder, AE)
自动编码机(Auto-encoder)属于非监督学习,不需要对训练样本进行标记。自动编码机(Auto-encoder)由三层网络组成,其中输入层神经元数量与输出层神经元数量相等,中间层神经元数量少于输入层和输出层。在网络训练期间,对每个训练样本,经过网络会在输出层产生一个新的信号,网络学习的目的就是使输出信号与输入信号尽量相似。自动编码机(Auto-encoder)训练结束之后,其可以由两部分组成,首先是输入层和中间层,我们可以用这个网络来对信号进行压缩;其次是中间层和输出层,我们可以将压缩的信号进行还原。
自动编码机原理,假设我们输入一个n维的信号
x(x∈[0,1])
,经过输入层到达中间层,信号变为
y
,可以用如下公式表示:
上式中中 s 是非线性函数,如
上式中中 s 是非线性函数,如
当前的问题就是调整网络参数,使得最终输出的z与原始输入的信号x尽量的接近。根据输入数据的假设分布,有很多误差计算方法。可以使用典型的平方误差(squared error): L(x,z)=||x−z||2 . 如果输入的数据为位向量或者是位概率向量,可以使用交叉熵方法:
我们希望中间层输出的分布式 y ,它能够捕获数据变化的主要因素的坐标数据。这类似于将数据投影到主成分上,可以获取数据变化的主要因素。如果我们将输入层与中间层之间的函数
因为y可以视为 x <script type="math/tex" id="MathJax-Element-186">x</script>的有损压缩形式,通过我们的优化算法,可以对训练样本产生很好的压缩效果,同时在测试样本集上有很好的表现,但是我们并不能保证网络可以所有样本都有好的压缩效果。
降噪自动编码器(Denoising Auto-encoder, dAE)
在神经网络模型训练阶段开始前,通过Auto-encoder对模型进行预训练可确定编码器W的初始参数值。然而,受模型复杂度、训练集数据量以及数据噪音等问题的影响,通过Auto-encoder得到的初始模型往往存在过拟合的风险。关于Auto-encoder的介绍请参考:自动编码器(Auto-encoder)。
Denoising Autoencoder(降噪自动编码器)就是在Autoencoder的基础之上,为了防止过拟合问题而对输入的数据(网络的输入层)加入噪音,使学习得到的编码器W具有较强的鲁棒性,从而增强模型的泛化能力。Denoising Auto-encoder是Bengio在08年提出的,具体内容可参考其论文:Extracting and composing robust features with denoising autoencoders.
论文中关于Denoising Auto-encoder的示意图如下,其中x是原始的输入数据,Denoising Auto-encoder以一定概率把输入层节点的值置为0,从而得到含有噪音的模型输入xˆ。这和dropout很类似,不同的是dropout是隐含层中的神经元置为0。
以这丢失的数据x’去计算y,计算z,并将z与原始x做误差迭代,这样,网络就学习了这个破损(原文叫Corruputed)的数据。
这个破损的数据是很有用的,原因有二:
其之一,通过与非破损数据训练的对比,破损数据训练出来的Weight噪声比较小。降噪因此得名。原因不难理解,因为擦除的时候不小心把输入噪声给×掉了。
其之二,破损数据一定程度上减轻了训练数据与测试数据的代沟。由于数据的部分被×掉了,因而这破损数据一定程度上比较接近测试数据。(训练、测试肯定有同有异,当然我们要求同舍异)。
Denoising Auto-encoder与人的感知机理类似,比如人眼看物体时,如果物体某一小部分被遮住了,人依然能够将其识别出来。
人在接收到多模态信息时(比如声音,图像等),少了其中某些模态的信息有时也不会造成太大影响。
Autoencoder的本质是学习一个相等函数,即网络的输入和重构后的输出相等,这种相等函数的表示有个缺点就是当测试样本和训练样本不符合同一分布,即相差较大时,效果不好,而Denoising Autoencoder在这方面的处理有所进步。