###好好好####RL-GAN For NLP: 强化学习在生成对抗网络文本生成中扮演的角色

本文主要是介绍###好好好####RL-GAN For NLP: 强化学习在生成对抗网络文本生成中扮演的角色,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

【导读】本文全面系统性梳理介绍了强化学习用于发掘GAN在NLP领域的潜力,请大家阅读。

1. 基础:文本生成模型的标准框架

2. 问题:GAN为何不能直接用于文本生成

2.1. GAN基础知识

2.2. GAN面对离散型数据时的困境(啥是离散型数据?)

3. 过渡方案:对于GAN的直接改进用于文本生成

3.1. Wasserstein-divergence,额外的礼物

3.2. Gumbel-softmax,模拟Sampling的softmax

4. RL在GAN文本生成中所扮演的作用

4.1. 关于Reinforcement Learning的闲聊闲扯

4.2. SeqGAN 和 Conditional SeqGAN

5. 一些细节 + 一些延伸

5.1. Reward Baseline:奖励值上的 Bias

5.2. REGS:一人犯错一人当

5.3. MC Search & Discriminator for Partially Decoded Sequences:准度与速度的抉择

5.4. Teacher Forcing:给Generator一个榜样

5.5. Actor-Critic:更广义上的GAN?

5.6. IRGAN:两个检索模型的对抗

结语

Acknowledgement

Reference


【导读】本文全面系统性梳理介绍了强化学习用于发掘GAN在NLP领域的潜力,请大家阅读。

1. 基础:文本生成模型的标准框架

文本生成(Text Generation)通过 机器学习 + 自然语言处理 技术尝试使AI具有人类水平的语言表达能力,从一定程度上能够反应现今自然语言处理的发展水平。

下面用极简的描述介绍一下文本生成技术的大体框架,具体可以参阅各种网络文献(比如:CSDN经典Blog“好玩的文本生成”[1]),论文等。

文本生成按任务来说,比较流行的有:机器翻译、句子生成、对话生成等,本文着重讨论后面两种。基于深度学习的Text Generator 通常使用循环神经网络(Basic RNN,LSTM,GRU等)进行语义建模。在句子生成任务中,一种常见的应用:“Char-RNN”(这里“Char”是广义上的称谓,可以泛指一个字符、单词或其他文本粒度单位),虽然简单基础但可以清晰度反应句子生成的运行流程,首先需要建立一个词库Vocab包含可能出现的所有字符或是词汇,每次模型将预测得到句子中下一个将出现的词汇,要知道softmax输出的只是一个概率分布,其维度为词库 Vocab 的size,需再通过函数将输出概率分布转化为 One-hot vector,从词库 Vocab中检索得出对应的词项;在“Char-RNN”模型训练时,使用窗口在语料上滑动,窗口之内的上下文及其后紧跟的字符配合分别为一组训练样本和标签,每次以按照固定的步长滑动窗口以得出全部 “样本-标签” 对。

与句子生成任务类似,对话生成以每组Dialogue作为 “样本-标签” 对,循环神经网络RNN_1对Dialogue上文进行编码,再用另一个循环神经网络RNN_2对其进行逐词解码,并以上一个解码神经元的输出作为下一个解码神经元的输入,生成Dialogue下文,需要注意的是:在解码前需配置“开始”标记 _,用于指示解码器Decoder开启Dialogue下文首词(or 字)的生成,并配置“结束”标记 _,用于指示解码器结束当前的 Text Generation 进程。

这便是众所周知的“Seq2Seq”框架的基础形态,为了提高基础Seq2Seq模型的效果,直接从解码器的角度有诸如 Beam-SearchDecoder[2]、Attention mechanism Decoder[3](配置注意力机制的解码器)等改进,而从神经网络的结构入手,也有诸如Pyramidal RNN[4](金字塔型RNN)、Hierarchical RNN Encoder[5](分层循环网络编码器)等改进。改进不计其数,不一一详举,但不管如何,预测结果的输出始终都是一个维度为词库大小的概率分布,需要再甄选出最大值的Index,到词库Vocab中检索得出对应的单词(or 字符)。

 

2. 问题:GAN为何不能直接用于文本生成

2.1. GAN基础知识

GAN对于大家而言想必已经脍炙人口了,这里做一些简单的复习。GAN从结构上来讲巧妙而简单(尽管有与其他经典工作Idea相似的争议[6~7]),也非常易于理解,整个模型只有两个部件:1.生成器G;2.判别器D。生成模型其实由来已久,所以生成器也并不新鲜,生成器G的目标是生成出最接近于真实样本的假样本分布,在以前没有判别器D的时候,生成器的训练依靠每轮迭代返回当前生成样本与真实样本的差异(把这个差异转化成loss)来进行参数优化,而判别器D的出现改变了这一点,判别器D的目标是尽可能准确地辨别生成样本和真实样本,而这时生成器G的训练目标就由最小化“生成-真实样本差异”变为了尽量弱化判别器D的辨别能力(这时候训练的目标函数中包含了判别器D的输出)。GAN模型的大体框架如下图所示:

2.2. GAN面对离散型数据时的困境(啥是离散型数据?)

GAN的作者早在原版论文[8]时就提及,GAN只适用于连续型数据的生成,对于离散型数据效果不佳(使得一时风头无两的GAN在NLP领域一直无法超越生成模型的另一大佬VAE[9])。文本数据就是最典型的一种离散型数据,这里所谓的离散,并不是指:文本由一个词一个词组成,或是说当今最流行的文本生成框架,诸如Seq2Seq,也都是逐词(或者逐个Character)生成的。因为哪怕利用非循环网路进行一次成型的Sentences生成,也无法避免“数据离散”带来的后果,抱歉都怪我年轻时的无知,离散型数据的真正含义,我们要从连续性数据说起。 图像数据就是典型的连续性数据,故而GAN能够直接生成出逼真的画面来。我们首先来看看图像数据的形状:

图像数据在计算机中均被表示为矩阵,若是黑白图像矩阵中元素的值即为像素值或者灰度值(抱歉外行了,我不是做图像的),就算是彩色图像,图像张量即被多加了一阶用于表示RGB通道,图像矩阵中的元素是可微分的,其数值直接反映出图像本身的明暗,色彩等因素,很多这样的像素点组合在一起,就形成了图像,也就是说,从图像矩阵到图像,不需要“采样”(Sampling),有一个更形象的例子:画图软件中的调色板,如下图,你在调色板上随便滑动一下,大致感受一下图像数据可微分的特性。

文本数据可就不一样了,做文本的同学都知道,假设我们的词库(Vocabulary)大小为1000,那么每当我们预测下一个出现的词时,理应得到的是一个One-hot的Vector,这个Vector中有999项是0,只有一项是1,而这一项就代表词库中的某个词。然而,真正的隔阂在于,我们每次用无论什么分类器或者神经网络得到的直接结果,都是一个1000维的概率分布,而非正正好好是一个One-hot的Vector,即便是使用softmax作为输出,顶多也只能得到某一维上特别大,其余维上特别小的情况,而将这种输出结果过渡到One-hot vector 然后再从词库中查询出对应index的词,这样的操作被称为“Sampling”,通常,我们找出值最大的那一项设其为1,其余为0。

当前神经网络的优化方法大多数都是基于梯度的(Gradient based),很多文献这么说:GAN在面对离散型数据时,判别网络无法将梯度Back propagation(BP)给生成网络。这句话当时让我等听的云里雾里,不妨换一个角度理解,我们知道,基于梯度的优化方法大致意思是这样的,微调网络中的参数(weight),看看最终输出的结果有没有变得好一点,有没有达到最好的情形。

但是判别器D得到的是Sampling之后的结果,也就是说,我们经过参数微调之后,即便softmax的输出优化了一点点,比如上图的例子中,正确结果本应是第三项,其output的倒数第二项从0.85 变为了0.65  ,第三项从 0.12 变为了0.32  ,但是经过Sampling之后,生成器G输出的结果还是跟以前一模一样,并再次将相同的答案重复输入给判别器D,这样判别器D给出的评价就会毫无意义,生成器G的训练也会失去方向。

 

有人说,与其这样不如每次给判别器D直接吃Sampling之前的结果,也就是softamx输出的那个distribution,同样,这么做也有很大的问题。我们回到GAN的基本原理,判别器D的初衷,它经历训练就是为了准确辨别生成样本和真实样本的,那么生成样本是一个充满了float小数的分布,而真实样本是一个One-hot Vector,判别器D很容易“作弊”,它根本不用去判断生成分布是否与真实分布更加接近,它只需要识别出给到的分布是不是除了一项是 1,其余都是 0就可以了。所以无论Sampling之前的分布无论多么接近于真实的One-hot Vector,只要它依然是一个概率分布,都可以被判别器D轻易地检测出来。

 

上面所说的原因当然也有数学上的解释,还记得在2.1节的时候,请大家注意生成样本的loss衡量标准是什么吗?没错,就是JS散度, JS-Divergence在应用上其实是有弱点的(参考文献[10]),它只能被正常地应用于互有重叠(Overlap)的两个分布,当面对互不重叠的两个分布P和 Q,其JS散度:

大家再想想,除非softmax能output出与真实样本 exactly 相同的独热分布(One-hot Vector)(当然这是不可能的),还有什么能让生成样本的分布与真实样本的分布发生重叠呢?于是,生成器无论怎么做基于Gradient 的优化,输出分布与真实分布的  始终是 log2,生成器G的训练于是失去了意义。

3. 过渡方案:对于GAN的直接改进用于文本生成

为了解决GAN在面对离散数据时的困境,最直接的想法是对GAN内部的一些计算方式进行微调,这种对于GAN内部计算方式的直接改进也显示出了一定的效果,为后面将GAN直接、流畅地应用于文本等离散型数据的生成带来了希望。 接下来简单介绍相关的两篇工作[11~12]。

3.1. Wasserstein-divergence,额外的礼物

Wasserstein GAN[13](简称WGAN),其影响力似乎达到了原版GAN的高度,在国内也有一篇与其影响力相当的博文——“令人拍案叫绝的Wasserstein GAN”[10],不过在看这篇论文之前,还要推荐另外一篇论文“f-GAN”[14],这篇论文利用芬切尔共轭(Fenchel Conjugate)的性质证明了任何 f-Divergence都可以作为原先GAN中 KL-Divergence (或者说 JS-Divergence)的替代方案。 f-GAN 的定义如下:

不难看出, KL-Divergence也是  f-Divergence的一种,f-GAN 原文提供了数十种各式各样的  f-Divergence,为GAN接下来沿此方向上的改进带来了无限可能。

Wasserstein GAN 对GAN的改进也是从替换  KL-Divergence 这个角度对GAN进行改进,其详细的妙处大可参看文献[10,13],总的来说,WGAN采用了一种奇特的 Divergence—— “推土机-Divergence”,Wassertein-Divergence将两个分布看作两堆土,Divergence 计算的就是为了将两个土堆推成一样的形状所需要泥土搬运总距离。如下图:

使用 Wassertein-Divergence 训练的GAN相比原版的GAN有更加明显的“演化”过程,换句话说就是,WGAN的训练相比与GAN更加能突显从“不好”到“不错”的循序渐经的过程。从上面的2.2节,我们知道JS散度在面对两个分布不相重叠的情况时,将发生“异常”,计算结果均为 Log2 ,GAN的训练过程也是这样,也许在很长一段训练的过程中,JS散度的返回值都是Log2 ,只有到达某个临界点时,才会突然优化为接近最优值的结果,而Wasserstein散度的返回值则要平滑很多。

既然Wasserstein散度能够克服JS散度的上述弱点,那么使用Wasserstein GAN直接吸收生成器G softmax层output的Distribution Vector 与真实样本的 One-hot Vector,用判别器D 进行鉴定,即便判别器D不会傻到真的被“以假乱真”,但生成器output每次更加接近于真实样本的“进步”总算还是能被传回,这样就保证了对于离散数据的对抗训练能够继续下去。 不过Wasserstein GAN的原著放眼于对于GAN更加远大的改进意义,并没有着重给出关于文本生成等离散数据处理的实验,反倒是后来的一篇“Improved Training of Wasserstein GANs”[11]专门给出了文本生成的实验,从结果上可以看出,WGAN生成的文本虽然远不及当下最牛X的文本生成效果,但好歹能以character为单位生成出一些看上去稍微正常一点的结果了,对比之下,GAN关于文本生成的生成结果显然是崩塌的。

3.2. Gumbel-softmax,模拟Sampling的softmax

另外一篇来自华威大学+剑桥大学的工作把改进GAN用于离散数据生成的重心放在了修改softmax的output这方面。如2.2节所述,Sampling 操作中的 argmax(.)函数将连续的softmax输出抽取成离散的成型输出,从而导致Sampling的最终output是不可微的,形成GAN对于离散数据生成的最大拦路虎,既然不用Sampling的时候,output与真实分布不重叠,导致JS散度停留于固定值log2,如果用了Sampling的话,离散数据的正常输出又造成了梯度 Back-Propagation 上天然的隔阂。

既然如此,论文的作者寻找了一种可以高仿出Sampling效果的特殊softmax,使得softmax的直接输出既可以保证与真实分布的重叠,又能避免Sampling操作对于其可微特征的破坏。它就是“耿贝尔-softmax”(Gumbel-Softmax),Gumbel-Softmax早先已经被应用于离散标签的再分布化[15](Categorical Reparameterization),在原先的Sampling操作中, 函数将普通softmax的输出转化成One-hot Vector:

论文的实验仅仅尝试使用配合Gumbel-Softmax的GAN进行长度固定为12的 Context-free grammar 序列生成,可见GAN的训练并没有崩塌,在少数样例上也得到了还算逼真的效果。

所以,对于GAN进行直接改进用于文本生成,虽说是取得了一定的成效,但距离理想的状态仍然道阻且长,有没有更好的办法呢?当然!

 

4. RL在GAN文本生成中所扮演的作用

4.1. 关于Reinforcement Learning的闲聊闲扯

强化学习(Reinforcement Learning,RL)由于其前卫的学习方式,本不如监督学习那么方便被全自动化地实现,并且在很多现实应用中学习周期太长,一直没有成为万众瞩目的焦点,直到围棋狗的出现,才吸引了众多人的眼球。

既然是一个最优化的问题,很直接地便想到使用基于梯度(Gradient)的优化方法解决。当然,在强化学习中,我们要得到的是最优策略 ,此过程便在强化学习领域常听到的 Policy Gradient。我们把等式右边 中的项单独记为 ,它表示对话模型找到最优参数时所得到的奖励期望。在实做时,设某句话的应答有$N$种可能性,则每组对话 出现的概率可视为服从均匀分布,故还可以进行如下变形:

这样一来,梯度优化的重心就转化到了生成对话的概率上来,也就是说,通过对参数  进行更新,奖励会使模型趋于将优质对话的出现概率提高,而惩罚则会让模型趋于将劣质对话的出现概率降低。

自AlphaGo使得强化学习猛然进入大众视野以来,大部分对于强化学习的理论研究都将游戏作为主要实验平台,这一点不无道理,强化学习理论上的推导看似逻辑通顺,但其最大的弱点在于,基于人工评判的奖励 Reward的获得,让实验人员守在电脑前对模型吐出来的结果不停地打分看来是不现实的,游戏系统恰恰能会给出正确客观的打分(输/赢 或 游戏Score)。基于RL的对话生成同样会面对这个问题,研究人员采用了类似AlphaGo的实现方式(AI棋手对弈)——同时运行两个机器人,让它们自己互相对话,同时,使用预训练(pre-trained)好的“打分器”给出每组对话的奖励得分  ,关于这个预训练的“打分器” R ,可以根据实际的应用和需求自己DIY。 

稍微感受一下RL ChatBot的效果:

4.2. SeqGAN 和 Conditional SeqGAN

前面说了这么多,终于迎来到了高潮部分:RL + GAN for Text Generation,SeqGAN[17]站在前人RL Text Generation的肩膀上,可以说是GAN for Text Generation中的代表作。上面虽然花了大量篇幅讲述RL ChatBot的种种机理,其实都是为了它来做铺垫。试想我们使用GAN中的判别器D作为强化学习中奖励 Reward 的来源,假设需要生成长度为T的文本序列,则对于生成文本的奖励值 计算可以转化为如下形式:

直到生成器G生成的文本足以乱真的时候,就是更新训练新判别器的时候了。一般来说,判别器D对生成序列打出的得分既是其判断该序列为真实样本的概率值,按照原版GAN的理论,判别器D对于 real/fake 样本给出的鉴定结果均为 0.5 时,说明生成器G所生成的样本足以乱真,那么倘若在上面的任务中,判别器屡屡对生成样本打出接近甚至高出 0.5的得分时,即说明判别器D需要再训练了。在实做中为了方便,一般等待多轮生成器的训练后,进行一次判别器的训练。

SeqGAN的提出为GAN用于对话生成(Chatbot)完成了重要的铺垫,同样起到铺垫作用的还有另外一个GAN在图像生成领域的神奇应用——Conditional GAN[18~19],有条件的GAN,顾名思义就是根据一定的条件生成一定的东西,该工作根据输入的文字描述作为条件,生成对应的图像,比如:

对话生成可以理解为同样的模式,上一句对话作为条件,下一句应答则为要生成的数据,唯一的不同是需要生成离散的文本数据,而这个问题,SeqGAN已经帮忙解决了。综上,我自己给它起名:Conditional SeqGAN[20]。根据4.1节以及本节的推导,Conditional SeqGAN中的优化梯度可写成:

不难看出,此式子与4.1节中的变化梯度仅一字之差,只是把“打分器”给出的奖励得分  换成了鉴别器认为生成对话来自真人的概率得分 。看似差别很很小,实际上 RL + GAN 的文本生成技术与单纯基于RL的文本生成技术有着本质的区别:在原本的强化学习对话生成中,虽然采用了AI互相对话,并设定了 jugle 进行打分,但这个 jugle 是预训练好的,在对话模型的训练过程当中将不再发生变化;RL + GAN 的文本生成乃至对话模型则不同,鉴别器D与生成器G的训练更新将交替进行,此消彼长,故而给出奖励得分的鉴别器D在这里是动态的(dynamic)。

RL+ GAN 利用强化学习中的 Reward机制以及 Policy Gradient 等技术,巧妙地避开了GAN面对离散数据时梯度无法BP的难题,在使用强化学习的方法训练生成器G的间隙,又采用对抗学习的原版方法训练判别器D。 在Conditional SeqGAN对话模型的一些精选结果中,RL+ GAN 训练得到的生成器时常能返回一些类似真人的逼真回答(我真有那么一丝丝接近“恐怖谷”的感受)。

5. 一些细节 + 一些延伸

上文所述的,只是 RL + GAN 进行文本生成的基本原理,大家知道,GAN在实际运行过程中任然存在诸多不确定因素,为了尽可能优化 GAN 文本生成的效果,而后发掘更多GAN在NLP领域的潜力,还有一些值得一提的细节。

5.1. Reward Baseline:奖励值上的 Bias

5.2. REGS:一人犯错一人当

细心的读者可以发现,在SeqGAN的奖励优化梯度计算公式的推导中,由鉴别器D给予的生成样本奖励得分其实是顺应序列文本的生成过程,逐词产生的,可以看到之前的推导公式中显示了对于Partly文本序列的阶段性奖励值求和再求平均。然而在起初的实验中,根据最终推导的奖励值优化梯度计算公式,鉴别器D被训练为用于对整句生成结果进行评估打分,这样的话,鉴别器D的打分对于生成序列中的每一个token都是同等的存在,要奖励就一起奖励(奖励值可视为相同),要惩罚就一起惩罚,这种做法会导致一个后果,看下面的例子。

比如有这样一个对话组(包含真实回答和生成回答):

question = ['你', '叫', '什么', '名字', '?']

real_answer = ['我', '叫', '张三', '。']

fake_answer = ['我', '不', '知道', '。']

很显然,鉴别器D能够轻易辨识后者回答是假的,必然会给出极低的奖励值得分,但是仔细对比真/假两个回答可以发现,第一个词 “我 ” 其实和真实样本的第一个词是一样的,而最后一个字符 “。”其实也并无大碍,它们其实并没有错,真正错误的是 “不 ” 和 “知道 ” 这两个词,但很不幸,鉴别器判定 fake_answer 的整体回答是假的,原本无辜的词项 “我 ” 和 “。” 也要跟着一起接受低分判定的惩罚。

5.3. MC Search & Discriminator for Partially Decoded Sequences:准度与速度的抉择

5.4. Teacher Forcing:给Generator一个榜样

在开始讲解SeqGAN中的Teacher Forcing之前,先帮助大家简单了结一下RNN运行的两种mode:(1). Free-running mode;(2). Teacher-Forcing mode[22]。前者就是正常的RNN运行方式:上一个state的输出就做为下一个state的输入,这样做时有风险的,因为在RNN训练的早期,靠前的state中如果出现了极差的结果,那么后面的全部state都会受牵连,以至于最终结果非常不好也很难溯源到发生错误的源头,而后者Teacher-Forcing mode的做法就是,每次不使用上一个state的输出作为下一个state的输入,而是直接使用ground truth的对应上一项作为下一个state的输入。

就拿Seq2Seq模型来举例,我们假设正输出到第三项,准备生成第四项:

input = ['a', 'b', 'c', 'e', 'f', 'g', 'h']

output = ['o', 'p', 's', ...]

label = ['o', 'p', 'q', 'r', 's', 't', 'u']

Free-running mode下的decoder会将第三项错误的输出 output[2] = 's'(下标从0开始)作为下一个state的输入,而在Teacher-forcing mode下,decoder则会将正确样本的第三项 label[2] = 'q' 作为下一个state的输入。 当然这么做也有它的缺点,因为依赖标签数据,在training的时候会有较好的效果,但是在testing的时候就不能得到ground truth的支持了。最好的结果是将Free-running mode的behavior训练得尽可能接近于Teacher-forcing mode,Professor Forcing[23]使用GAN尝试实现了这一目标。

当然,这些都是题外话,我们要回到Teacher-Forcing mode最初的motivation:训练(迭代)早期的RNN非常弱,几乎不能给出好的生成结果(以至于破灌破摔,产生垃圾的output影响后面的state),必须依靠ground truth强行扶着走,才能慢慢进入正轨。

SeqGAN也存在这样的问题,一开始的生成器G非常弱,即便是经过一定量的预训练,也几乎生成不出好的Result,然后这些bad result给到鉴别器D必然只能返回很低的 Reward (惩罚),生成器G的训练只能根据鉴别器的打分来优化而无法得到good example的指导,永远不知道什么是好的结果,结果必然是恶性循环。于是,有必要在SeqGAN训练中给到生成器G真实样本的指导,也就是告诉生成器:“什么样的样本才配得到高分 Reward ?”

5.5. Actor-Critic:更广义上的GAN?

在DeepMind的一篇半综述式的文章[24]中,谈到了强化学习中的另一个特殊的模型——Actor-Critic,并分析了这个模型与GAN之间的联系。

首先我们回顾一下GAN中鉴别器D和生成器G优化时的目标函数:

再说说强化学习,在基于策略迭代的强化学习中,通过尝试当前策略的action,从环境获得 Reward然后更新策略。这种操作在游戏实验环境中非常有效,因为游戏系统有封闭且清晰的环境,能够稳定地根据各种接收到的action客观地给出对应 Reward ,而在现实生活中,很多时候并没有封闭清晰的环境,给定action应该得到什么样的 Reward  本身也不准确,只能通过设定DIY的打分器来实现,显然这么做很难完美model真实世界千变万化的情况。

文中将GANs模型比作一种特殊形式的Actor-Critic,并比较了两者各自的特点以及后续的改进技术在两者上的适配情况。试想一下,既然强化学习技术帮助GAN解决了在离散型数据上的梯度传播问题,那么同为强化学习的Actor-Critic也为对抗式文本生成提供了另外一种可能。

5.6. IRGAN:两个检索模型的对抗

IRGAN[25]这篇工作发表于2017年的SIGIR,从作者的阵容来看就注定不是一篇平凡的作品,其中就包含SeqGAN的原班人马,作者将生成对抗网络的思想应用于信息检索领域,却又不拘泥于传统GAN的经典Framework,而是利用了IR领域原本就存在的两种不同路数的model:生成式IR模型 和 判别式IR模型。

生成式IR模型目标是产生一个query -> document的关联度分布,利用这个分布对每个输入的query返回相关的检索结果;而判别式IR模型看上去更像是一个二类分类器,它的目标是尽可能地区分有关联查询对<query_r, document_r>和无关联查询对<query_f, document_f>,对于给定的查询对<query, document>,判别式IR模型给出该查询对中的两项的关联程度。

IRGAN的一大特点是,对抗model中的两个组件各自都是一种IR模型,所以经过对抗训练之后,不管拿出来哪个,都有希望突破原先的瓶颈。作者还关于IRGAN的训练目标是否符合纳什均衡做了一些讨论,尽管在真实检索的应用中很难获得所谓的真实关联分布,但作者认为不管是观察到的关联样本还是未观察到的关联样本,判别IR模型的输出总是和生成IR模型的对应输出存在着正相关的作用力,于是也孕育而生了文中那个关于浮力和拖拽重物最终达到漂浮平衡状态的略显晦涩的比喻。

结语

这一领域的发展之迅速,也许在我完成这篇Blog的时候,又有一批工作争先恐后的冒出来了,但最终的结局肯定不止于此,我也不怎么擅长结尾,也许要等待GAN来为我,为我们带来一个奇妙的结局。

 

Acknowledgement

要特别感谢台湾大学李宏毅老师生动的授课[26],这为我在多个知识点上的理解带来了重要的帮助。

 

Reference

[1] 何永灿CSDN. 好玩的文本生成[EB/OL]. http://geek.csdn.net/news/detail/131622.

[2] Ashwin, K, Vijayakumar, Michael, Cogswell, Ramprasath, R, Selvaraju, Qing, Sun, Stefan, Lee, David, Crandall, Dhruv, Batra. Diverse Beam Search: Decoding Diverse Solutions from Neural Sequence Models[J/OL]. https://arxiv.org/abs/1610.02424v1.

[3] Minh-Thang, Luong, Hieu, Pham, Christopher, D, Manning. Effective Approaches to At-tention-based Neural Machine Translation[J/OL]. https://arxiv.org/abs/1508.04025.

[4] W. Chan, N. Jaitly, Q. Le and O. Vinyals, “Listen, attend and spell: A neural network for large vocabulary conversational speech recognition,” ICASSP, 2016, https://research.google.com/pubs/pub44926.html.

[5] Jiwei, Li, Minh-Thang, Luong, Dan, Jurafsky. A Hierarchical Neural Autoencoder for Par-agraphs and Documents[J/OL]. https://arxiv.org/abs/1506.01057.

[6] 郑华滨. 从PM到GAN——LSTM之父Schmidhuber横跨22年的怨念[EB/OL]. https://zhuanlan.zhihu.com/p/27159510?utm_source=zhihu&utm_medium=social.

[7] Jürgen, Schmidhuber. Learning Factorial Codes by Predictability Minimization[J]. Neural Computation, 1992, 4(6): 863-879, http://www.mitpressjournals.org/doi/abs/10.1162/neco.1992.4.6.863.

[8] Ian, J, Goodfellow, Jean, Pouget-Abadie, Mehdi, Mirza, Bing, Xu, David, Warde-Farley, Sherjil, Ozair, Aaron, Courville, Yoshua, Bengio. Generative Adversarial Networks[J/OL]. https://arxiv.org/abs/1406.2661v1.

[9] Samuel, R, Bowman, Luke, Vilnis, Oriol, Vinyals, Andrew, M, Dai, Rafal, Jozefowicz, Samy, Bengio. Generating Sentences from a Continuous Space[J/OL]. https://arxiv.org/abs/1511.06349.

[10] 郑华滨. 令人拍案叫绝的Wasserstein GAN[EB/OL]. https://zhuanlan.zhihu.com/p/25071913.

[11] Ishaan, Gulrajani, Faruk, Ahmed, Martin, Arjovsky, Vincent, Dumoulin, Aaron, Courville. Improved Training of Wasserstein GANs[J/OL]. https://arxiv.org/abs/1704.00028.

[12] Matt, J, Kusner, José, Miguel, Hernández-Lobato. GANS for Sequences of Discrete Ele-ments with the Gumbel-softmax Distribution[J/OL]. https://arxiv.org/abs/1611.04051.

[13] Martin, Arjovsky, Soumith, Chintala, Léon, Bottou. Wasserstein GAN[J/OL]. https://arxiv.org/abs/1701.07875v1.

[14] Sebastian, Nowozin, Botond, Cseke, Ryota, Tomioka. f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization[J/OL]. https://arxiv.org/abs/1606.00709.

[15] Eric, Jang, Shixiang, Gu, Ben, Poole. Categorical Reparameterization with Gum-bel-Softmax[J/OL]. https://arxiv.org/abs/1611.01144.

[16] Jiwei, Li, Will, Monroe, Alan, Ritter, Michel, Galley, Jianfeng, Gao, Dan, Jurafsky. Deep Reinforcement Learning for Dialogue Generation[J/OL]. https://arxiv.org/abs/1606.01541v3.

[17] Lantao, Yu, Weinan, Zhang, Jun, Wang, Yong, Yu. SeqGAN: Sequence Generative Adver-sarial Nets with Policy Gradient[J/OL]. https://arxiv.org/abs/1609.05473.

[18] Mehdi, Mirza, Simon, Osindero. Conditional Generative Adversarial Nets[J/OL]. https://arxiv.org/abs/1411.1784.

[19] Scott, Reed, Zeynep, Akata, Xinchen, Yan, Lajanugen, Logeswaran, Bernt, Schiele, Honglak, Lee. Generative Adversarial Text to Image Synthesis[J/OL]. https://arxiv.org/abs/1605.05396.

[20] Jiwei, Li, Will, Monroe, Tianlin, Shi, Sébastien, Jean, Alan, Ritter, Dan, Jurafsky. Adver-sarial Learning for Neural Dialogue Generation[J/OL]. https://arxiv.org/abs/1701.06547.

[21] Silver, D.; Huang, A.; Maddison, C. J.;Guez, A.; Sifre, L.; et al. 2016. Mastering the game

of go with deep neural networks and tree search. Nature 529(7587):484–489, http://www.nature.com/nature/journal/v529/n7587/abs/nature16961.html.

[22] Williams, R. J. and Zipser, D. (1989). A learning algorithm for continually running fully recurrent neural networks. Neural computation, 1(2), 270–280, http://www.mitpressjournals.org/doi/abs/10.1162/neco.1989.1.2.270.

[23] Alex, Lamb, Anirudh, Goyal, Ying, Zhang, Saizheng, Zhang, Aaron, Courville, Yoshua, Bengio. Professor Forcing: A New Algorithm for Training Recurrent Networks[J/OL]. https://arxiv.org/abs/1610.09038v1.

[24] David, Pfau, Oriol, Vinyals. Connecting Generative Adversarial Networks and Ac-tor-Critic Methods[J/OL]. https://arxiv.org/abs/1610.01945.

[25] Jun, Wang, Lantao, Yu, Weinan, Zhang, Yu, Gong, Yinghui, Xu, Benyou, Wang, Peng, Zhang, Dell, Zhang. IRGAN: A Minimax Game for Unifying Generative and Discriminative Information Retrieval Models[J/OL]. https://arxiv.org/abs/1705.10513v1.

[26] Hungyi, Lee. Machine Learning and having it Deep and Structured[EB/OL]. http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html.

这篇关于###好好好####RL-GAN For NLP: 强化学习在生成对抗网络文本生成中扮演的角色的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/159698

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];