干货 | 你的 KL 散度 vanish 了吗?

探讨了变分自编码器(VAE)在对话生成任务中的KL消失问题,分析了其成因并提出了八大解决方案,包括KL成本退火、FreeBits、归一化流等,旨在改善VAE与RNN/PixelCNN等自回归模型结合时的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:https://www.sohu.com/a/216987798_297288

最近(其实是去年)和大家分享过 Variational Autoencoder (VAE) 在对话生成(文本生成)上的一些应用(点击查看)。由于生成模型的新颖性和效果都能让人眼前一亮,所以越来越多的学者都对其进行了探索与尝试。然而当 VAE 和强如RNN/PixelCNN 这样的autoregressive models 在一起训练时,会出现糟糕的 “KL-vanishing problem”,或者说是 “posterior collapse”。那我们今天深入一下这个问题,希望能在对大家有所帮助的同时呢顺便夹带一下私货(捂脸)。今天会涉及的论文有:

1.《Generating sentences from a continuous space》. CONLL 2016.

2. 《Improving variational inference with inverse autoregressive flow》. NIPS 2016.

3. 《Variational lossy autoencoder》. ICLR 2017.

4. 《Improving Variational Encoder-Decoders in Dialogue Generation》. AAAI 2018.

5. 《Z-Forcing: Training Stochastic Recurrent Networks》. NIPS 2017.

6. 《Improved Variational Autoencoders for Text Modeling using Dilated Convolutions》. ICML 2017.

7. 《Learning discourse-level diversity for neural dialog models using conditional variational autoencoders》. ACL 2017.

8. 《Data noising as smoothing inneural network language models》. ICLR 2017.

我们先来看看导致 KL-vanishing 的原因是什么?回到VAE 的 ELBO objective

包含reconstruction loss 和KL loss 两部分。我们的目标是最大化 ELBO,等价于最小化 KL 项并最大化 reconstruction 项。先看 KL 项,如果简单的将data x 和latent variable z 无关并让 q(z|x) = q(z) = p(z),即posterior 退化为和 prior 一样的高斯,KL 就可以取得最小值0。再看 reconstruction 部分,当扮演 p(x|z) 角色的decoder 足够强大,仅凭自己就可以 model q(x)分布,那么也没有必要去依赖 z。

以上两个原因导致了 KL-vanishing。因此,我们也可以有两大角度去解决这个问题。第一,对于 KL,我们需要为latent variable 寻找更为flexible 的 prior 和posterior,不仅仅是因为优化 mean- field Gaussian distribution的 KL 显得过于容易,而且真实情况下的 posterior 也不可能只是个 Gaussian distribution。第二,对于 reconstruction 项,我们需要一个不那么强大的decoder,让 decoder 也去依赖 z,不要一个人把事情做了。

那我们来把试图解决这个问题的方法按照上述的两个角度做个分类:

第一大类:从 KL 出发

1、KL cost annealing

KL cost annealing 在使用上非常简单,只需要在 KL 项上乘以一个权重系数,训练刚开始的时候系数大小为0,给 q(z|x) 多一点时间学会把 x 的信息 encode 到 z 里,再随着训练 step 的增加逐渐系数增大到 1。通常搭配 word drop-out(下面有介绍)一起使用效果最佳。

代表作:《Generating sentences from a continuous space》. CONLL 2016.

优点:代码改动很小

缺点:需要针对不同数据集调整增大的速度。推荐作为 baseline。

2、Free Bits

Free Bits 的想法也非常简单,为了能让更多的信息被 encode 到latent variable 里,我们让KL 项的每一维都“保留一点空间”。具体来说,如果这一维的 KL 值太小,我们就不去碰它,等到它增大超过一个阈值再优化。由此可得损失函数是:

当然,我们也可以在整个KL 上控制而不用细分到每一维度,但是这可能会导致只有很少的维度在起作用,z 的绝大部分维度并没有包含 x 的信息。

代表作:《Improving variationalinference with inverse autoregressive flow》. NIPS 2016.

优点:Free Bits的方法操作简单

缺点:阈值 ε 也是要不断尝试的,我个人建议选取比如5左右的一个相对较小值。

3、Normalizing flow

Normalizing flow 的思想有很多变种,包括 Autoregressive Flow、Inverse Autoregressive Flow 等等。核心思想是我们先从一个简单分布采样 latent variable,接着通过不断迭代可逆的转换让 latent variable 更为flexible。这类方法大多是为了得到一个更好的 posterior,毕竟直接用 Gaussian 建模现实问题是不够准确的。但是方法复杂度较高,一个可行的替代方案是我们可以用 adversarial learning 的思想来学习 posterior,这里不多做展开。这个方法还没有在NLP 上实践过,也许可以发paper(大雾)。

代表作:《Variational lossy autoencoder》. ICLR 2017.

优点:不再局限于高斯分布

缺点:方法复杂度较高

4、Auxiliary Autoencoder

这个方法我们在对话生成上率先提出并进行了尝试,对于 VAE+RNN 的组合来说,RNN 和 VAE 各自的损失函数在训练初期其实会互相干扰,导致 posterior 学不好。同时,在用VAE(Conditional VAE,CVAE)建模对话时,posterior 得到的 z 是否能蕴含 response 的信息其实并不能保证。因此我们显式地利用 z 对 response 的 hidden 层做Autoencoder,并且将 VAE 和AE 两部分分开训练,保证更容易收敛。

如果只是应用在文本生成上就更为简单了,损失函数如下:

看上去只需要在decode 之前加一层 hidden 层,并在损失函数里加上对 hidden 层的autoencoder loss,但是却可以显著避免KL-vanishing 的问题,同时保证了最优值和原公式保持一致。近期我们会一起放出论文和代码。

代表作:《Improving Variational Encoder-Decoders in Dialogue Generation》. AAAI 2018.

《Z-Forcing: Training Stochastic Recurrent Networks》. NIPS 2017.

第二大类:从 reconstruction 项出发

5、Word drop-out

Word drop-out 是典型的弱化 decoder 的方法。在训练阶段,我们将decoder 的部分输入词替换为UNK,也就是说 RNN 无法仅依靠前面的生成的词来预测下一个词了,因此需要去多依赖 z。非常有趣的一点在于,这种弱化decoder 方法还带来了性能上的提升,在 ICLR 的《Data noising as smoothing inneural network language models》文中将 Word drop-out 证明为神经网络的平滑技术,因此大家可以放心使用。

代表作:《Generating sentences from a continuous space》. CONLL 2016.

6、CNN decoder

既然RNN 有问题,那不妨把目光放到 CNN 上。如果只用传统的CNN 可能 contextual capacity 较差,因此可以使用 Dilated CNN decoder,通过调整 CNN 的宽度,从最弱的 Bag-of-words model 到最强的LSTM ,Dilated CNN decoder 都可以无限逼近,因此不断尝试总可以找到最合适的,方法效果也非常的好。

代表作:《Improved Variational Autoencoders for Text Modeling using Dilated Convolutions》. ICML 2017.

7、Additional Loss

通过引入额外的 loss,例如让 z 额外去预测哪些单词会出现,因此也被称为 bag-of-words loss。之所以将其归类为第二类,因为这个方法可以看做是增大了 reconstruction 的权重,让 model 更多去关注优化reconstruction 项而不是KL。这个方法也可以非常有效避免 KL-vanishing。

代表作:《Learning discourse-level diversity for neural dialog models using conditional variational autoencoders》.ACL 2017.

以上就是今天全部的内容,如果还想了解更多,可以查看相关文章:

<think>嗯,用户这次聚焦在反向KL的应用机制上,特别是异常检测场景。结合对话历史和引用材料,需要从数学本质和实际应用两个层面展开。 用户可能正在研究异常检测算法(比如引用[2][4]提到的扩模型),或者需要为某个实际项目选择评估指标。从ta追问“原因”而非“定义”来看,基础概念应该已掌握,深层需求可能是想理解“为什么反向KL比前向KL更适合异常检测”。 引用[1]直接指出反向KL的特性:当真实分布P在某个区域概率为零时,反向KL会强制近似分布Q在该区域也为零。这正好对应异常检测的核心逻辑——正常样本应该覆盖低概率区域。例如医疗影像中,健康组织分布(P)在病变区域(Q)概率为零,反向KL能敏感捕捉这种分布偏移。 引用[2][4]提到的扩模型案例进一步佐证:AnoDDPM等模型在去噪过程中,反向KL帮助模型避免将异常特征重建为正常样本(防止“相同捷径”问题)。这里可以强调KL方向性带来的建模差异:前向KL重建时允许模糊异常区域(因为P主导),而反向KL会主动规避异常区域的重建(Q主导)。 数学上需要补充两点:1) 反向KL的局部聚焦特性(通过Q(x)logQ/P实现),使模型更关注高置信正常区域;2) 与JS对比,说明KL非对称性的独特价值。但用户没要求公式推导,所以回答用文字描述即可。 最后要关联应用场景。引用[3][5]的视频异常检测和身份认证案例表明,现实场景中正常行为数据丰富而异常稀缺,反向KL的“避免覆盖异常”特性恰好匹配这种数据分布。这点可能正是用户想听的底层逻辑。</think>理解反向KL在异常检测中的应用原因,需从其数学本质和实际场景特性出发: ### 核心原因:非对称性带来的分布覆盖偏好 反向KL定义为: $$D_{KL}(Q \parallel P) = \sum_{x} Q(x) \log \frac{Q(x)}{P(x)}$$ 其关键特性在于: 1. **规避零概率陷阱** 当真实分布$P(x)=0$时(即异常区域),反向KL会强制$Q(x)$也必须趋近于0。这意味着模型会**主动避免将概率质量分配到真实分布未覆盖的区域**,从而对异常点($P(x)≈0$)产生极低的重构概率。 2. **保守性倾向** 反向KL倾向于让近似分布$Q$集中在$P$的高密区域(如图),而**忽略$P$的低概率尾部**。这种特性恰好匹配异常检测需求: ![](https://miro.medium.com/v2/resize:fit:4800/format:webp/1*S3xc4nO7qvsYr1E0A1Tp7A.png) *(示意图:反向KL使Q分布更紧凑,避免覆盖P的尾部区域)* ### 异常检测场景的匹配性 1. **异常数据的稀疏性** 异常检测中,正常样本占绝大多数($P_{normal}$高概率),异常样本极少($P_{anomaly}≈0$)。反向KL的优化目标: $$\min_{Q} D_{KL}(Q \parallel P_{normal})$$ 会驱使模型$Q$**严格拟合正常数据分布**,对偏离正常模式的样本($P_{normal}(x)≈0$)产生显著重构误差。 2. **防止“过泛化”** 前向KL$D_{KL}(P \parallel Q)$要求$Q$覆盖$P$的所有可能区域(包括异常点),易导致模型对异常点也给出高概率。而反向KL的保守性**避免了对异常区域的错误覆盖**,更利于识别分布外样本[^1][^4]。 3. **实际案例验证** - **医疗影像异常检测**:AnoDDPM模型使用反向KL原理,在病理切片中成功识别癌细胞区域(异常),因其重构正常组织时在病变区域产生显著误差[^4] - **视频监控**:反向KL驱动的模型在NWPU Campus数据集中,对场景相关异常(如特定区域的异常行为)检测效果显著,因其避免了对非常规动作的“合理化”重构[^3] ### 与正向KL的对比 | **特性** | 反向KL ($D_{KL}(Q \parallel P)$) | 前向KL ($D_{KL}(P \parallel Q)$) | |------------------|--------------------------------------|--------------------------------------| | **分布覆盖倾向** | $Q$集中在$P$的高密区域 | $Q$覆盖$P$的所有可能区域 | | **对$P(x)=0$的处理** | 强制$Q(x)→0$ (避免异常区域覆盖) | 允许$Q(x)>0$ (可能误判异常) | | **异常检测适用性** | ⭐⭐⭐⭐⭐ 对异常敏感 | ⭐⭐ 易过泛化 | > **简言之**:反向KL的保守性使其成为异常检测的“安全选择”——它严格约束模型只学习正常数据的核心模式,对任何偏离核心分布的数据点保持警惕,从而放大异常信号[^1][^4]。 --- ### 相关问题 1. 在扩模型(如DDPM)中,反向KL如何具体影响去噪过程?[^2][^4] 2. 反向KL是否会导致模型忽略正常数据的合理变体(假阳性)?如何平衡敏感性与特异性? 3. 除KL外,Wasserstein距离在异常检测中有何优势? 4. 如何处理反向KL计算中$P(x)=0$导致的数值不稳定问题?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值