Linear Factor Models and Auto-Encoders

文章来自MIT的Deep Learning未出版版本:

@unpublished{Bengio-et-al-2015-Book,
title={Deep Learning},
author={Yoshua Bengio and Ian J. Goodfellow and Aaron Courville},
note={Book in preparation for MIT Press},
url={http://www.iro.umontreal.ca/~bengioy/dlbook},
year={2015}
}

Deep Learning Book: Chapter 15: Linear Factor Models and Auto-Encoders

Linear Factor Models(线性因子模型):

Linear Factor是无监督的生成模型,通过线性变化,将可观测的输入向量x在隐藏层h中重新解释。

Auto-encoders(自动编码机):

Auto-encoders是无监督的学习算法,

  • 通过非线性的参数化转换,将输入数据x进行重构生成h。它可以是一个前向神经网络,也可以是其它形式。
  • 再通过类似于Linear Factor Models,将重构h向后重新还原成数据r。

Alt text
如上图所示,Linear Factor Models只包含上面的Decoder解码部分,而AE则是包含Encoder和Decoder两个部分。
PCA(主成分分析法)是其中一种Linear Factor Models,也可以看成是一种线性的auto-encoder,但是对于其它的Linear Factor Models,都是隐式地定义了从h到x的推断机制。

自动编码机的概念和模型其实早在神经网络年代就已经被提出了,但是近年来又重新火了起来。它们沉寂了很多年,因为人们一直以来都认为它背后的数学解释和几何基础不完整。(Hinton的课程中提到,一直以来AU的效果竟然比不上PCA,直到Russ Salakhutdinov 和Hinton提出用于预训练的方式一层一层训练整个网络之后,效果比PCA提升了很多!)

自动编码机的核心思想就是:通过神经网络,让输出尽量和输入相像!

可以看上面那个图,整个系统由下面这些部分组成:

  • 输入 x
  • 编码函数 f
  • “code”,或者叫internal representation(中间表示) h = f(x)
  • 解码函数 g
  • 输出, 或者叫 “reconstruction”(重构) r = g ( h ) = g ( f ( x ) )
  • 损失函数L(r, x),用来计算重构r和输入x之间的差异,衡量重构的好坏。我们的目标是让L最小

15.1 Regularized Auto-Encoders

如果重构出来的r仅仅和原来的x一模一样,那么整个AE就完全没有用。为了让重构出来的r不和原来的x一模一样,增加了约束条件:也就是让h的维度比x的维度更小(或者更大)。
Alt text
看这个图,我们主要看中间h对应的那个线段的长短:

  • 左图h的长度比x小,这是一种不完全的表示,我们叫做code bottleneck(瓶颈,很形象),就如PCA(降维)所做的一样
  • 右图h的长度比x大,是一种过度的表示

h的长度如果比x小,这样的模型的应用很直观。Hinton的课程中举过例子,在文档检索中,每一篇文档提取出一系列bag of words。现在拿query文档的bag of words向量和数据库中所有文档的bag of words向量去比较,由于数据库很大,那么比较的速度会很慢。但是现在如果说把bag of words压缩,本来2000维的压缩成10维,那么比较的速度将会大大提升!实验证明使用AE是很有效的。

但是h的长度比x大的应用乍一看好像不好想。事实上,如果说h的维度比x高,那么能够更好地挖掘x的结构特征!作者认为如果你想更好地挖掘输入的分布,那么你不应该被输入的维度所限制。

除了bottleneck constraint之外,还有下面几种约束或者加正则项的方法来保证AE不是单纯的进行输入的复制:

  • 稀疏地表示或者稀疏地表示输入的导数。虽然h的维度比x大很多,但是很有可能有用的只是局部的维度,而更多的维度都是0(或者$|| \frac {\partial h_i }{ \partial x} ||$接近0).
    当$|| \frac {\partial h_i }{ \partial x} ||$接近0的时候,hi并没有参与到对x的局部变化编码中。这在几何学上可以用manifold learning(流形学习)来很好地解释。符合这种稀疏方法的AE有至少有下面四种:

    • Sparse coding。它已经被研究地很透彻了。这是一种linear factor model,而不是auto-encoder,因为它没有显示的编码参数,而是使用迭代优化过程来计算code(也就是h)的最大似然(就是说最接近x)。sparse coding是这么做的:
      Alt text
      这里的L是重构损失函数,f是编码函数(没有参数),g是解码函数(有参数),$\Omega(h)$是稀疏正则项。Sparse coding不仅有着流形或者几何学解释,而且可以用有向图来解释。
    • predictive sparse decomposition (PSD)。这是sparse coding的一种变形,它可以自由选择使用优化编码器还是有参数编码器。
    • sparse auto-encoders。它在auto-encoder的基础上增加了一个稀疏惩罚项,来让编码器的输出变得稀疏。除了L1惩罚项之外,还有t-分布惩罚项。
    • Contractive autoencoders。显示的惩罚项为$|| \frac {\partial h_i }{ \partial x} ||^2_F$
  • 对于噪声和缺失信息的输入有很强的鲁棒性。如果在输入层或者隐藏层增加噪声,或者输入有缺失,在这样的情况下仍然需要网络来重构出完整、无噪声的输入,那么网络就必须抓住输入数据分布的结构,来最佳地重构。这样的auto-encoder我们叫做denoising auto-encoders(除噪自动编码机)。

—待续