NLP中使用GANs的一点理解

首先是两篇文章SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient,AAAI 2017 Submitted on 18 Sep 2016,和Adversarial Learning for Neural Dialogue Generation ACL 2017 Submitted on 23 Jan 2017,时间上来说纪为师兄的这篇晚一些,但是感觉两个人使用不同的方法尝试解决同一个问题,就是在NLP生成词这么大的一个搜索空间里面,如何有效的进行训练,如果句子是“我喜骄傲狂反恐降幅咔酱发卡。”只知道这个句子是假的,但是是哪个词生成的不好,好。于是在巨大的搜索空间面前根本就采样不到一个令D满意的句子,哪怕一个句子中有几个词组生成的是不错的。这样导致一个很严重的问题是,因为discriminator可能轻松的判断出哪个句子是真实的(捕获真实数据的哪怕很浅层的语义信息也足够判断了),哪个句子是假冒的,于是生成器根本就训练不起来。两位大佬想到的解决方法都是让采样空间变得小一点,如果每次仅仅将一个单词的选择当成是选择空间,然后让判别器判断,这样就可以直接知道这个单词选择的好或者不好,这样就可以训练了,就是如何只用判断本次选择的单词是好是坏。这个感觉很直观,比如说当前句子是我喜下一个词如果是等等很多词,discriminator就应该能够判断这是一个好的应该给与较高的reward,这样经过可数的采样次数就能得到比较好的词语从而优化生成器。于是现在的问题变成了没有一个合适的D来判断一个不完整的句子是否是真的或者假的,SeqGANs的方法是判别器还是用原来的那个判别器,只是我们使用蒙特卡洛树搜索来构造出完整的句子丢给判别器,但是这个方法感觉不是很好,因为蒙特卡洛树搜索也是一个很大的搜索空间,这样欠采样问题导致方差很大,难以训练,这也是SeqGANs只敢做一些歌词生成这样的任务,不敢做主流任务,而且看loss好像也仅仅是因为跳进了一个不错的局部最优点。纪为师兄的解决方法是对真实的训练数据通过截断采样的方式构造出不完整的真实句子,然后训练判别器,这样就能判断一个不完整的生成的句子是好是坏了。而且师兄这篇用到了非常多非常多的trick,虽然是用集群跑的难以复现,还是有很多trick值得借鉴,但是做的是对话任务,感觉还是有点说服力不足。(感觉本质上来说他们没有从根本上解决问题!:

SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

为啥要用蒙特卡洛树搜索呢?

根据题目就知道作者使用的是Policy Gradient的方法,但是policy gradient不是等一个trajectory 结束了才计算总体reward么?为啥还需要使用蒙特卡洛进行搜索呢?

  • 因为如果使用整个trajectory的优化是在是太困难了,因为在词表的大小是1W的话,句子长度是30,那么相当于在训练的开始阶段需要从10000^30的动作空间里面选择出一个比较好的序列,这样是非常困难的,而且传统的policy gradient方法不能够细化到去评估当前生成token的好坏和对后面生成的影响。这主要是因为discriminator只能给一个完整的句子打分。

Adversarial Learning for Neural Dialogue Generation

tricks

MaskGAN: Better Text Generation via Filling in the _______

  • 不同于上面的两篇用策略梯度法,这次用的是actor-critic方法直接提供token级的reward信息
  • 算法的核心:



  • 作者提到的两个训练的trick,TPU在燃烧。
  • 说明用偏差换取方差的策略是成功的,方差降低了一个量级。

    到了最喜欢的openreview环节,看看reviewer是怎么喷的(-:
  • review1:仅仅用token级别的reward,但是局部最优不等于全局最优
  • review2:喷的还是挺狠的,预训练太多了,不够优雅,并且怀疑没有给baseline做预训练。
  • review3:actor-critic训练太费资源了,mask矩阵的选择很重要,有什么策略么?
    • 作者回应不是很费资源,因为critic只是在discriminator的头部加的一个小部件,和discriminator大部分是共享参数的,所以也很容易训练,作者通过实验对比和baseline的耗时是差不多的(因为方差更小,更容易收敛了)
    • mask策略是不是随机选择的,因为作者发现这样难以训练,而是一连块的被mask掉。

你可能感兴趣的:(NLP中使用GANs的一点理解)