重参数化技巧怎么解决梯度问题?
VAE 和扩散模型中 Reparameterization Trick 的原理与作用
原题:请解释重参数化技巧(Reparameterization Trick)的基本原理,它在变分自编码器(VAE)或扩散模型中的作用是什么?并说明其如何解决梯度传播问题。
模型训练 · 百度真题
回答与解析
VAE 中的路径式重参数化
VAE 的 encoder 输出 q_φ(z|x) 的参数。若直接从该分布采样 z,普通反向传播无法穿过随机采样节点。高斯后验可改写为:
ε ~ N(0,I), z = μ_φ(x) + σ_φ(x) ⊙ ε
随机性被移到与 φ 无关的 ε,z 变成 φ 的可微函数,因此可对重建项和 KL 项使用低方差的 pathwise gradient。没有这种重参数化并非绝对不能训练;还可用 REINFORCE/score-function estimator,但方差通常更高。离散变量则需要其他估计器或连续松弛。
在扩散模型中的准确作用
DDPM 的闭式前向边缘可写为:
x_t = sqrt(alpha_bar_t)x_0 + sqrt(1-alpha_bar_t)ε。
这同样用固定噪声构造随机变量,便于在任意 t 直接生成训练对;但标准 DDPM 通常不学习前向噪声日程的分布参数,也不通过完整反向采样链端到端反传。因此不能把它等同于 VAE 中“若不重参数化就无法把梯度传回后验参数”的问题。
回答时应区分:随机变量的路径式表达、训练目标对哪些参数求梯度,以及推理时的随机采样过程。
口语版讲法(约3分钟)
- 说明随机采样为何阻断普通路径梯度
- 推导高斯 VAE 的重参数化
- 补充 score-function 备选边界
- 区分扩散构造训练对与 VAE 梯度问题
重参数化技巧解决的是:随机变量的分布参数由网络给出时,怎样得到对这些参数的低方差梯度。以 VAE 为例,encoder 输出 mu 和 sigma,定义近似后验 q phi(z x)。如果把“从这个分布采样 z”当成一个黑盒随机节点,普通反向传播没有一条确定的路径把重建损失传回 phi。
高斯情形可以把采样改写成 epsilon 服从标准正态,再令 z 等于 mu 加 sigma 乘 epsilon。随机性现在都在与 phi 无关的 epsilon 里;固定一次 epsilon 后,z 是 mu、sigma 的可微函数,所以可以对重建项和 KL 项使用 pathwise gradient。这通常比 score-function,也就是 REINFORCE 类估计器方差低。必须说明,没有路径式重参数化不等于绝对无法端到端训练,score-function 仍可给出梯度估计,只是往往更难优化。离散潜变量也不能直接套高斯公式,需要直通估计、Gumbel-Softmax 或其他估计器。
扩散模型里也常看到类似写法:x t 等于 alpha bar t 的平方根乘 x 0,再加一减 alpha bar t 的平方根乘 epsilon。它允许我们任意采一个 t,直接构造对应噪声样本,而不用真的逐步加噪 t 次。形式上这也是把随机变量写成固定噪声的确定变换。
但两者的梯度语义不能混为一谈。标准 DDPM 的前向日程通常是预先设定的,训练网络预测噪声或相关目标,并不需要对前向噪声分布参数求梯度,也不会穿过完整反向采样链做端到端反传。因此这里更准确的价值是高效、可控地构造训练对,而不是像 VAE 那样解决后验参数梯度被采样阻断的问题。
所以回答时我会始终问三个问题:随机性被移到哪里、哪些参数需要梯度、训练是否真的穿过采样过程。把这三件事说清楚,VAE 和扩散里的重参数化就不会混淆。
写代码时我会特别检查哪些张量需要梯度。epsilon 只是外部噪声,不需要对它求导;mu 和 log-variance 来自 encoder,必须保留计算图;sigma 通常由稳定的参数化得到,再与 epsilon 组合。若误把 z 整体 detach,重建信号就回不到 encoder;若在数值上直接预测不受约束的 sigma,也容易出现不稳定。用一个小 batch 查看各模块梯度是否非零,通常就能发现这类错误。
对于离散变量,我会明确告诉面试官不存在完全照搬的平滑路径。直通估计让前向离散、反向近似传梯度,Gumbel-Softmax 用连续松弛换来可微,score-function 保持一般性但方差更难控制。选择哪种方法,要看是否接受有偏梯度、温度退火和方差控制,而不是把所有采样都叫重参数化。
关键一句:路径式梯度依赖可微采样变换,离散潜变量通常需要不同的有偏或高方差估计器。
核验来源
面试官还可能这样问
- 问法 1 · 场景切入
假设你在做一个电商推荐系统,用户历史行为编码成向量,但模型需要从高斯分布中采样来增加多样性。你直接用采样操作,梯度传不过去,怎么办?
- 问法 2 · 层层追问
VAE 里从分布采样那一步怎么训练的?……采样操作不可导对吧?……那你有什么办法让梯度回传?……重参数化具体怎么做的?
- 问法 3 · 直球架构
解释一下重参数化技巧,它怎么让采样操作变得可微?在 VAE 和扩散模型中分别扮演什么角色?