来源:Kingma, Welling 2013 · arXiv:1312.6114 §1(引言)、§2.1(问题场景)、图 1。这一节把「模型长什么样、想优化什么、哪几处算不动、为什么引入识别模型」四件事讲清,是后面全部推导的地基。 读法:§1.1 生成故事与图 1。§1.2 训练目标是边缘似然。§1.3 两道关卡与四条堵死的老路。§1.4 论文要解决的三个问题。§1.5 识别模型与编码器、解码器称呼的来历。 --- ## §1.1 生成故事:先抽隐码,再生成数据 论文考虑的模型对「数据是怎么来的」讲一个两步的故事。手里有数据集 $X=\{x^{(i)}\}_{i=1}^N$,装着 $N$ 个独立同分布(各自独立、都来自同一个分布)的样本,每个 $x^{(i)}$ 可以是连续的也可以是离散的(比如一张图)。故事假设每个数据点都由一个看不见的连续随机向量 $z^{(i)}$ 生出来: > [!danger] 论文 §2.1 · 数据的生成过程(两步) > 1. 从先验分布 $p_{\theta^*}(z)$ 抽出一个值 $z^{(i)}$。 > 2. 从条件分布 $p_{\theta^*}(x\mid z)$ 抽出数据点 $x^{(i)}$。 > > 先验和似然都带参数 $\theta$:$\theta$ 每取一组值,$p_\theta(z)$ 和 $p_\theta(x\mid z)$ 就是一对具体的分布。手里的全部东西就是一堆图,这批图的真实来路没人知道。上面的两步过程是主动加上去的建模假设。按这个假设看,每张图 $x^{(i)}$ 背后有一个生成时用的隐码数值 $z^{(i)}$,全体图共用一组参数值 $\theta^*$(星号标记「假设中真实用的那组」)。这两样都不在手里的数据里,是未知量。两个分布的密度要求对 $\theta$ 和 $z$ 几乎处处可导。 逐项读。$z$ 叫隐变量(latent variable,藏着的变量),直觉上是数据的浓缩描述:生成一张人脸图时,$z$ 里装的可能是胖瘦、朝向、光照这类高层信息,先定这些、再落笔成像素。$\theta$ 在 VAE 里就是网络参数,训练就是调 $\theta$ 去逼近那个看不见的 $\theta^*$。**红框末那句「密度对 $\theta$ 和 $z$ 几乎处处可导」是论文开局立下的建模假设,也是全篇的地基:两块积木自带密度公式、代值就能出数,且可求导。后面的一切(下界可算、梯度可求)全站在这条假设上。** 要求可导是为了梯度训练:对 $\theta$ 可导才能训,对 $z$ 可导,反向传播才能经过 $z$ 一路传回编码器(近似后验)(§3 用到)。「几乎处处」是数学的宽松措辞,允许个别点上不可导,不影响。 **整个模型就两块积木:先验 $p_\theta(z)$ 定隐码怎么分布,似然 $p_\theta(x\mid z)$ 定隐码怎么变成数据。** 顺着故事的方向(先 $z$ 后 $x$)依次抽样,就能造出一个数据点,这种「顺着箭头抽」的采样叫祖先采样(ancestral sampling)。 论文图 1 画的就是这个结构(下图,抽自论文 PDF):实线箭头是先验乘解码器(似然) $p_\theta(z)p_\theta(x\mid z)$($z$ 指向 $x$),虚线箭头是后面 §1.5 要引入的近似后验 $q_\varphi(z\mid x)$($x$ 反指 $z$),外面套一个标着 $N$ 的方框表示这个结构对数据集里 $N$ 个点各来一份、参数 $\theta$、$\varphi$ 全体共享。 ![[VAE论文图1_图模型.png]] 一个措辞先对上 00 §0.1 的角色表:$p_\theta(x\mid z)$ 就是「已知因、问果」的那个分布,名字叫似然(likelihood)。「似然」这个称呼的用法也顺带钉死:果 $x$ 固定拿在手里,把 $p_\theta(x\mid z)$ 读成因和参数的函数,值越大,就说「这个因、这组参数,让手里这个数据越像会发生」。下一节的训练目标就建立在这个用法上。 ## §1.2 训练目标:最大化边缘似然 模型好不好,标准是模型认为真实数据出现的概率高不高。单个数据点在模型下的总概率,要把所有可能的 $z$ 都算进去:$z$ 取每个值都有一条「经由这个 $z$ 生成 $x^{(i)}$」的路,把所有路的概率加总(连续变量就是积分),得到的就是边缘似然(marginal likelihood,「边缘」指把 $z$ 积分掉、只剩 $x$ 的分布): > [!danger] 论文 §2.1 · 边缘似然(训练想最大化的量) > $p_\theta(x)=\int p_\theta(z)\,p_\theta(x\mid z)\,\mathrm dz$ 逐项读:$p_\theta(z)$ 是「先验抽到这个 $z$」的概率密度,$p_\theta(x\mid z)$ 是「这个 $z$ 又生成 $x$」的概率密度,两者相乘是「这条路」的密度,积分把所有路加总。整个数据集的目标是各点对数似然之和 $\sum_{i=1}^N\log p_\theta(x^{(i)})$(取对数把连乘变连加,数值稳定、好求导,DDPM 时同款操作)。**训练的原始目标就是调 $\theta$ 最大化这个边缘似然,麻烦全在于这个量算不动。** 连带地,真后验也写不出:$p_\theta(z\mid x)=\dfrac{p_\theta(x\mid z)\,p_\theta(z)}{p_\theta(x)}$,分子两件都是写得出的基本件(§1.1 的建模假设),分母正是这个积不掉的边缘似然,一个积分卡死两个量。 ## §1.3 两道关卡,四条老路全堵死 论文特意强调:不做那些常见的简化假设(比如假设后验有解析解),而是直面最难的情形。难处就两关:$p_\theta(x\mid z)$ 带上神经网络(论文点名:一个非线性隐藏层就够),边缘似然的积分就写不出闭式、维数又高到没法数值硬算。同时数据多到必须能按小批量甚至单点更新。当时的四条老路在这两关下全堵死: 1. 直接优化:对 $\log p_\theta(x)$ 做梯度上升。目标里的积分算不动,目标值和梯度都写不出来。 2. EM(expectation-maximization,期望最大化):第一步就要算每个数据点的真后验,恰是 §1.2 末尾写不出的那个。 3. 传统变分推断(平均场):用简单分布顶替真后验、逐维轮流更新,更新公式里的期望积分同样没有闭式,第一轮落不了笔。 4. Monte Carlo EM(蒙特卡洛 EM):给 EM 打补丁,算不动的后验改用随机游走硬抽样本,能跑,但每个数据点都拖着一轮几十上百步的采样,数据一多总代价爆炸。 **四条老路全堵死:前三条死于积分算不动,第四条死于数据量大,这就是论文开出的题。** 「变分」这个名字的来历顺带一句:第 3 条里那种「挑分布」的做法,挑选对象是分布(函数)而不是数,这类「在函数堆里挑函数」的问题在数学史上叫变分问题,名字沿用至今。 > [!note]- 三个老方法的细节:EM 的两步循环、平均场的两步、Monte Carlo EM 的随机游走 > EM:深度学习之前训隐变量模型的经典算法,两步循环,第一步拿当前参数算出每个数据点的后验(这张图的 $z$ 大概是啥),第二步把后验当已知去更新参数,来回倒到收敛。第一步要求后验可算,这里算不动,上不了场。 > > 平均场(mean-field):变分推断的思路是「真后验算不动,就在一族形状简单的分布里挑一个最接近的来顶替」。平均场分两步:先把近似后验强行假设成各维独立(拆成每维一个小分布的乘积)。再轮流更新每一维,更新第 $j$ 维要先算几个「在其余各维当前分布下取期望」的积分。教科书里的简单模型这些积分有解析解、能转起来,网络一进来就没闭式了。 > > Monte Carlo EM 的抽法(蒙特卡洛 = 靠随机抽样做近似计算的方法统称,FID、EDM 单元的「蒙特卡洛估计」就属这类):从某个 $z$ 出发,每步试探挪到旁边的 $z'$,新旧两点各算一次 $p_\theta(z)p_\theta(x\mid z)$(各跑一遍解码器前向),值变大就挪、变小按比值掷骰子决定挪不挪。走够几十上百步,脚印落在各处的频率就等于后验的高低,捡脚印当后验样本。于是几十上百次前向才换来一次参数更新。参数一更新,后验就跟着变,下一轮必须按新参数重新走一遍抽样,每轮每个数据点都要重新付这笔钱。 ## §1.4 论文要解决的三个问题 在上面的场景下,论文宣布要一口气解决三件相关的事: 1. 参数 $\theta$ 的高效近似 ML 或 MAP 估计。 2. 给定观测值 $x$ 时隐变量 $z$ 的高效近似后验推断。 3. 变量 $x$ 的高效近似边缘推断。 三条的含义与用处见下方折叠。 > [!note]- 三条的细节:ML 与 MAP、两种推断 > 第 1 条的两种口径。视角先设定死:**整个第 1 条都在因 $=\theta$、果 $=X$ 的视角里**,下面的似然、先验、后验说的都是 $\theta$ 的分布,定义在权重空间上,和数据空间的 $p_\theta(x)$ 各管各的。 > > ML(maximum likelihood,最大似然):最大化似然 $p(X\mid\theta)$,挑出把数据解释得最好的那组权重。 > > MAP(maximum a posteriori,最大后验):最大化后验 $p(\theta\mid X)=\dfrac{p(X\mid\theta)\,p(\theta)}{p(X)}$。分母 $p(X)$ 不含 $\theta$、不改排名,所以等于最大化分子 $p(X\mid\theta)\,p(\theta)$。比 ML 多出的因子 $p(\theta)$ 是权重的先验。先验取 $p(\theta)=\mathcal N(0,I)$ 时 $\log p(\theta)=-\dfrac{1}{2}\|\theta\|^2+\text{常数}$(负号与二分之一来自高斯指数 $-\dfrac{\theta^2}{2}$),带负号即罚大权重,正是训练里的权重衰减(论文实验用的口径,见 `06_实验与相关工作` §6.2)。过拟合解靠大权重把输出曲线扭去贴住每个训练点,罚大权重顺带压住过拟合。似然是 $N$ 个数据点的 log 之和,数据越多先验这一票越被淹没,MAP 趋近 ML。 > > 记号注:$p(X\mid\theta)$ 与 $p_\theta(X)$ 是同一个量,竖线后写法把 $\theta$ 当随机变量(MAP 用它),下标写法把 $\theta$ 当旋钮。这个量在数据视角(因 $=z$、果 $=x$)下的角色名是边缘似然:那边的似然是 $p_\theta(x\mid z)$,沿 $p_\theta(x)=\int p_\theta(z)\,p_\theta(x\mid z)\,\mathrm dz$ 积掉 $z$ 得到它。 > > 第 2 条的「推断」:从看得见的量反推看不见的量,这里指看到 $x$、反推隐码 $z$ 的分布,即真后验 $p_\theta(z\mid x)$ 的近似。 > > 第 3 条的「边缘推断」:评估 §1.2 那个算不动的 $p_\theta(x)$,论文能高效给出它的近似读数:喂一张图,报一个数,越大越像真实数据。去噪、修补、超分辨率都要在许多候选图里挑出像真图的,靠这个数比大小。 ## §1.5 识别模型:训一个网络代替逐点求后验 解法的起点,也就是 00 §0.2 那条线的收尾一步:引入识别模型(recognition model)$q_\varphi(z\mid x)$,一个参数为 $\varphi$ 的分布,专门用来近似算不动的真后验 $p_\theta(z\mid x)$。这个识别模型和 §1.3 提过的平均场近似后验有两点关键不同:不必假设各维独立可拆。参数 $\varphi$ 也不是靠什么闭式期望公式逐点解出来的,而是和解码器的参数 $\theta$ 一起用梯度联合学出来的(怎么联合学,正是 §2 到 §4 的全部内容)。 这一步换来的好处,术语叫「摊销」(amortization,成本一次付清、以后处处复用),说得直白些:**推断的成本不再逐点支付,一个网络 $q_\varphi$ 训好之后,任何一个 $x$ 喂进去一次前向就得到这个数据点的近似后验,不用对每个数据点单独跑迭代。** 这正是绕开「Monte Carlo EM 每个数据点一轮采样、太慢」的那一步。 命名也在这里交代。从编码的角度看,$z$ 就是数据的一份潜在表示或编码(code): - $q_\varphi(z\mid x)$ 叫概率编码器(probabilistic encoder):给一个数据点 $x$,编码器给出「$x$ 可能是从哪些编码 $z$ 生成的」的一个分布(比如一个高斯),而不是单个编码值。 - $p_\theta(x\mid z)$ 叫概率解码器(probabilistic decoder):给一个编码 $z$,解码器给出「这个编码能解出哪些 $x$」的一个分布。 两个都带「概率」前缀,是因为输出不是一个点而是一个分布。普通自编码器的编码器直接输出一个向量,没有分布。 ## 本节一条线 模型讲一个两步的生成故事:先验抽隐码 $z$,似然 $p_\theta(x\mid z)$ 把隐码变成数据,两块积木都参数化、可导。训练想最大化边缘似然 $p_\theta(x)=\int p_\theta(z)p_\theta(x\mid z)\,\mathrm dz$,但只要似然里带上神经网络,边缘似然的积分就算不动,四条老路(直接优化、EM、平均场、蒙特卡洛 EM)全堵死:前三条死于积分算不动,第四条死于数据量大。论文的第一步棋是引入识别模型 $q_\varphi(z\mid x)$ 近似真后验、与 $\theta$ 联合训练,推断成本从逐点支付变成一次前向。按编码视角,$q_\varphi(z\mid x)$ 是概率编码器、$p_\theta(x\mid z)$ 是概率解码器。下一节用这个 $q_\varphi$ 把算不动的 $\log p_\theta(x)$ 拆出一个可算的下界。