Counter-Contrastive 学习:训练Language GAN

Publish

2021EMNLP

title

Counter-Contrastive Learning for Language GANs

摘要

生成对抗网络(GANs)在图像合成方面取得了巨大的成功,但在生成自然语言方面存在一定的困难。挑战来自于鉴别器传递的uninformative learning signal。换句话说,糟糕的learning singnal限制了生成结构丰富、语义丰富的语言的学习能力。在本文中,我们提出在语言gan中采用反对比学习(CCL)方法来支持生成器的训练。与标准的GANs采用简单的二元分类器来区分样本的真假相比,我们采用了一种反对比学习信号,通过提高语言合成器的训练

  • (1)把生成样本与真实样本 放在一起(以生成真实的数据)
  • (2)推开真实的样本(以阻碍鉴别的训练)从而防止鉴别器被过度训练。

我们在合成基准和实际基准上评估了我们的方法,并与以前的GAN相比,在对抗序列生成方面产生了具有竞争力的性能。

Solution problem

CCL

Experiment

Conclusion

没代码,不看了。

GAN原理总结及对比

原始GAN

GAN的主要灵感来源于博弈论中零和博弈的思想,应用到深度学习神经网络上来说,就是通过生成网络G(Generator)和判别网络D(Discriminator)不断博弈,进而使G学习到数据的分布,如果用到图片生成上,则训练完成后,G可以从一段随机数中生成逼真的图像。G, D的主要功能是:

● G是一个生成式的网络,它接收一个随机的噪声z(随机数),通过这个噪声生成图像

● D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片

训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量辨别出G生成的假图像和真实的图像。这样,G和D构成了一个动态的“博弈过程”,最终的平衡点即纳什均衡点。

GAN的特点:

● 相比较传统的模型,他存在两个不同的网络,而不是单一的网络,并且训练方式采用的是对抗训练方式

● GAN中G的梯度更新信息来自判别器D,而不是来自数据样本

GAN 的优点:

(以下部分摘自ian goodfellow 在Quora的问答)

● GAN是一种生成式模型,相比较其他生成模型(玻尔兹曼机和GSNs)只用到了反向传播,而不需要复杂的马尔科夫链

● 相比其他所有模型, GAN可以产生更加清晰,真实的样本

● GAN采用的是一种无监督的学习方式训练,可以被广泛用在无监督学习和半监督学习领域

● 相比于变分自编码器, GANs没有引入任何决定性偏置( deterministic bias),变分方法引入决定性偏置,因为他们优化对数似然的下界,而不是似然度本身,这看起来导致了VAEs生成的实例比GANs更模糊

● 相比VAE, GANs没有变分下界,如果鉴别器训练良好,那么生成器可以完美的学习到训练样本的分布.换句话说,GANs是渐进一致的,但是VAE是有偏差的

● GAN应用到一些场景上,比如图片风格迁移,超分辨率,图像补全,去噪,避免了损失函数设计的困难,不管三七二十一,只要有一个的基准,直接上判别器,剩下的就交给对抗训练了。

GAN的缺点:

● 训练GAN需要达到纳什均衡,有时候可以用梯度下降法做到,有时候做不到.我们还没有找到很好的达到纳什均衡的方法,所以训练GAN相比VAE或者PixelRNN是不稳定的,但我认为在实践中它还是比训练玻尔兹曼机稳定的多

● GAN不适合处理离散形式的数据,比如文本

● GAN存在训练不稳定、梯度消失、模式崩溃的问题(目前已解决)

模式崩溃(model collapse)原因

一般出现在GAN训练不稳定的时候,具体表现为生成出来的结果非常差,但是即使加长训练时间后也无法得到很好的改善。

具体原因可以解释如下:GAN采用的是对抗训练的方式,G的梯度更新来自D,所以G生成的好不好,得看D怎么说。具体就是G生成一个样本,交给D去评判,D会输出生成的假样本是真样本的概率(0-1),相当于告诉G生成的样本有多大的真实性,G就会根据这个反馈不断改善自己,提高D输出的概率值。但是如果某一次G生成的样本可能并不是很真实,但是D给出了正确的评价,或者是G生成的结果中一些特征得到了D的认可,这时候G就会认为我输出的正确的,那么接下来我就这样输出肯定D还会给出比较高的评价,实际上G生成的并不怎么样,但是他们两个就这样自我欺骗下去了,导致最终生成结果缺失一些信息,特征不全。

关于梯度消失的问题可以参考郑华滨的令人拍案叫绝的wassertein GAN,里面给出了详细的解释,不过多重复
img

局部极小值点

原始GAN中判别器要最小化如下损失函数,尽可能把真实样本分为正例,生成样本分为负例:

$-\mathbb{E}{x \sim P{r}}[\log D(x)]-\mathbb{E}{x \sim P{g}}[\log (1-D(x))]$(公式1 )

其中P_r是真实样本分布,P_g是由生成器产生的样本分布。对于生成器,Goodfellow一开始提出来一个损失函数,后来又提出了一个改进的损失函数,分别是

$\mathbb{E}{x \sim P{g}}[\log (1-D(x))]$(公式2)

$\mathbb{E}{x \sim P{g}}[-\log D(x)]$(公式3)

为什么GAN不适合处理文本数据

  1. 文本数据相比较图片数据来说是离散的,因为对于文本来说,通常需要将一个词映射为一个高维的向量,最终预测的输出是一个one-hot向量,假设softmax的输出是(0.2, 0.3, 0.1,0.2,0.15,0.05)那么变为onehot是(0,1,0,0,0,0),如果softmax输出是(0.2, 0.25, 0.2, 0.1,0.15,0.1 ),one-hot仍然是(0, 1, 0, 0, 0, 0),所以对于生成器来说,G输出了不同的结果但是D给出了同样的判别结果,并不能将梯度更新信息很好的传递到G中去,所以D最终输出的判别没有意义。

  2. 另外就是GAN的损失函数是JS散度,JS散度不适合衡量不想交分布之间的距离。

(WGAN虽然使用wassertein距离代替了JS散度,但是在生成文本上能力还是有限,GAN在生成文本上的应用有seq-GAN,和强化学习结合的产物)

训练GAN的一些技巧

  1. 输入规范化到(-1,1)之间,最后一层的激活函数使用tanh(BEGAN除外)

  2. 使用wassertein GAN的损失函数,

  3. 如果有标签数据的话,尽量使用标签,也有人提出使用反转标签效果很好,另外使用标签平滑,单边标签平滑或者双边标签平滑

  4. 使用mini-batch norm, 如果不用batch norm 可以使用instance norm 或者weight norm

  5. 避免使用RELU和pooling层,减少稀疏梯度的可能性,可以使用leakrelu激活函数

  6. 优化器尽量选择ADAM,学习率不要设置太大,初始1e-4可以参考,另外可以随着训练进行不断缩小学习率,

  7. 给D的网络层增加高斯噪声,相当于是一种正则


来源

SeqGAN:具有Policy梯度的序列生成对抗网络

Publish

AAAI-2017

title

SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

solution problem

生成对抗网络(GAN)在生成real_value数据取得了巨大的成功,但是在用于生成离散数据具有局限性,主要原因在于:来自生成模型的离散输出使其难以从判别模型的梯度更新传递给生成模型。此外:判别模型只能评估完整的序列,而对于部分生成的序列,一旦生成完整序列,就需要去平衡当前和未来的评分。

Summary

  1. 提出一种训练生成模型的新方法SeqGAN
  2. 其数据生成器建模使用强化学习中的随机策略,其中RL奖励值来自GAN判别器对完整序列的评判。使用蒙特卡洛搜索传回中间状态。

    Conclusion

    在合成数据和现实任务上进行的大量实验表明,与强大的基线相比,有了显著的改进.

    Other

    蒙特卡洛搜索

    学习资料
    1
    2