在06年以前,想要去训练一个多层的神经网络是比较困难的,主要的问题是超过两层的模型,当时没有好的策略或方法使模型优化的很好,得不到预期的效果。在06年,Hinton提出的stacked autoencoders 改变了当时的情况,那时候的研究者就开始关注各种自编码模型以及相应的堆叠模型。这篇的作者提出的DAE(Denoising Autoencoders)就是当时蛮有影响力的工作。
那个时候多层模型效果得到提升的一个关键的因素就是采用像自编码器这类无监督训练方式做逐层的预训练(layer-wise pre-training),然后后接分类器做 global fine-tuning。而作者提出的去噪自编码器通过给原始输入加入噪音作为编码器的输入,解码器重构出原始输入 的方式改进了原始自编码器。
Methods
自编码器作为深度学习模型进行表示学习的典型方法,它的思路非常简单,就是将输入映射到某个特征空间,再从这个特征空间映射回输入空间进行重构。从结构上看,它由编码器和解码器组成,编码器用于从输入数据中提取特征,解码器用于基于提取的特征重构输入数据。在训练完成后,使用编码器进行特征提取。这种编码器-解码器的思想在许多深度学习模型中都有体现。
这种原始的自编码器能力是受限的,在满足 d ′ < d d' < d d′<d,模型提取的特征效果比较好,如果放宽限制,允许 d ′ ≥ d d' \geq d d′≥d,除此之外如果不加任何限制,有可能学习不到任何有用的信息。其本质原因不是维度约束的变化,而是当我们赋予编码器和解码器过于强大的“能力”时,自编码器便倾向于直接将输入拷贝到输出,而不会从数据中提取到有用的特征。
那么考虑一个问题,好的特征应该满足哪些标准?上面也提到了中间表示(intermediate representation)的维度限制能确保比较好的性能,但这个限制又不能太强,那样会造成原信息的损失,那么第一个标准就是保证不损失原输入信息的限制表示。
第二点就是表示的稀疏性(可以由稀疏自编码器实现)。这里值得注意的是,这里实现的稀疏性不是由像L1这类正则项产生的稀疏解,而是模型提取出的特征是稀疏的,但如果非线性变换用的是ReLU这类激活函数,相应的特征也是稀疏的。
这时,作者提出一个标准,即对输入的部分"破坏"具有鲁棒性(robustness to partial destruction of the input),换句话说就是对于扰动的输入能得到相同的 representation。他的这么一个想法来自于:我们人类能够识别受损或遮掩的图像(A hallmark of this is our human ability to recognize partially occluded or corrupted images)。这也就意味着一个好的 representation 应该捕捉稳定的结构,而这种结构就是依赖关系和原始输入分布的规律性特征,尽管输入部分"破坏"(未破坏其规律特征的情况下),依旧能提取出好的表示。
The Denoising Autoencoder
基于这个想法,那就考虑如何能使学到的特征尽可能的鲁棒。一个很自然的想法就是在训练时,"破坏"部分输入,这样自编码器就不是从原始输入中重构出原始输入,而是从被"破坏"的原始输入中重构出原始输入,而这中间学习到的特征就具备了捕捉稳定结构的能力。其具体的数学定义如下:
原始输入为 x ∈ R d x \in \mathbb{R}^d x∈Rd,设定一个"破坏"比例 v v v,即输入的 x x x 向量中,将随机 v d vd vd 个位置的数将被"破坏"为0,得到被"破坏"的输入 x ~ \tilde{x} x~,那么编码阶段有 y = f θ ( x ~ ) = s ( W x ~ + b ) y = f_{\theta}(\tilde{x})=s(W\tilde{x} + b) y=