C14. AutoEncoders
自编码器(autoencoder)是一种深度神经网络,能够经过训练后将输入复制到输出。
- 自编码器的内部有一个隐藏层 $\pmb{h}$,可以产生编码用于表示输入。
- 自编码器的网络组成(图 14.1)
- 函数 $\pmb{h}=f(\pmb{x})$ 表示编码器
- 函数 $\pmb{r}=g(\pmb{h})$ 表示生成重构的解码器
- 传统的自编码器用于降维或者特征学习
- 自编码器在生成式建模中的应用(Ch20.md)
14.1 Undercomplete Autoencoders
欠完备(Undercomplete)自编码器:编码维度小于输入维度,强制自编码器捕捉训练数据中最显著的特征
- 学习过程
- 最小化一个损失函数 $L(\pmb{x},g(f(\pmb{x})))$
- $L$ 是损失函数,惩罚 $g(f(\pmb{x}))$ 与 $\pmb{x}$ 之间的差异,例如:均方误差
- 学习成果
- 当解码器是线性的,损失函数是均方误差,则学习结果与PCA在相同的生成子空间
- 当编码器和解码器都是非线性函数时,则学习结果与非线性PCA在相同的生成子空间
14.2 Regularized Autoencoders
过完备(Overcomplete)自编码器:编码维度大于输入维度。
为了避免模型只学会简单的输入复制到输出,可以采用的方法
- 正则化(Regularized)自编码器:添加正则约束,鼓励模型学习其他特性
- 稀疏自编码器
- 去噪自编码器([Sec 14.5](#14.5 Denoising AutoEncoders))
- 收缩自编码器([Sec 14.6](#14.6 Learning Manifolds with Autoencoders))
- 生成式建模方法:无须对模型进行正则化,也能够学习出高容量并且过完备的模型,模型被训练为近似训练数据的概率分布,进而发现输入数据中有用的结构信息
- Helmholtz机的衍生模型:变分自编码器(Sec 20.10.3)和生成随机网络(Sec 20.12)
注:任何带有隐变量并且配有一个推断过程(计算给定输入的潜在表示)的生成模型,都可以看作自编码器的一个特殊形式。
14.2.1 Sparse Autoencoders
稀疏(Sparse)自编码器:损失函数增加与编码层相关的稀疏惩罚$\Omega(\pmb{h})$
- 损失函数:$L(\pmb{x},g(f(\pmb{x})))+\Omega(\pmb{h})$
- $\pmb{h}$ 是编码器的输出
- $g(\pmb{h})$是解码器的输出,即 $\pmb{h}=f(\pmb{x})$
- 作用:用于学习特征,支持分类任务
- 特点:反映训练数据集的独特的统计特征
- 解释:整个稀疏自编码器框架是对带有隐变量的生成模型的最大似然训练的近似
- 描述的隐变量可以解释输入的数据
- 例子:模型带有可见变量 $\pmb{x}$ 和隐变量 $\pmb{h}$ ,且具有明确的联合分布 $p_{\text{model}}(\pmb{x,h})=p_{\text{model}}(\pmb{h})p_{\text{model}}(\pmb{x|h})$,其中 $p_{\text{model}}(\pmb{h})$ 为模型关于隐变量的先验分布,表示模型看到 $\pmb{x}$ 的信念先验。则对数似然函数可以分解为 $\log p_{\text{model}}(\pmb{x})=\log\sum_{\pmb{h}}p_{\text{model}}(\pmb{h,x})$。即自编码器使用一个高似然值 $p_{\text{model}}(\pmb{h})$ 的点估计近似这个总和,类似于稀疏编码生成模型(sec 13.4),但是 $p_{\text{model}}(\pmb{h})$ 是参数编码器的输出,而不是从优化结果推断出的最可能的结果。选择 $p_{\text{model}}(\pmb{h})$,即最大化 $\log p_{\text{model}}(\pmb{h,x})=\log p_{\text{model}}(\pmb{h})+\log p_{\text{model}}(\pmb{x|h})$,其中 $\log p_{\text{model}}(\pmb{h})$ 项能够被稀疏诱导。例如:Laplace 先验为 $p_{\text{model}}(h_i)=\frac\lambda2\exp(-\lambda|h_i|)$ 对应于绝对值稀疏惩罚,则对数先验表示为绝对值惩罚为 $\Omega(\pmb{h})=\lambda\sum_i|h_i|$。则 $-\log p_{\text{model}}(\pmb{h})=\sum_i(\lambda|h_i|-\log\frac\lambda2)=\Omega(\pmb{h})+\text{const}$
14.2.2 Denoising AutoEncoders
去噪自编码器(Denoising AutoEncoder,DAE):去除输入数据中存在的噪声
- 损失函数:$L(\pmb{x},g(f(\tilde{\pmb{x}})))$
- $\tilde{\pmb{x}}$ 是被某种噪声损坏的 $\pmb{x}$ 的副本
- 解释:去噪训练过程强制 $f$ 和 $g$ 隐式地学习 $p_{\text{data}}(\pmb{x})$
- 通过最小化重构误差获取有用特性
14.2.3 Regularizing the Penalizing Derivatives
惩罚导数(Penzlizing Derivatives)的正则自编码器:学习在 $\pmb{x}$变化很小时,目标变化也不大的函数,也称为收缩自编码器(Contractive AutoEncoder,CAE),与去噪自编码器、流形学习和概率模型存在一定的理论联系([Sec 14.7](#14.7 Contractive Autoencoders))
- 损失函数:$L(\pmb{x},g(f(\pmb{x})))+\Omega(\pmb{h,x})$
- $\Omega(\pmb{h,x})=\lambda\sum_i\Vert\nabla_{\pmb{x}}\pmb{h}_i\Vert^2$
- 解释:因为这个惩罚对训练数据适用,因此模型可以学习反映训练数据分布信息的特征
注:与稀疏自编码器的形式相同,但是惩罚项 $\Omega$ 不同。
14.3 Representational Power, Layer Size and Depth
自编码器通常只有单层的编码器和解码器。
深度编码器和解码器:
- 可以指数级别地降低表示某些函数的计算成本
- 可以指数级别地减少学习一些函数所需要的训练数据量
- 可以拥有比相应的浅层或者线性自编码器更好的压缩效率
训练深度自编码器的普遍策略:训练一堆浅层的自编码器,然后再贪心地预训练相应的深度架构
14.4 Stochastic Encoders and Decoders
自编码器本质是一个前馈网络,可以使用与传统前馈网络相同的损失函数和输出单元。
- 设计前馈网络的策略:定义一个输出分类 $p(\pmb{y|x})$,最小化负对数似然 $-\log p(\pmb{y|x})$
- 变量 $\pmb{y}$ 是关于目标的向量,例如:类别标签
- 自编码器的架构与前馈网络相同,但是核心思想不同。
- 给定隐藏编码 $\pmb{h}$,解码器提供了条件分布 $p_{\text{model}}(\pmb{x|h})$,最小化 $-\log p_{\text{decoder}}(\pmb{x|h})$ 训练自编码器,损失函数的准确形式受 $p_{\text{decoder}}$ 的影响。
- 隐变量模型 $p_{\text{model}}(\pmb{h,x})$ 定义了随机编码器 $p_{\text{encoder}}(\pmb{h|x})=p_{\text{model}}(\pmb{h|x})$ 和随机解码器 $p_{\text{decoder}}(\pmb{x|h})=p_{\text{model}}(\pmb{x|h})$,详情(Fig 14.2)
- 编码器的分布和解码器的分布可能与联合分布 $p_{\text{model}}(\pmb{x,h})$不相容,在保证足够的容量和样本下,将编码器和解码器作为去噪自编码器训练能够使它们渐近地相容。
- 变量 $\pmb{x}$ 既是输入也是目标
14.5 Denoising AutoEncoders
去噪自编码器(Denoising AutoEncoder,DAE):训练的输入为受损失的数据,然后预测的输出为原始的未被损失的数据。
- 训练过程(图14.3)
- 从训练数据集中随机采样一个训练样本$\pmb{x}$
- 从损失过程$C(\mathbf{\tilde{x}|x}=\pmb{x})$中随机采样一个损失样本$\tilde{\pmb{x}}$
- 损失过程$C(\mathbf{\tilde{x}|x})$代表给定数据样本$\mathbf{x}$产生损失样本$\tilde{\mathbf{x}}$的概率
- 将训练数据对$(\pmb{x,\tilde{x}})$作为训练样本用来估计自编码器的$p_{\text{reconstruct}}(\pmb{x|\tilde{x}})=p_{\text{decoder}}(\pmb(x|h))$
- 重构分布(Reconstruction Distribution):$p_{\text{reconstruct}}(\pmb{x|\tilde{x}})$
- 编码器 $f(\tilde{\pmb{x}})$的输出是 $\pmb{h}$
- 随机解码器$p_{\text{decoder}}$根据解码函数$g(\pmb{h})$定义
- 训练方式:基于梯度法对负对数似然$-\log p_{\text{decoder}}(\pmb{x|h})$近似最小化
- 只要编码器是确定的,去噪自编码器可以与其他前馈网络的训练方式相同
- 即基于以下期望的随机梯度下降算法
- 训练数据的分布:$\tilde{p}_{\text{data}}(\mathbf{x})$
$$
-\mathbb{E}{\mathbf{x}\sim\tilde{p}{\text{data}}(\mathbf{x})}
\mathbb{E}{\mathbf{x}\sim C(\mathbf{\tilde{x}|x})}
\log p{\text{decoder}}(\pmb{x|h}=f(\tilde{\pmb{x}}))
$$
14.5.1 Estimating the Score
得分匹配(Sec 18.4)是最大似然的代替方法,提供了对概率分布的一致估计,促使模型在各个数据点上获得与数据分布相同的得分。
- 得分是一个特定的梯度场:$\nabla_{\pmb{x}}\log p(\pmb{x})$
- 学习 $\log p_{\text{data}}$ 的梯度场是学习 $p_{\text{data}}$结构的一种方式
DAE的训练准则能够让自编码器学到能够估计数据分布得分的向量场$(g(f(\pmb{x}))-\pmb{x})$
DAE与RBM的联系
- 特定的去噪自编码器 与 特定的无向概率模型 RBM 是等价的
- 采用高斯噪声和均方误差作为重构误差
- 具有Sigmoid隐藏单元和线性重构单元
本节讨论的是去噪自编码器如何学习表示一个概率分布
14.5.2 Historical Perspective
去噪自编码器可以学到一个好的内部表示,学到的表示可以被用来预训练更深的无监督网络或者监督网络,允许学习容量很高的编码器,同时防止在编码器和解码器之间学习得到一个无用的恒等函数。
14.6 Learning Manifolds with Autoencoders
自编码器基于的思想是:数据是集中在一个低维流形或者一小组这样的流形上,自编码器试图学习流形的结构
流形的重要特征:切平面(Tangent Plane)的集合。
- 一个$d$维流形上的一点$\pmb{x}$的切平面是由一个$d$维基向量给出,这个基向量能够表示局部方向的变化,这些变化是流形所允许的,这些局部方向决定了$\pmb{x}$如何遵守流形的规则进行微小的变动。
自编码器的训练过程涉及到两种推动力的折衷
- 学习训练样本$\pmb{x}$的表示$\pmb{h}$使得$\pmb{x}$能够通过解码器近似地从$\pmb{h}$中恢复。使得自编码器只需要关注属于数据生成分布下的输入。
- 满足约束或者正则惩罚。既可以限制自编码器的容量,从而满足架构约束,还可以加入一个正则项到重构代价中。
两种推动力的结合驱使隐藏的表示去捕获有关数据分布结构的信息。
- 自编码器必须有能力重构训练实例
嵌入表示:学习流形上(或者附近)的数据点的表示(representation),通常使用低维向量给出
- 非参数流形学习算法:直接学习每个训练样例的嵌入
- 编码器或者表示函数:将周围空间(输入空间)的任意点映射到它的嵌入