来源:Kingma, Welling 2013 · arXiv:1312.6114 §4(相关工作)、§5(实验)、§6(结论)、§7(未来工作)、论文附录 A(可视化)、论文附录 D(边缘似然估计器)、论文附录 E(Monte Carlo EM)。这一节把 VAE 的实验证据、对照方法、谱系位置讲完,并给本单元覆盖率。 读法:§6.1 两个对照物。§6.2 实验设置。§6.3 下界对比(论文图 2)。§6.4 边缘似然对比(论文图 3)。§6.5 边缘似然怎么估出来的(论文附录 D、E)。§6.6 隐空间可视化(论文附录 A)。§6.7 相关工作。§6.8 结论与未来工作。§6.9 本单元覆盖率。 --- ## §6.1 两个对照物:wake-sleep 与 Monte Carlo EM 论文选的第一个对照物是 wake-sleep 算法(Hinton 等 1995):当时文献里唯一同样适用于「连续隐变量、每点一个后验」这类模型的在线学习法,和 AEVB 一样也配一个识别模型近似后验。wake-sleep 的软肋是要同时优化两个目标函数(醒着一个、睡着一个),两个目标合起来并不对应边缘似然(或其下界)的优化,所以「优化的东西」和「想要的东西」对不上号。优点是也能处理离散隐变量。每个数据点的计算量与 AEVB 同一量级,所以拿 wake-sleep 对比是公平局。 第二个对照物是 MCEM(Monte Carlo EM,蒙特卡洛 EM):不配识别模型,每个数据点现场用采样器从后验抽样,拿样本顶替 EM 里算不动的后验。MCEM 每步的逐点采样极贵,且不是在线算法(没法一小批一小批地更新着学),只能在小数据集上出场。 ## §6.2 实验设置 数据集两个:MNIST(手写数字)与 Frey Face(一段人脸视频的帧,规模比 MNIST 小得多)。模型就是 §5 那套:MNIST 像素按二值数据处理、解码器(似然)用 Bernoulli MLP。Frey Face 像素是连续值、解码器用高斯 MLP,只是均值输出上加一层 sigmoid 把均值限制在 0 到 1 之间(匹配像素取值范围)。编码器(近似后验)与解码器隐藏单元数相等:MNIST 各 500、Frey Face 各 200(小数据集防过拟合),这个规模取自当时自编码器文献的惯例,且论文说各算法的相对表现对这个选择不敏感。 训练细节:目标在下界梯度之外加一个小小的权重衰减项,对应参数先验 $p(\theta)=\mathcal N(0,I)$,所以整个优化等价于近似 MAP 估计(似然的梯度用下界的梯度近似)。wake-sleep 与 AEVB 用同一个编码器。所有参数从 $\mathcal N(0,0.01)$ 随机初始化。步长用 Adagrad 自适应,全局步长从 $\{0.01,0.02,0.1\}$ 里按前几轮训练集表现挑。小批量 $M=100$、每点抽样 $L=1$。速度参考:论文当年用一颗 Intel Xeon CPU,每训一百万个样本约 20 到 40 分钟。 > [!tip] 论文 §5 第一段的括号笔误 > 论文原文写「The generative model (encoder) and variational approximation (decoder)」,两个括号正好标反了:生成模型是解码器,变分近似才是编码器。 ## §6.3 下界对比(论文图 2):更快、更好、不怕隐变量多 论文图 2 画的是优化下界的比赛(下图,抽自论文 PDF):横轴是已训练的样本数,纵轴是每数据点的下界估计值,MNIST 试了隐变量维数 $N_z\in\{3,5,10,20,200\}$ 五档、Frey Face 试了 $\{2,5,10,20\}$ 四档,每档一格,格内四条线(AEVB 与 wake-sleep 各自的训练、测试曲线,红色是 AEVB、绿色是 wake-sleep,越高越好)。$N_z$ 就是 §5 里的 $J$,论文图里用 $N_z$ 记。 ![[VAE论文图2_下界对比.png]] 两条结论。第一条:**所有实验里 AEVB 都比 wake-sleep 收敛得快得多、最终落点也更好**,两者每数据点的算力还相同。第二条有点反直觉:把隐变量加到 $N_z=200$,也没有引来更多过拟合(训练与测试曲线没有拉开),论文的解释是**下界自带的正则项在管束:多出来的隐变量维度如果没用处,KL 项就把这些维度贴着先验压平,不给死记硬背腾地方**(这个现象 §5.4 的逐维拆读正好解释:没用的维度取 $\mu_j=0$、$\sigma_j=1$,KL 项就无代价地清零)。图注顺带交代估计器的方差很小(小于 1),图里省去不画。 ## §6.4 边缘似然对比(论文图 3):小数据上加赛一场 下界高不等于真似然高(中间隔着个 KL 缝,§2.4),所以论文加赛一场:直接估计边缘似然来比。这只在隐变量维数很低时可行(估计法见 §6.5,高维下不可靠),于是取 $N_z=3$、编解码器隐藏单元各 100、还是 MNIST,对照组加上 MCEM,训练集大小两档:1000 与 50000。 结果见论文图 3(下图,抽自论文 PDF,两格,横轴训练样本数、纵轴估计的边缘对数似然,红色是 AEVB、绿色是 wake-sleep、蓝色是 MCEM):小训练集上 AEVB 收敛快得多,MCEM 磨到后来能追到相近的落点。训练集放大到 50000 后,MCEM 的收敛远远掉队。 ![[VAE论文图3_边缘似然对比.png]] **MCEM 的硬伤在这一场暴露:MCEM 不是在线算法,每个数据点都要跑昂贵的采样循环,数据一多就没法高效应用,而 AEVB 与 wake-sleep 天生按小批量工作,数据集再大照跑。** ## §6.5 边缘似然是怎么估出来的(论文附录 D、E) 上一节的纵轴「估计的边缘似然」本身就是个要解决的问题($p_\theta(x)$ 正是那个算不动的量)。论文附录 D 给了一个专用估计器,只在隐变量维数低(论文说小于 5 维)且样本够多时可靠,所以 §6.4 才把 $N_z$ 压到 3。三步流程: 1. 用带梯度的 MCMC(论文用 HMC,Hybrid Monte Carlo,混合蒙特卡洛:借助梯度信息在分布里高效游走的采样器,这里当黑盒用)从真后验 $p_\theta(z\mid x^{(i)})$ 抽 $L$ 个样本。采后验只需要后验的对数梯度 $\nabla_z\log p_\theta(z\mid x)=\nabla_z\log p_\theta(z)+\nabla_z\log p_\theta(x\mid z)$:贝叶斯拆开后 $\log p_\theta(x)$ 那一项不含 $z$、求梯度就没了,所以完全绕开算不动的边缘似然(对 $z$ 求梯度把不含 $z$ 的项杀成零,归一化常数就这样消失,score 一路反复见过的老道理)。 2. 对这批样本拟合一个密度估计器 $q(z)$(拿样本近似出一个能算密度的分布来)。 3. 再从后验抽 $L$ 个新样本,连同拟合好的 $q(z)$ 一起代入下面的估计器: > [!danger] 论文附录 D · 边缘似然估计器 > $p_\theta(x^{(i)})\simeq\left(\frac{1}{L}\sum_{l=1}^{L}\frac{q(z^{(l)})}{p_\theta(z^{(l)})\,p_\theta(x^{(i)}\mid z^{(l)})}\right)^{-1}\quad\text{where}\quad z^{(l)}\sim p_\theta(z\mid x^{(i)})$ > (框内把论文原式分母里省写的样本上标补全为 $z^{(l)}$,含义不变。) 读法:括号里估计的是 $\dfrac{1}{p_\theta(x^{(i)})}$(倒数),所以最外面再取一次倒数还原。推导只有四行,见本节末折叠。 论文附录 E 交代 MCEM 对照组的配置:MCEM 不用编码器,直接用第 1 步那条后验梯度做 HMC 采样(每次 10 步 leapfrog,步长自动调到接受率 90%),采到样本后做 5 次权重更新。所有算法的参数更新都用 Adagrad。估边缘似然时用训练集与测试集的前 1000 个数据点,每个点从后验抽 50 个样本(HMC 每次 4 步 leapfrog)。这些数字当实验存档记录即可,HMC 内部机制不是本单元内容。 > [!note]- 论文附录 D 估计器的推导:从 $\dfrac{1}{p_\theta(x^{(i)})}$ 出发四步 > 目标是估 $p_\theta(x^{(i)})$,先对这个量的倒数下手。起点:$q(z)$ 是个归一化的密度,全空间积分为 1,拿这个 1 顶在分子上: > > $\frac{1}{p_\theta(x^{(i)})}=\frac{\int q(z)\,\mathrm dz}{p_\theta(x^{(i)})}$ > > 第二步:被积函数乘除同一个联合密度 $p_\theta(x^{(i)},z)$(值不变),再把外面的 $\dfrac{1}{p_\theta(x^{(i)})}$ 挪进积分(这个因子不含 $z$,是常数): > > $\frac{1}{p_\theta(x^{(i)})}=\int \frac{p_\theta(x^{(i)},z)}{p_\theta(x^{(i)})}\cdot\frac{q(z)}{p_\theta(x^{(i)},z)}\,\mathrm dz$ > > 第三步:认出第一个因子。乘法规则 $p_\theta(x^{(i)},z)=p_\theta(z\mid x^{(i)})\,p_\theta(x^{(i)})$,所以 $\dfrac{p_\theta(x^{(i)},z)}{p_\theta(x^{(i)})}$ 就是后验 $p_\theta(z\mid x^{(i)})$: > > $\frac{1}{p_\theta(x^{(i)})}=\int p_\theta(z\mid x^{(i)})\,\frac{q(z)}{p_\theta(x^{(i)},z)}\,\mathrm dz$ > > 第四步:这是「某函数在后验下的期望」,用后验样本(HMC 抽的)做蒙特卡洛平均,分母的联合密度再按乘法规则拆成 $p_\theta(z)\,p_\theta(x^{(i)}\mid z)$(两个都能直接算): > > $\frac{1}{p_\theta(x^{(i)})}\simeq\frac{1}{L}\sum_{l=1}^{L}\frac{q(z^{(l)})}{p_\theta(z^{(l)})\,p_\theta(x^{(i)}\mid z^{(l)})}\quad\text{where}\quad z^{(l)}\sim p_\theta(z\mid x^{(i)})$ > > 两边取倒数即红框估计器。 ## §6.6 隐空间可视化(论文附录 A) 隐变量取 2 维时,隐空间可以直接画出来看。论文图 4(下图,抽自论文 PDF)展示 MNIST 与 Frey Face 各自「学到的数据流形」:在单位正方形上摆一张均匀网格,把每个格点的坐标过一遍标准高斯的逆 CDF(§3.6 第一族的那个函数,把均匀分布的点变成高斯分布的点),得到一批铺满先验的 $z$,逐个喂给训好的解码器画出 $p_\theta(x\mid z)$ 的均值图。看到的效果:**2 维隐空间是一张连续有组织的地图,Frey Face 上从左到右表情渐变、从上到下头的朝向渐变,MNIST 上各数字类占据成片区域、相邻区域平滑过渡**,这正是「编码器把数据摊在先验覆盖的区域上」的直观证据。下图左半是 Frey Face 的人脸流形,右半是 MNIST 的数字流形: ![[VAE论文图4_二维流形.png]] 论文图 5(下图,抽自论文 PDF)是从先验随机抽 $z$ 解码出的 MNIST 随机样本,四块从左到右依次是隐变量取 2、5、10、20 维($N_z$)训出的模型,维数越高数字越清楚,作生成质量的直观参考。 ![[VAE论文图5_随机样本.png]] ## §6.7 相关工作:VAE 在谱系里的位置 论文 §4 把自己放进三条谱系,逐条过(每条一两句人话定位,不深入各引文内部): - 变分推断这条线。wake-sleep 是唯一的同类在线前辈。随机变分推断 [HBWP13] 当时热度渐起。[BJP12] 用控制变量法(给高方差估计器配一个已知均值的「陪跑量」来抵消抖动的降方差技术)压 §3.2 那个朴素估计器的方差,用于指数族近似。[RGB13] 给出更通用的控制变量方案。[SK13] 在随机变分推断的一个高效版本里用了与本文相似的重参数化。就是说,「朴素估计器方差大」是当时公认的痛点,各家都在治,SGVB 是其中一种根治法。 - 自编码器这条线。线性自编码器与线性高斯模型的对应早已知道:[Row98] 证明 PCA(principal component analysis,主成分分析,经典线性降维法)恰是「先验 $\mathcal N(0,I)$、似然 $\mathcal N(x;Wz,\varepsilon I)$ 且 $\varepsilon$ 取无穷小」这个线性高斯模型的最大似然解,VAE 可看作这条对应关系的非线性、概率化推广。[VLL+10] 证明无正则自编码器的训练准则对应「输入与表示的互信息」的一个下界(infomax 原则)的最大化,但众所周知纯重构准则学不出有用表示,得外加正则(去噪、收缩、稀疏各流派 [BCV13])。**SGVB 的正则项由变分下界自己规定(式(10) 第一大项),不需要那类外加正则的调参超参数,这是 VAE 在自编码器谱系里的独到之处**。编码器-解码器架构里论文点名 PSD(predictive sparse decomposition,预测稀疏分解)[KRL08] 是灵感来源。GSN(generative stochastic network,生成随机网络)[BTL13] 用带噪自编码器学马尔可夫链的转移算子。[SL10] 在深度玻尔兹曼机里用识别模型加速推断,但那些方法面向非归一化模型或稀疏编码,AEVB 学的是一般的有向概率模型。 - 同期工作。DARN(deep autoregressive network,深度自回归网络)[GMW13] 也用自编码结构学有向模型,但只处理二值隐变量。Rezende, Mohamed & Wierstra [RMW14] 与本文同期独立提出了同样用重参数化打通「自编码器、有向模型、随机变分推断」的方法(他们叫随机反向传播),两篇互为印证。 ## §6.8 结论与未来工作 结论收束(论文 §6):SGVB 是「连续隐变量下对变分下界的可导无偏估计器」,AEVB 是把 SGVB 接上小批量 SGD 的学习算法,理论优势(可导、低方差、在线)都反映在了实验里。 未来工作(论文 §7)四条,站在 2013 年看后来都成了真:(i) 用深度网络(如卷积网络)当编解码器学分层生成架构。(ii) 时间序列模型。(iii) 把 SGVB 用到全局参数上。(iv) 带隐变量的监督模型。第 (i) 条正是后来 Stable Diffusion 里那个卷积 VAE 的方向(学习计划第 10 章会见到)。 ## §6.9 本单元覆盖率(对 VAE 论文) 论文各部分、本单元哪一章覆盖: | 论文位置 | 内容 | 对应章节 | 覆盖 | |---|---|---|---| | §1 引言 | 问题一览、SGVB/AEVB 命名 | 00、§1 | ✅ 全 | | §2.1 | 生成过程、三层不可算、三个问题、识别模型 | §1 | ✅ 全 | | §2.2 | 变分下界(论文式(1)(2)(3))、朴素估计器及其高方差 | §2、§3.1–3.2 | ✅ 全 | | §2.3 | SGVB 估计器(论文式(6)(7))、小批量(论文式(8))、Algorithm 1、自编码器联系 | §4 | ✅ 全 | | §2.4 | 重参数化(论文式(4)(5))、三族构造法 | §3.3–3.6 | ✅ 全 | | §3 | 高斯 VAE 实例(论文式(9)(10)) | §5.1–5.4 | ✅ 全 | | §4 相关工作 | wake-sleep、随机变分推断、自编码器谱系、DARN、同期工作 | §6.1、§6.7 | ✅ 主干(逐条定位,未深入各引文内部) | | §5 实验 | 图 2 下界对比、图 3 边缘似然对比、设置 | §6.2–6.4 | ✅ 全 | | §6 结论 | 收束 | §6.8 | ✅ 全 | | §7 未来工作 | 四条方向 | §6.8 | ✅ 全 | | 附录 A | 隐空间可视化(图 4、5) | §6.6 | ✅ 全 | | 附录 B | 高斯 KL 闭式推导 | §5.3 | ✅ 全 | | 附录 C | Bernoulli/高斯 MLP(论文式(11)(12)) | §5.5 | ✅ 全 | | 附录 D | 边缘似然估计器及推导 | §6.5 | ✅ 全 | | 附录 E | Monte Carlo EM 配置 | §6.5 | ✅ 结论(HMC 内部机制当黑盒) | | 附录 F | 完全变分贝叶斯(论文式(13)–(24)、Algorithm 2) | 附A | ✅ 全(支线可跳) | 没展开、点到为止的:HMC/leapfrog 采样器的内部机制(超出本单元范围,实验里当黑盒)。相关工作各引文的内部细节(只定位、不展开)。论文图 2、3 的逐格数值(取趋势结论,曲线图已嵌入 §6.3、§6.4)。 ## 本节一条线 实验拿 wake-sleep(同类唯一在线前辈,但优化的两个目标对不上边缘似然)和 MCEM(逐点采样、非在线)当对照。下界比赛(论文图 2):同架构同算力下 AEVB 全部实验更快更好,且隐变量加到 200 维也不过拟合,是下界自带的 KL 正则在管束。边缘似然加赛(论文图 3,$N_z=3$,用论文附录 D 那个「先估倒数再翻回来」的专用估计器):AEVB 仍领先,MCEM 在大数据下直接出局。2 维隐空间可视化(论文图 4)证实隐空间是连续有组织的地图。谱系上,VAE 一头接变分推断(根治朴素估计器高方差),一头接自编码器(正则项由下界白送、PCA 是 VAE 的线性特例),与 Rezende 等同期互相印证。论文预言的深度卷积编解码器方向,正是后来 Stable Diffusion 隐空间的来路。