AI机动队
首发于AI机动队
自编码器——深度学习第十四章

自编码器——深度学习第十四章

自编码器(Autoencoder)是一种特定的神经网络结构,其目的是为了将输入信息映射到某个更低维度的空间,生成包含重要特征的编码code,这部分称为Encoder,可用函数 h=f(x) 表示,然后再利用Decoder将code重构成为尽量能还原原输入的结果,用函数 r=g(h) 。我们的目的就是尽量使 g(f(x))=x ,当然如果只是简单的将输入复制到输出是没有任何意义的,我们需要加一定的限制条件,使我们的模型学习到数据中更重要的特征。有的时候,我们也需要将这种确定性的函数拓展到具有随机性的概率分布 p_{encoder}(h|x)p_{decoder}(x|h)

为了学习到重要的特征,我们可以限制编码 h 的维度小于输入,这种编码器成为欠完备编码器(Undercomplete Autoencoder)。其损失函数可以表示为 L(x,g(f(x))) ,函数 L 度量 g(f(x)) 偏离输入 x 的程度。当decoder函数 g 是线性函数, L 是均方差的时候,欠完备编码器学习到的空间与PCA(主成分分析PCA——深度学习花书第五章(六))相同。对于带有非线性函数编码解码函数的欠完备编码器,即使编码 h 的维度小于输入,我们也可以任意的改变非线性函数,将输入复制到输出而无需学习到有效的信息,所以怎样限制模型的容量才是关键。

正则自编码器(Regularized Autoencoder)通过向损失函数中加入对模型复杂度的惩罚项可以有效的解决模型容量过大的问题。模型的训练过程就需要在如下两种冲突中寻找平衡:1. 学习输入数据x的有效表示 h ,使得decoder可以有效的通过h重构x。2.满足惩罚项带来的限制条件,这可以通过限制模型的容量大小,也可以通过改变模型的重构损失,通常会使模型对于输入的扰动更不敏感。根据损失函数的不同形式主要有如下几种:

  • 稀疏自编码器(Sparse Autoencoder)向损失函数中加入关于编码的稀疏惩罚项 \Omega(h) ,例如 \Omega(h) = \lambda \sum_i |h_i| 。这样学习到的稀疏的表示提取了原数据中更重要的一些特征。
  • 去噪自编码器(Denoising Autoencoder)简称DAE,其输入是被损坏的数据,结果是希望能够重构未损坏的原数据。其训练过程是1.从训练数据中取样样本 x 。2.取样对应的损坏的结果 \tilde{x} ,这可以用条件概率 C(\tilde{x} | x=x) 来表示。3.将 (x, \tilde{x}) 作为训练数据来预测重构分布 p_{reconstruct}(x|\tilde{x}) = p_{decoder}(x|h) ,其中 h 是编码器 f(\tilde{x}) 的输出。我们可以将DAE训练过程看做是对于如下的期望的随机梯度下降过程 -E_{x\sim \hat p_{data}(x)}E_{\tilde{x}\sim C(\tilde{x}|x)}log p_{decoder}(x|h=f(\tilde{x})) 。如下图所示我们利用 g\circ f 操作将受损数据 \tilde{x} 尽量映射回原数据 x 所在的线上,也可以理解为DAE就是令重构函数更能抵抗输入中的微扰。
  • 收缩自编码器(Contractive Autoencoder)的惩罚项表示为 \Omega(h) = \lambda ||\frac{\partial f(x)}{\partial x}||_F^2 ,是雅可比矩阵的Frobenius范数,可理解为使得encoder更能抵抗输入中的微扰。

自编码器的主要应用有降维(dimensionality reduction)和信息检索(information retrieval)。降维前面已经提到,通过encoder我们可以将较复杂的输入编码到维度较低的空间中。信息检索主要是指从数据库中找到与用户的查询条目相近的条目,如果我们利用Autoencoder有效的将每个条目降维并用二进制编码每个维度上的值,则我们可以将数据库中的所有条目产生对应的在低维空间上的哈希码,我们可以有效的提取与用户的查询相同的哈希码,也可以通过改变某几个位上的比特值来寻找与用户查询相类似的条目,这种方法称为semantic hashing。

另外,某些生成模型也可以看做是一种特殊的自编码器,例如变分自编码器(variational autoencoder),这会在第20章一并总结。

发布于 2018-10-06

文章被以下专栏收录