技术博客

Gumbel-max 技巧与重参数化:离散采样可微化的两条路

第 30 / 147 篇 · 2026-08-02 · ai · Gumbel重参数化可微采样

深度学习训练需要梯度穿过随机节点。高斯采样好办——$\mu+\sigma\epsilon$ 把随机性搬进一个与参数无关的噪声变量,梯度干净地流过 $\mu,\sigma$。离散采样(从 categorical 分布取一个 token)就麻烦了:采样操作本身是 argmax,梯度几乎处处为零或不存在。这一篇讲两条让离散采样"可微"的路线:Gumbel-max 把采样改写成加噪 argmax,重参数化把随机性与参数的耦合拆开。两者解决同一个问题,手法不同,误差结构也不同。

Gumbel-max:采样 = 加噪 argmax

定理(Gumbel-max trick):给定 logits $z_1,\dots,z_K$,独立采样 Gumbel 噪声 $G_i\sim\text{Gumbel}(0,1)$(CDF 为 $F(g)=e^{-e^{-g}}$),则

$$ \arg\max_i\ (z_i+G_i)\ \sim\ \mathrm{Categorical}\!\left(\frac{e^{z_i}}{\sum_j e^{z_j}}\right). $$

也就是:softmax 归一化 + 按概率抽一个,与"给每个选项的 logit 加独立 Gumbel 噪声再取最大"是同分布的。后者没有归一化、没有累积分布查表,只是一次 argmax。

证明用"指数竞争"的思路,三步。第一步,Gumbel 的指数是指数分布:$e^{-G}\sim\text{Exp}(1)$,等价地 $e^{z+G}\sim e^z\cdot\text{Exp}(1)$(平移性质)。第二步,独立指数变量的竞争:若 $E_i\sim\text{Exp}(\lambda_i)$ 独立,则 $\arg\max_i E_i$ 取 $i$ 的概率是 $\lambda_i/\sum_j\lambda_j$——所有变量都是 Exp 族时,"谁先触发"的比例与速率成正比。直观:每个 $E_i$ 像第 $i$ 号泊松过程的首次到达时间,速率 $\lambda_i$ 大先到的概率正比于速率。第三步,代入 $E_i=e^{z_i+G_i}\sim\text{Exp}(e^{z_i})$,立即得 $P(\arg\max=i)=e^{z_i}/\sum_j e^{z_j}$。

构造侧,Gumbel 样本本身由逆变换采样得到:$u\sim\text{Uniform}(0,1)$,则 $G=-\ln(-\ln u)$ 服从 Gumbel(0,1)。整条采样链是 $u\to G\to z+G\to\arg\max$,前三步都可微(对 $z$),只有最后一步不可微。

工程上这给了分布采样一个新视角:归一化和采样可以分离——用 logits 直接加噪取 argmax,softmax 概率根本不需要显式算出来。这个方法在结构化预测(结构化 SVM 一族的扰动-and-MAP 推断)、随机束搜索和离散潜变量模型里反复出现。

第二条路:打分函数估计

另一条完全不相干的路是直接对 $\mathbb{E}[\text{sample}]$ 求梯度,用对数导数技巧(score function estimator,也叫 REINFORCE):

$$ \nabla_\theta\,\mathbb{E}_{x\sim p_\theta}[f(x)]=\mathbb{E}_x\!\left[f(x)\,\nabla_\theta\ln p_\theta(x)\right]. $$

推导一行:$\nabla p_\theta=p_\theta\nabla\ln p_\theta$,代入期望定义,$p_\theta$ 与 $\nabla\ln p_\theta$ 乘回被积函数。这个技巧不需要采样本身可微,任何分布、任何采样器都能用——代价是方差。梯度估计的方差随 $f$ 的尺度和采样器的随机性增长,实际训练要配基线(baseline)减方差:用控制变量 $b$ 改写为 $\mathbb{E}[(f(x)-b)\nabla\ln p_\theta]$,期望不变($\mathbb{E}[\nabla\ln p_\theta]=0$),方差大降。PPO 里 advantage 的标准化、RLHF 里 reward baseline 全是这一招。

REINFORCE 与 Gumbel-max 的对比本质是偏差-方差分工:Gumbel-max 给的是采样过程的精确改写,配合软化(见下)引入小偏差换低方差;REINFORCE 无偏但方差大,靠 baseline 和各种方差缩减手艺过日子。现代实践里两者都在用:RLHF 的 PPO 是 REINFORCE 体系(token 级 MDP,采样结构复杂),而离散 VAE、Gumbel-softmax VAE 走 Gumbel 体系。

软化 argmax:Gumbel-softmax

Gumbel-max 链条里唯一不可微的是 argmax。软化它是显然的下一步:用 softmax 代替 argmax,

$$ y_i=\frac{\exp\big((z_i+G_i)/\tau\big)}{\sum_j\exp\big((z_j+G_j)/\tau\big)}, $$

$\tau>0$ 是温度。$\tau\to0$ 时 $y$ 退化为 one-hot,抽样分布精确等于 categorical;$\tau$ 有限时 $y$ 是软化的概率向量——关于 $z$ 处处可微,梯度可以反传。这就是 Gumbel-softmax(Jang et al. 2017; Maddison et al. 2017 的 Concrete distribution),离散 VAE 靠它训练。

偏差从哪来:$\tau>0$ 时采出的 $y$ 不是严格 one-hot,下游计算收到的是"混合"向量;$\tau$ 越大方差越小、偏差越大(输出越来越像均匀平均),$\tau$ 小则接近精确采样但梯度方差回升——softmax 在低温下进入饱和区,梯度数值上消失。工程上 $\tau$ 通常随训练退火:先大后小,先让梯度流动把参数带进好区域,再逼近真实离散采样。

与 straight-through 技巧搭配是常见补丁:前向用硬采样(真 argmax,评估精确),反向按软化版本传梯度(ST 估计器)。偏差的来源换了位置,但多数场景比纯 Gumbel-softmax 稳。

VAE 里的重参数化:同一个思想的不同形态

连续潜变量那边,VAE 用的重参数化技巧(reparameterization trick)是把 $z\sim q_\phi(z|x)=\mathcal{N}(\mu_\phi,\sigma_\phi^2)$ 改写成 $z=\mu_\phi+\sigma_\phi\epsilon$,$\epsilon\sim\mathcal{N}(0,I)$。梯度对 $\phi$ 的依赖从"分布在变"搬到"确定性变换在变",期望对 $\phi$ 的导数可以穿过期望号:

$$ \nabla_\phi\,\mathbb{E}_{q_\phi}[f(z)]=\mathbb{E}_\epsilon[\nabla_\phi f(\mu_\phi+\sigma_\phi\epsilon)]. $$

能这么做的前提是分布族支持"噪声与参数分离"的参数化——高斯可以,categorical 不行(离散无平移结构),这正是 Gumbel-softmax 要补的洞。回头看,扩散模型里的噪声预测训练也是同一招:$x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon$ 把 $x_t$ 的采样改写成噪声变量的确定性函数,使损失对网络参数可微。重参数化技巧贯穿深度生成模型:VAE 的 ELBO 优化、扩散的噪声回归、离散选择的 Gumbel 软化,全是"把随机性搬进独立噪声变量"这一个动作的不同版本。

离散采样的可微化:Gumbel-max 改写链条 均匀噪声 u∼U(0,1) 与参数无关 G = −ln(−ln u) 逆变换采样 z + G(扰动 logits) 对 z 可微 argmax 或 softmax(z+G)/τ 硬采样不可微 / 软采样可微 Gumbel-max:精确改写 P(argmaxᵢ(zᵢ+Gᵢ)=i) = e^zᵢ/Σe^zⱼ 竞争引理:Exp 族首达 ∝ 速率 软化:τ→0 精确,τ 大则平滑有偏 REINFORCE:通用但高方差 ∇E[f] = E[f·∇ln p],无偏 baseline 减方差:f − b 任何分布可用,无需软化

小结

Gumbel-max 把 categorical 采样精确改写为"加 Gumbel 噪声取 argmax",归一化隐式完成,采样与概率计算分离;软化 argmax 成 softmax((z+G)/τ) 得到处处可微的 Gumbel-softmax,τ 控制偏差-方差的交换。对照组 REINFORCE 用对数导数技巧给出无偏梯度,任何分布可用但以高方差为代价,靠 baseline 控制。VAE、扩散、离散选择模型里的三类重参数化,共享同一个核心动作:把随机性搬进与参数无关的噪声变量,让梯度只走确定性路径。