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

转自: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.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值