How (not) to Train your Generative Model: Scheduled Sampling, Likelihood, Adversary?
Ferenc Huszár
stat.ML, cs.AI, cs.IT, cs.LG
2015-11-17
把 scheduled sampling 改写成 KL 散度,证明其训练目标不一致,无法收敛到真分布;并指出训练生成模型应优化反向 KL,用广义 JS 散度解释了 GAN 出图为何更逼真。
2015 年前后,RNN/LSTM 这类自回归模型(autoregressive model,逐个符号往后预测的模型)是生成文本、图像标题的主流。训练它们用最大似然(maximum likelihood,ML):给一句真句子,最大化模型预测出每个字的概率。可生成时问题冒出来了。
训练时模型永远只吃真实句子的前缀,所以每一步预测都建立在干净输入上。生成时它得吃自己上一步吐出来的字。一旦某一步采到一个不太对的字,后面就建立在这个错字之上,错误像滚雪球,句子很快塌成一段乱码。Bengio 等人 2015 年把这叫训练-生成失配,并给出一个当时很流行的修补:scheduled sampling(计划采样),训练时按一定概率把真实输入换成模型自己采样的字,让模型提前适应自己的输出。这招帮队伍拿下 2015 年 MSCOCO 图像标题赛冠军,一时很响。
Huszár 这篇要问的是更底层的两件事:scheduled sampling 修对了吗?最大似然本身是不是训练生成模型的正确目标?
第一刀砍向 scheduled sampling。他把这套训练目标改写成两个 KL 散度(Kullback-Leibler divergence,衡量两个分布差异的非对称度量)的组合,在「只看长度为 2 的序列」这个最简情形下推导。最大似然等价于最小化正向 KL,即 KLP‖Q。当 scheduled sampling 把第一个符号换成模型自己的采样时,目标变成另一项,其中第二个符号的预测不再以真实的前一个字为条件。完整目标是两者的凸组合,由参数 ε 控制(从 1 退火到 0)。
衡量一个训练目标好不好,统计里有个硬标准:严格正则评分规则(strictly proper scoring rule),意思是当模型族足够灵活、数据足够多时,这个目标的极小值必须落在 Q=P 上,即能收敛到真实分布。这个性质保证了估计的一致性(consistency)。Huszár 把 scheduled sampling 的目标整理后,发现当 ε→0,极小值不在真实的联合分布 P,而在「把每个位置当独立」的因式分解分布 P(x1)·P(x2) 上。训练得越狠,最优解越是「忽略前缀,只记每个位置上字符的边缘分布」。放到 RNN 里,等价于最优架构把隐状态只当成一个位置计数器,完全不看前缀写了什么。中间的 0<ε<1 也不一致,极值点夹在真分布和因式分解分布之间。
这就是为什么 scheduled sampling「好像有用却没修到根上」:它没解决最大似然的固有毛病,只是把模型推向一个能从错误中爬出来、但代价是丢掉上下文依赖的平凡解。至于它为何还能拿 MSCOCO 冠军,作者推测是早停、随机重启、模型结构、退火调度几样东西偶然撞上的副作用,优化并没真正收敛到那个平凡解。
这是一篇纯理论文章,没有跑任何基准对比实验,「结果」是几条数学结论加一张示意图。
最重要的结论:scheduled sampling 在「长度为 2 序列」这一最简设置下被严格证明不一致,无法收敛到真分布。对生成模型训练目标,文章给出一条主线:
| 目标 | 等价的 KL | 行为 | 对样本的影响 |
| 最大似然(ML) | KL[P‖Q] 正向 | 覆盖所有模、把概率铺到 P 没有的地方 | 过度泛化,常吐出真实数据里见不到的样本 |
| 反向 KL(理想) | KL[Q‖P] | 盯住最大的模、绝不往 P 没有的地方放质量 | 不出离谱样本,代价是丢掉次要模 |
| 广义 JS 散度 JSπ | π→0 像 ML,π→1 像反向 KL | 在两者间插值 | 调 π 可在「覆盖」和「择模」间过渡 |
文章用一个二维高斯做演示(图 1):真实分布 P 是各向异性的多模高斯,用单个各向同性高斯 Q 去逼近。π=0.1 时 Q 把质量摊开去罩住所有模(像最大似然);π=0.5 就是标准 JS,也就是 GAN 近似最小化的那个;π=0.99 时 Q 缩到主模上(像反向 KL)。关键证明是:当 π→0,JSπ/π 趋于 KL[P‖Q];当 π→1,JS{1−π}/(1−π) 趋于 KL[Q‖P]。于是变 π 就能在最大似然和理想反向 KL 之间连续过渡。
参数 π 有个很具体的实操含义:判别器训练时收到的真假样本比例。π=0.5 是标准 GAN 的平衡分类;π<0.5 真实样本过采样;π>0.5 偏向生成样本。调这一个比例,就等于在「覆盖所有可能」和「只出最稳的样本」之间调档。
这篇把当时两件说不清的事说清了。第一,scheduled sampling 不是免费午餐:它「修好」暴露偏差(exposure bias)的代价是把模型推向忽略上下文的平凡解。现在做序列生成的人还在反复撞这道墙,论文给的是一个干净的理论警告,而非另一套调度技巧。第二,它给 GAN 的「图比 VAE/ML 更锐」一个信息论解释:GAN 近似最小化的 JS 散度偏向反向 KL 的择模行为,所以宁可少覆盖、也不出离谱样本;而 VAE 优化的是似然下界 ELBO,落在最大似然/正向 KL 这一族,所以倾向全覆盖、图更糊。后来业界用 VAE 出多样性、用 GAN 出锐度、用两者混合,根子就在这两条 KL 走向不同。
对今天的从业者,直接收益有限。这些目标函数在大模型时代早已不是手调的对象。但理解「正向 KL 覆盖、反向 KL 择模」这一条,仍能解释一连串现象:为什么 RNN 自回归采样会雪崩,为什么 GAN 的样本偏保守,为什么扩散模型出来后大家不再纠结这个。它是读后续大量生成模型文献的底座。
作者自己点了几条硬伤。GAN/对抗训练当时还很新:它依赖从 Q 采样,在高维空间极其低效,基本只能用于低维问题,且对超参敏感;离散生成(文本这种采样不可微的场景)怎么上对抗训练,当时还没人讲得清。他提出的「调 π」这个改动可能伤收敛性,而文章明确说没研究过这一点。
另有几处站不稳的地方。其一,scheduled sampling 的不一致证明只在「长度 2 序列」上严格成立,作者承认这只是理想化形式,真实算法是采样的、有限数据,长序列的严格性没补上,推到一般情形是直觉而非定理。其二,「GAN 最小化 JS 散度」本身就是近似,原版 GAN 用的是非饱和损失,严格 JS 最小化要求判别器已最优,这个差距文章一笔带过。其三,反向 KL 作为「理想感知目标」依赖一个强假设:人脑已学到精确的真实分布 P。这更像一个比喻,不是可验证的模型。其四,全文没有任何实验验证「调 π」真能换来更好的样本,广义 JS 的实用价值停留在示意图层面。