您的位置:首页 > 理论基础 > 计算机网络

[生成对抗网络] 论文研读-SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

2017-12-04 19:28 741 查看

写在前面

GAN作为生成器已经在图像方面大放异彩,然而在NLP方面的应用还不多,原因一部分在于GAN是为连续空间设计的,而NLP是离散的,因此需要一点小小的trick才可以work,SeqGAN这一篇文章将RL作为鉴别器,用reward作为梯度来指导生成器的学习,算是一种option

原文地址 : https://arxiv.org/pdf/1609.05473.pdf

源代码 : https://github.com/LantaoYu/SeqGAN

参考 : https://zhuanlan.zhihu.com/p/25168509

Introduction

文章首先指出传统的序列生成模型都是非监督的,使用LSTM来进行训练,最常用的optimization是最大似然估计。

但是Bengio在2015年提出,最大似然估计会造成exposure bias问题。简单来说,就是序列生成可能会生成一个在原来training data中根本不存在的序列(原因在于RNN生成器在生成下一时刻输出时使用的上一时刻自身的输出,而不是真实的训练文本,因此误差会不断累积,最终模型可能崩坏),Bengio的解决办法是使用Scheduled Sampling[Bengio 2015],在训练时随机地将RNN的预测结果喂给RNN自己,使得RNN网络得以处理自身产生的错误,避免误差的累积

但是,Huszar指出SS技巧并不能根本性的解决问题[Huszar 2016]。另外一种解决办法是评估整个生成序列而不是每一步都进行评估,从而使得序列整体的loss变小(比如使用BLEU来评价整个句子),但是BLEU不太适用于Chatbot和Poem的场景,因此也不太好

GAN应用于NLP时存在两个问题:

【1】GAN是为连续型数据设计的(比如图像,在接收到梯度0.01后,每一个像素值p进行微调后变成的p+0.01仍然make sense,但是对于离散化表示的文字p+0.01可能就差之千里了),对于离散表示的文字来说并不适用;

【2】第二个问题在于判别器只能对序列整体给出loss/score, 对于序列这种partially working 任务来说,无法预测在未来的完整序列是否足够的好,因此也就无法用来指导当前时间步的序列生成了

作者提出解决以上两个issues的方法:

【1】使用Reinforcement Learning(aka RL)来作为生成器,state是已经生成了的tokens,action是下一个将要生成的token,并且没有使用BLEU来作为reward。为了解决离散输出导数无法feedback给生成模型的问题,作者选择使用Policy Gradient[Sutton el al. 1999][知乎讲解]的方法,结合Monte Carlo Search来给出state-action的近似评价,并以此训练policy,也就是生成模型。

【2】 使用CNN作为判别器

关于GAN中各种散度可以[戳这里]

最后让我们来膜拜一下Bengio

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐