SeqGAN学习笔记(一)
本篇文章为本人目前对论文《SeqGAN: sequence generative with adversarial nets with policy gradients》的学习与总结,欢迎批评指正。
论文思路
1、论文研究的问题
此篇论文意在将生成式对抗网络(GAN)这一训练生成模型的新方法应用在离散序列生成领域。论文中选取的任务之一是text generation。
简单来说,text generation的目标是训练一个神经网络(生成器)自动生成符合语言模型P(sentence)$的语句:
主流的训练该神经网络的方法为使用真实的语料,在观察到的情况下maximize的log likelihood,即MLE:
那么,问题来了。使用MLE训练的神经网络生成器存在一些问题:
- 在训练过程中使用了Teacher-forcing方法,导致了exposure bias的问题。
- 逐词评判loss的方法不合理,应当以整个句子作为判断标准。
- 语料库不能完全覆盖真实情况的语料。
论文中举例了一些改进这些方面的例子,但认为这些方法都没有从根本上解决问题。于是便引出了本论文的中心问题,为什么要用GAN来做这件事情,GAN做出了哪些改变。
2、为什么用GAN
如上一节所陈述的使用MLE训练模型存在的问题,MLE只能采样现有的部分语料,计算loss,然后通过loss回调参数,这就导致一些真实数据中的概率分布必然不可能被模型学习到。而GAN不同,GAN训练的生成器具有“创造性”。
众所周知,GAN中的生成器的参数调整来源于判别器“传回的判断”。我之前思维定势的以为这个“传回的判断”也是一个真实的loss,实际并不是,原始的GAN中生成器判别器间并没有直接的“联系”。它们之间是通过GAN的目标函数巧妙地“联系”在一起的。如下图所示:
李宏毅老师讲课内容
可以看出,在生成器生成something之后,判别器通过从真实数据中“学”到的东西判断something是假的,判别器所“学”的东西比有限的采样中样本的MLE的loss要能包含更多信息,因此生成器在对抗判别器所“学”时,也包含了很多自己学到的东西,因此具有了一定的“创造性”。
在数学理论上,GAN的优势体现在JS divergence上,感兴趣的话可以了解KL divergence与JS divergence的区别与联系。
理解完GAN的优势后就要思考为什么要开发SeqGAN呢?GAN用在NLP领域有什么难点呢?