当前位置:诺佳网 > AI人工智能 > AI通用技术 >

GAN新手必读:如何将将GAN应用于NLP(论文笔记)

时间:2017-11-22 | 栏目:AI通用技术 | 点击:

作者:MirandaYang

GAN 自从被提出以来,就广受大家的关注,尤其是在计算机视觉领域引起了很大的反响。“深度解读:GAN模型及其在2016年度的进展”[1]一文对过去一年GAN的进展做了详细介绍,十分推荐学习GAN的新手们读读。这篇文章主要介绍GAN在NLP里的应用(可以算是论文解读或者论文笔记),并未涉及GAN的基本知识 (没有GAN基础知识的小伙伴推荐先看[1],由于本人比较懒,就不在这里赘述GAN的基本知识了J)。由于很长时间没有写中文文章了,请各位对文章中不准确的地方多多包涵、指教。

虽然GAN在图像生成上取得了很好的成绩,GAN并没有在自然语言处理(NLP)任务中取得让人惊喜的成果。 其原因大概可以总结为如下几点:

下面我将主要介绍和分析最近阅读过的将GAN应用于NLP中的一些论文:

1. Generating Text via Adversarial Training

其中式 (6) 为标准GAN的优化函数,式 (7) 为feature matching的优化函数。

2. SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

(a) 其中左图为GAN网络训练的步骤1,判别器D主要用来区分真实样本和伪造样本,这里的判别器D是用CNN来实现的。

(b) 右图为GAN网络训练的步骤2, 根据判别器D回传的判别概率回传给生成器G,通过增强学习的方法来更新生成器G,这里的的生成器G是用LSTM来实现的.

(c) 因为G网络的更新策略是增强学习,增强学习的四个要素state, action, policy, reward分别为:state 为现在已经生成的tokens (当前timestep之前LSTM decoder的结果), action是下一个即将生成的token (当前解码词), policy为GAN的生成器G网络,reward为GAN的判别器D网络所生成的判别概率。其中,reward采用以下方法来近似:

本过程特点:即当解码到t时,即对后面T-t个timestep采用蒙特卡洛搜索搜索出N条路径,将这N条路径分别和已经decode的结果组成N条完整输出,然后将D网络对应奖励的平均值作为reward. 因为当t=T时无法再向后探索路径,所以直接以完整decode结果的奖励作为reward。

(d) 对于RL部分,本文采用了policy gradient方法。 根据policy gradient理论,生成器G的目标函数可以表示如下:

求导结果为: (详细推导过程请看原论文附页)

(e) 每隔一段时间,当生成更多的更逼真的句子后,重新训判别器D,其中判别器的目标函数表示如下:

算法结构图可以表示为如下:

实验部分主要分为合成数据实验和现实数据实验。

(a) 合成数据实验: 随机初始一个LSTM生成器A,随机生成一部分训练数据,来训练各种生成模型.

评判标准为:负对数似然(交叉熵) NLL. 详细实验设置可以参看原论文。

(b) 现实数据实验:主要展示中文诗句生成,奥巴马演讲生成,音乐生成的结果。实验数据分别为中文诗歌数据集 (16,394首绝句),奥巴马演讲数据集 (11,092 段落), Nottingham音乐数据集 (695首歌)。评测方法为BLEU score, 实验结果如下:

文中并未展示模型生成的诗歌等, 具体效果如何?

3. Adversarial Learning for Neural Dialogue Generation

(a) 因为本文是用于开放式对话生成,所以文中的生成器采用seq2seq模型 (而非普通的LSTM模型)。 判别器则采用了hierarchical encoder (而非CNN)。

(b) 采取了两种方法为完全生成或者部分生成的序列计算reward。除了 Monte Carlo search (与SeqGAN相似) 方法,本文新提出了一个能对部分生成的序列进行reward计算的方法。使用所有完全 (fully) 和部分 (partially) 解码的序列来训练判别器会造成overfitting。早期产生的部分(partially)序列会出现在许多的训练数据中,比如生成的第一个token y_1将会出现在所有的部分生成 (partially generated) 的序列里。所以本文提出仅仅分别从正(positive)序列 y+ 和负(negative)序列y-的每个子序列中随机地选取一个 sample来训练判别器D。这个方法比Monte Carlo search更快速,但是也会使得判别器更弱,更不准确。

(c) 在SeqGAN中,生成器只能间接的通过判别器生成的reward来奖励或者惩罚自己所产生的序列。而不能直接从 gold-standard序列中直接获取信息。 这种训练方式是脆弱的,一旦生成器在某个训练batch中变坏,判别器将会很容易对生成的句子进行判断 (比如reward为0 ),此时生成器就会迷失。生成器只知道现在生成的句子是坏的,但是并不知道如何调整才能使得生成的句子变好。为了解决这个问题,在生成器的更新过程中,本文输入了human-generated responses。对于这些human-generated responses, 判别器可以将其reward设置为1。这样生成器可以在上述情况下仍能生成好的responses。

(d) 训练过程中,有些针对dialogue system的设置(trick)。这部分内容,读者可以参考Jiwei Li之前的关于dialogue system的论文。

4. GANs for sequence of discrete elements with the Gumbel-softmax distribution

5. Connecting generative adversarial network and actor-critic methods

[1] 深度解读:GAN模型及其在2016年度的进展

[2] Actor-Critic Algorithms

[3] An actor-critic algorithm for sequence prediction


您可能感兴趣的文章:

相关文章