来源:Kingma, Welling 2013 · arXiv:1312.6114 §2.2 末段(朴素梯度估计器)、§2.3 开头、§2.4(重参数化技巧,论文式(4)(5))。上一节拿到了可算的下界 $\mathcal L$,这一节解决「怎么对下界求梯度」,重参数化在此登场,这是全篇的技术心脏。
读法:§3.1 卡点在哪。§3.2 朴素办法为什么不行。§3.3 重参数化(论文式(4))。§3.4 高斯例子。§3.5 为什么合法(论文式(5))。§3.6 三族能重参数化的分布。
---
## §3.1 卡点:期望的分布自己跟着 $\varphi$ 动
要用梯度法最大化 $\mathcal L(\theta,\varphi;x^{(i)})$,就得算 $\mathcal L$ 对 $\theta$ 和对 $\varphi$ 的梯度。先把对象摆到眼前,论文式(2) 的 $\mathcal L$:
$\mathcal L(\theta,\varphi;x^{(i)})=\mathbb E_{q_\varphi(z\mid x)}\big[-\log q_\varphi(z\mid x)+\log p_\theta(x,z)\big]$
它是一个在 $q_\varphi(z\mid x^{(i)})$ 下的期望,没有闭式,只能抽样估计:从 $q_\varphi$ 抽几个 $z$,拿方括号里的函数值求平均(蒙特卡洛估计)。
对 $\theta$ 求梯度没有障碍:抽样用的分布 $q_\varphi$ 不含 $\theta$,$\theta$ 再怎么调,抽出来的样本都是不变的数字,样本平均就是几项相加,导数逐项进行即可。
对 $\varphi$ 求梯度走两条路。路一,$f$ 内部的 $-\log q_\varphi$:$\varphi$ 一挪,每项读数变,逐项求导即可。路二,样本本身:样本按 $q_\varphi$ 抽,$\varphi$ 一挪,该抽出的样本跟着变,平均值随之变。**可样本抽完了就是几个具体的数,数不随 $\varphi$ 变、对 $\varphi$ 求导得零,路二求出来恒是零,等于丢了。** 直接对样本平均求导只剩路一,结果是错的。
## §3.2 朴素办法:合法,但方差大到不实用
这个问题有一个经典解法:不去救路二,而是先在期望层面做恒等变形,把要求的梯度整个转写成另一个期望,再对新期望抽样。论文原样列出了这条式子(此处 $f(z)$ 代表任何一个要被平均的函数):
> [!danger] 论文 §2.2 · 朴素蒙特卡洛梯度估计器
> $\nabla_\varphi\,\mathbb E_{q_\varphi(z)}[f(z)]=\mathbb E_{q_\varphi(z)}\big[f(z)\,\nabla_{q_\varphi(z)}\log q_\varphi(z)\big]\simeq\frac{1}{L}\sum_{l=1}^{L}f(z)\,\nabla_{q_\varphi(z^{(l)})}\log q_\varphi(z^{(l)})$
> 其中 $z^{(l)}\sim q_\varphi(z\mid x^{(i)})$。式中梯度下标 $\nabla_{q_\varphi(z)}$ 是论文原文的含糊印法,一律读作 $\nabla_\varphi$。
这条式子说:把要求的梯度改写成「$f(z)\cdot\nabla_\varphi\log q_\varphi(z)$ 的期望」,普通抽样即可估计,求导只落在写得出的 $\log q_\varphi$ 上。推导五步,见本节末折叠。
直接读第一个等号。$f$ 不含 $\varphi$,$\varphi$ 一挪,变的只有分布 $q_\varphi$ 的形状,每个 $z$ 的出场概率有升有降。求导一侧 $\nabla_\varphi\,\mathbb E_{q_\varphi(z)}[f(z)]$ 就是把「$f(z)$ 乘该点概率的变化速率」逐点加总。期望一侧的 $\nabla_\varphi\log q_\varphi(z)$ 等于 $\dfrac{\nabla_\varphi q_\varphi(z)}{q_\varphi(z)}$(对数求导)。期望按定义是「每项乘出场概率 $q_\varphi(z)$ 再加总」,所以这一侧每项实际是 $q_\varphi(z)\cdot f(z)\cdot\dfrac{\nabla_\varphi q_\varphi(z)}{q_\varphi(z)}$,权重的 $q_\varphi$ 与分母的 $q_\varphi$ 约掉,剩「$f(z)$ 乘概率的变化速率 $\nabla_\varphi q_\varphi(z)$」,两侧逐点一致。这么拆的目的只有一个:让出场频率站回抽样权重的位置,普通抽样就能估。
毛病:它对 $f$ 只用函数值、不用导数,单个样本的信号可正可负、幅度剧烈,平均出的梯度噪声大,要海量样本才压得稳。**论文引用文献 [BJP12] 指出这个估计器方差非常高,不实用。**
> [!note]- 朴素估计器的推导:对数求导五步
> 目标是 $\nabla_\varphi\,\mathbb E_{q_\varphi(z)}[f(z)]$。第一步,期望写成积分(期望的定义):
>
> $\mathbb E_{q_\varphi(z)}[f(z)]=\int q_\varphi(z)\,f(z)\,\mathrm dz$
>
> 第二步,求导符号挪进积分号内。积分是把各处的值加总,导数对加法逐项进行。$f(z)$ 不含 $\varphi$,当常数系数留在原地,求导只落在 $q_\varphi$ 上:
>
> $\nabla_\varphi\int q_\varphi(z)f(z)\,\mathrm dz=\int f(z)\,\nabla_\varphi q_\varphi(z)\,\mathrm dz$
>
> 第三步,把 $\nabla_\varphi q_\varphi$ 换成含 $\log$ 的写法。先写规则:$\log u$ 对 $u$ 的导数是 $\dfrac{1}{u}$(`微分方程 03_指数与对数的导数`)。这里 $u=q_\varphi(z)$,而 $u$ 自己还随 $\varphi$ 变,对 $\varphi$ 求导要用链式法则补上里层导数 $\nabla_\varphi q_\varphi$:
>
> $\nabla_\varphi\log q_\varphi=\frac{1}{q_\varphi}\cdot\nabla_\varphi q_\varphi$
>
> 右边的乘积写成一个分数:
>
> $\nabla_\varphi\log q_\varphi=\frac{\nabla_\varphi q_\varphi}{q_\varphi}$
>
> 给上一条式子的两边同乘 $q_\varphi$,右边分母的 $q_\varphi$ 约掉,再把要的量 $\nabla_\varphi q_\varphi$ 放到等号左边:
>
> $\nabla_\varphi q_\varphi(z)=q_\varphi(z)\,\nabla_\varphi\log q_\varphi(z)$
>
> 第四步,把第三步的恒等式代进第二步右边的积分,认出期望的样子($q_\varphi$ 回到「抽样权重」的位置):
>
> $\int f(z)\,q_\varphi(z)\,\nabla_\varphi\log q_\varphi(z)\,\mathrm dz=\mathbb E_{q_\varphi(z)}\big[f(z)\,\nabla_\varphi\log q_\varphi(z)\big]$
>
> 第五步,接回主角。第一步到第四步是一条连续的等式链,链头正是要求的导数,把它写回等号左边、第四步认出的期望放右边:
>
> $\nabla_\varphi\,\mathbb E_{q_\varphi(z)}[f(z)]=\mathbb E_{q_\varphi(z)}\big[f(z)\,\nabla_\varphi\log q_\varphi(z)\big]$
>
> 右边的期望抽 $L$ 个样本做平均来近似:
>
> $\nabla_\varphi\,\mathbb E_{q_\varphi(z)}[f(z)]\simeq\frac{1}{L}\sum_{l=1}^{L}f(z^{(l)})\,\nabla_\varphi\log q_\varphi(z^{(l)})$
>
> 两条合起来就是红框整条(红框里的 $f(z)$ 是论文对 $f(z^{(l)})$ 的省写)。
## §3.3 重参数化:把随机性外包出去
论文的解法反着来:不绕开路二,而是把路二修通,让样本本身变成 $\varphi$ 的可导函数。
> [!danger] 论文式(4) · 重参数化
> $\tilde z=g_\varphi(\epsilon, x)\quad\text{with}\quad \epsilon\sim p(\epsilon)$
逐项读:$\epsilon$ 是一个辅助噪声变量,$\epsilon$ 的分布 $p(\epsilon)$ 固定、和 $\varphi$ 无关(比如标准高斯)。$g_\varphi(\epsilon,x)$ 是一个确定性的、可导的函数,负责把噪声加工成 $z$。$\tilde z$ 头上的波浪号标记「用这条流水线造出来的样本」。要求是:这样造出的 $\tilde z$,分布恰好就是 $q_\varphi(z\mid x)$。
**这一步把「抽 $z$」拆成「抽 $\epsilon$ + 算 $g_\varphi$」:骰子只掷在与 $\varphi$ 无关的 $\epsilon$ 上,$\varphi$ 全部退到确定性函数 $g_\varphi$ 里当普通参数,梯度沿着 $g_\varphi$ 一路可导,畅通无阻。** 随机性没有消失,只是被外包给了一个不归 $\varphi$ 管的源头。§3.1 的卡点(样本是定死的数、对 $\varphi$ 求导得零)到这里就通了:样本成了 $\epsilon$ 的可导函数,「$\varphi$ 挪一点、样本跟着挪多少」由 $g_\varphi$ 的导数给出。
## §3.4 高斯例子:$z=\mu+\sigma\epsilon$
论文 §2.4 给的标定例子就是一维高斯,也是 VAE 实际用的那款:
> [!danger] 论文 §2.4 · 一维高斯的重参数化
> 设 $z\sim p(z\mid x)=\mathcal N(\mu,\sigma^2)$,则一个合法的重参数化是 $z=\mu+\sigma\epsilon$,其中 $\epsilon\sim\mathcal N(0,1)$。于是
> $\mathbb E_{\mathcal N(z;\mu,\sigma^2)}[f(z)]=\mathbb E_{\mathcal N(\epsilon;0,1)}[f(\mu+\sigma\epsilon)]\simeq\frac{1}{L}\sum_{l=1}^{L}f(\mu+\sigma\epsilon^{(l)})\quad\text{where}\quad \epsilon^{(l)}\sim\mathcal N(0,1)$
「抽一个均值 $\mu$、标准差 $\sigma$ 的高斯数」等于「抽一个标准高斯数 $\epsilon$,乘 $\sigma$ 再加 $\mu$」(`微分方程 10_重参数化` 推过,DDPM `01_两条链与前向闭式` 同款)。对应式(4):$p(\epsilon)=\mathcal N(0,1)$,$g_\varphi(\epsilon,x)=\mu+\sigma\epsilon$。VAE 里 $\mu$、$\sigma$ 由编码器(近似后验)的网络从 $x$ 算出,$\varphi$ 藏在网络参数里。梯度成了普通导数:$\dfrac{\partial z}{\partial\mu}=1$、$\dfrac{\partial z}{\partial\sigma}=\epsilon$。
## §3.5 为什么合法:两种记法算出同一个平均
重参数化改写的只是「样本怎么造」,要紧的是保证「算出来的期望不变」,这就是论文式(5):
> [!danger] 论文式(5) · 期望换到 $\epsilon$ 名下
> $\mathbb E_{q_\varphi(z\mid x^{(i)})}[f(z)]=\mathbb E_{p(\epsilon)}\big[f\big(g_\varphi(\epsilon,x^{(i)})\big)\big]\simeq\frac{1}{L}\sum_{l=1}^{L}f\big(g_\varphi(\epsilon^{(l)},x^{(i)})\big)\quad\text{where}\quad \epsilon^{(l)}\sim p(\epsilon)$
$f$ 括号里的 $g_\varphi(\epsilon,x^{(i)})$ 就是 $z$(式(4) 同分布的顶替,波浪号不再写)。随机改抽 $\epsilon$,期望下标随之换成 $p(\epsilon)$。
同一个 $z$ 两种记法:「$z$ 服从 $q_\varphi$」,或「$\epsilon$ 服从 $p(\epsilon)$、$z$ 是加工结果 $g_\varphi(\epsilon,x)$」。**确定性的加工只把概率质量从 $\epsilon$ 的空间搬到 $z$ 的空间,一分不增不减,任何 $f(z)$ 按两种记法算平均,结果相同。** 右边于是成为实际算法:抽 $L$ 个 $\epsilon$、过 $g_\varphi$、平均。$\varphi$ 只在 $g_\varphi$ 里,对 $\varphi$ 可导,朴素估计器的高方差与不可导一起消失。论文的换元论证见本节末折叠。
> [!note]- 论文 §2.4 的换元论证
> 论文的论证一行话:给定确定性映射 $z=g_\varphi(\epsilon,x)$,两边的概率微元相等,
>
> $q_\varphi(z\mid x)\prod_i\mathrm dz_i=p(\epsilon)\prod_i\mathrm d\epsilon_i$
>
> 读法:$\prod_i\mathrm dz_i$ 是 $z$ 空间里一个小格子的体积(论文脚注约定 $\mathrm dz$ 是这个乘积的简写),左边是「$z$ 落进这小格」的概率质量。右边同理是「$\epsilon$ 落进对应小格」的质量。映射是确定性的,$\epsilon$ 的小格子被原封不动送到 $z$ 的小格子,两格装的质量必然相等。据此把积分整体换名(被积的 $z$ 全部用 $g_\varphi(\epsilon,x)$ 表示):
>
> $\int q_\varphi(z\mid x)\,f(z)\,\mathrm dz=\int p(\epsilon)\,f(z)\,\mathrm d\epsilon=\int p(\epsilon)\,f\big(g_\varphi(\epsilon,x)\big)\,\mathrm d\epsilon$
>
> 右端抽样平均即得式(5) 的样本版。微元相等那一步此处当已知事实收下:它的严格版属于多元换元定理与测度论,留待将来学。
## §3.6 哪些分布能这样干:三族构造法
本节定位:支线,可略读。VAE 自始至终只用高斯。这一节是论文在给技巧圈适用范围,证明重参数化不是高斯专属。带走一句就够:**重参数化不挑分布、覆盖面很宽,本单元用的高斯属于其中的位置-尺度族。**
式(4) 要求给 $q_\varphi(z\mid x)$ 配一对零件:固定分布 $p(\epsilon)$ 和可导函数 $g_\varphi$。论文 §2.4 给出三条现成配法:
1. 逆 CDF 族。CDF(cumulative distribution function,累积分布函数)$F(z)$ 是「抽到不超过 $z$ 的概率」,随 $z$ 从 0 单调升到 1。它的反函数把一个 0 到 1 之间的数映回对应的取值。配法:$\epsilon$ 从均匀分布里抽,相当于抽一个「概率进度」。$g_\varphi$ 取反函数,查出这个进度对应的取值。查出来的数就服从目标分布。
2. 位置-尺度族。整族只差平移(位置)和缩放(尺度)的分布:$\epsilon$ 取标准成员(位置 0、尺度 1),$g_\varphi=\text{位置}+\text{尺度}\cdot\epsilon$。§3.4 的高斯正是此族成员。
3. 组合族。目标分布能写成几个简单随机量的变换,例如对数正态分布 = 高斯取指数。
论文在每族后面各点了一长串分布的名字(Cauchy、Rayleigh、Pareto、Gumbel、Gamma、Beta 这类),是「这些都归我管」的清单,一个都不需要认识,不构成学习任务。三族都套不上时还有近似逆 CDF 兜底(引 [Dev86]),本单元用不到。
## 本节一条线
$\mathcal L$ 里的期望按 $q_\varphi$ 抽样估计,对 $\theta$ 的梯度畅通,对 $\varphi$ 的梯度坏在样本本身那条路:样本抽完是定数、求导得零,这条依赖整个丢失。经典的朴素估计器靠对数求导把梯度转嫁到 $\log q_\varphi$ 上,合法但方差大到不实用。重参数化(论文式(4))把「抽 $z$」改写成「抽与 $\varphi$ 无关的噪声 $\epsilon$、过确定可导函数 $g_\varphi$」,随机性外包、梯度恢复可求。高斯情形就是熟识的 $z=\mu+\sigma\epsilon$。合法性由式(5) 保证:确定映射只搬运概率质量,按 $z$ 记与按 $\epsilon$ 记算出同一个平均。能这样改写的分布很宽:逆 CDF、位置-尺度、组合三族全覆盖。下一节把这个技巧装回下界 $\mathcal L$,得到论文的 SGVB 估计器与 AEVB 算法。