自编码器

自编码器(auto-encoder)是神经网络的一种,经过训练后能尝试将输入复制到输出。自编码器内部有一个隐藏层h,可以产生编码表示输入。该网络可以看作由两个部分组成:一个由函数h=f(x)表示的编码器和一个生成重构的解码器r=g(h)。我们会将自编码器设计成输入到输出近似相等,通常需要向自编码器强加一些一些约束,使它只能近似地复制。这些约束强制模型考虑输入数据的哪些部分需要被优先复制,因此它往往能学习到数据的有用特性。传统自编码器被用于降维或特征学习。

1. 欠完备自编码器

我们通常不关心解码器的输出,一般希望通过训练自编码器对输入进行复制而使h获得有用特性。从自编码器获得有用特征的一种方法是限制h的维度比x小,这种编码维度小于输入维度的自编码器称为欠完备自编码器。学习欠完备的表示将强制自编码器捕捉训练数据中最显著的特征。

拥有非线性编码器函数f 和非线性解码器函数g 的自编码器能够学习出更强大的PCA 非线性推广。不幸的是,如果编码器和解码器被赋予过大的容量,自编码器会执行复制任务而捕捉不到任何有关数据分布的有用信息。

2. 正则自编码器

理想情况下,根据要建模的数据分布的复杂性,选择合适的编码维数和编码器、解码器容量,就可以成功训练任意架构的自编码器。正则自编码器提供这样的能力。正则自编码器使用的损失函数可以鼓励模型学习其他特性(除了将输入复制到输出),而不必限制使用浅层的编码器和解码器以及小的编码维数来限制模型的容量。
这些特性包括稀疏表示、表示的小导数、以及对噪声或输入缺失的鲁棒性。即使模型容量大到足以学习一个无意义的恒等函数,非线性且过完备的正则自编码器仍然能够从数据中学到一些关于数据分布的有用信息。

  • 稀疏自编码器

    稀疏自编码器简单地在训练时结合编码层的稀疏惩罚项和重构误差:

    其中g(h)是解码器输出,通常h是编码器的输出,即h=f(x)。

    稀疏自编码器一般用来学习特征,以便用于像分类这样的任务。稀疏正则化的自编码器必须反映训练数据集的独特统计特征,而不是简单地充当恒等函数。以这种方式训练,执行附带稀疏惩罚的复制任务可以得到能学习有用特征的模型。

    我们可以认为整个稀疏自编码器框架是对带有潜变量的生成模型的近似最大似然训练,而不将稀疏惩罚视为复制任务的正则化。

  • 去噪自编码器

    去噪自编码器(denoising autoencoder, DAE)最小化

    其中x~是被某种噪声损坏的x的副本。因此去噪自编码器必须撤销这些损坏,而不是简单地复制输入。

3. 表示能力、层的大小和深度

自编码器通常只有单层的编码器和解码器,但这不是必然的。实际上深度编码器和解码器能提供更多优势。

万能近似定理保证至少有一层隐藏层且隐藏单元足够多的前馈神经网络能以任意精度近似任意函数(在很大范围里),这是非平凡深度(至少有一层隐藏层)的一个主要优点。这意味着具有单隐藏层的自编码器在数据域内能表示任意近似数据的恒等函数。但是,从输入到编码的映射是浅层的。这意味这我们不能任意添加约束,比如约束编码稀疏。深度自编码器(编码器至少包含一层额外隐藏层)在给定足够多的隐藏单元的情况下,能以任意精度近似任何从输入到编码的映射。

深度可以指数地降低表示某些函数的计算成本。深度也能指数地减少学习一些函数所需的训练数据量。