强化学习在生成对抗网络文本生成中扮演的角色
作者:胡杨
来源:知乎专栏GAN+文本生成+读博干货
5. 一些细节 + 一些延伸
上文所述的,只是 RL + GAN 进行文本生成的基本原理,大家知道,GAN 在实际运行过程中任然存在诸多不确定因素,为了尽可能优化 GAN 文本生成的效果,而后发掘更多 GAN 在 NLP 领域的潜力,还有一些值得一提的细节。
5.1. Reward Baseline:奖励值上的 Bias
在 4.2 节中提到,我们采用鉴别器 D 给予生成样本的概率得分(属于真实样本的概率)作为奖励 Reward,既然是概率值,应该意识到这些概率得分都是非负的,如此一来即便生成出再差的结果,鉴别器 D 也不会给出负 Reward 进行惩罚。从理论上来讲,生成器的训练会趋向于降低较小奖励值样本 出现的概率而提高较大奖励值样本 出现的概率,然而在实做时,由于采样不全等不可控因素的存在,这样不够分明的奖惩区别将有可能使得生成器 G 的训练变得偏颇。
实际上,在强化学习的对话生成模型当中,就已经出现了此类问题。解决的方法很简单,我们设置一个奖励值 Reward 的基准值 Baseline,每次计算奖励值的时候,在后面减去这个基准值作为最终的 奖励 or 惩罚 值,使得生成器 G 的生成结果每次得到的奖惩有正有负,显得更加分明。记奖惩基准值为 b,则 4.1 节中优化梯度的计算公式修改为:
对应地,在 RL + GAN 的文本生成任务中,同样在鉴别器 D 对各个生成样本打出的概率得分上减去奖惩基准值 b,则 4.2 节中 SeqGAN 与 Conditional SeqGAN 期望奖励值的优化梯度计算公式也分别修改为如下:
5.2. REGS:一人犯错一人当
细心的读者可以发现,在 SeqGAN 的奖励优化梯度计算公式的推导中,由鉴别器 D 给予的生成样本奖励得分其实是顺应序列文本的生成过程,逐词产生的,可以看到之前的推导公式中显示了对于 Partly 文本序列的阶段性奖励值求和再求平均。然而在起初的实验中,根据最终推导的奖励值优化梯度计算公式,鉴别器 D 被训练为用于对整句生成结果进行评估打分,这样的话,鉴别器 D 的打分对于生成序列中的每一个 token 都是同等的存在,要奖励就一起奖励(奖励值可视为相同),要惩罚就一起惩罚,这种做法会导致一个后果,看下面的例子。
比如有这样一个对话组(包含真实回答和生成回答):
question = ['你', '叫', '什么', '名字', '?']
real_answer = ['我', '叫', '张三', '。']
fake_answer = ['我', '不', '知道', '。']
很显然,鉴别器 D 能够轻易辨识后者回答是假的,必然会给出极低的奖励值得分,但是仔细对比真 / 假两个回答可以发现,第一个词 “我” 其实和真实样本的第一个词是一样的,而最后一个字符 “。” 其实也并无大碍,它们其实并没有错,真正错误的是 “不 ” 和 “知道 ” 这两个词,但很不幸,鉴别器判定 fake_answer 的整体回答是假的,原本无辜的词项 “我 ” 和 “。” 也要跟着一起接受低分判定的惩罚。
让我们回到 GAN + RL 对文本生成模型的优化原理,假设 是面对输入上文 时生成对话下文 的概率,我们将它拆分成逐个单词拼接的形式,每一个出现的词汇都将收到之前 context 的影响。
在 4.1,4.2 节中提到,如果生成样本 被鉴别器 D 打出低分(受到惩罚),生成器 G 将被训练于降低产出此结果的概率。结合上面这条公式,倘若单独将生成序列中的一部分前缀 拿出来与真实样本中完全相同,岂不是也要接受整体低分而带来的惩罚?
解决这一缺陷的直接方法就是把奖惩的判定粒度进一步细化到 word 或 character 级别,在文本逐词生成的过程中对 partly 的生成结果进行打分。这种处理其实在 SeqGAN 的论文中 [17] 就已经实施了,拓展到 Conditional SeqGAN 中,优化梯度的计算公式应改写为如下:
公式中, 是计算的关键,它代表鉴别器 D 在文本逐词生成过程中获得部分文本的情况下对于最终 reward 的估计,简而言之就是每得到一个新的生成词,就结合此前生成的前序文本估计最终 reward,并作为该生成词单独的 reward,SeqGAN 的论文中使用蒙特卡洛搜索 [21](Monte Carlo Search,MC search)的方法计算部分生成序列对于整体 reward 的估计值。而在 Conditional SeqGAN 的论文中,赋予了这种处理一个名字 —— Reward for Every Generation Step(REGS)。
5.3. MC Search & Discriminator for Partially Decoded Sequences:准度与速度的抉择
上一节说到 SeqGAN 中使用 MC search 进行部分序列奖励估计值 的计算,作为 REGS 操作的关键计算,其难处在于,我们并不能预知部分生成序列能给我们带来的最终结果,就好像一场篮球比赛,可能半场结束比分领先,却也不能妄言最终的比赛结果一样。
既然如此,在只得到部分序列的情况下, 只得估计获得,Monte Carlo Search[21] 就是其中一种估计方法,Monte Carlo Search 的思想极其简单,假设我们已经拥有了部分生成的前缀 ,我们使用当前的 Generator,强制固定这个前缀,并重复生成出 $M$ 个完整的序列(有点采样实验的意思),分别交给鉴别器 D 进行打分,这 M 个模拟样本的平均奖励得分即为部分序列 的奖励估计值 。
当然,使用 MC search 的缺点也很明显:每生成一个词,就要进行 M 次生成采样,非常耗时;还有一小点,每当我们计算较为后期的一些部分序列奖励估计值的时候,总是会无法避免地再一次计算前面早期生成的项,这样计算出来的 可能导致对于较前子序列(比如第一个词)的过拟合。
另外一种方法提出于 Conditional SeqGAN 的论文,干脆训练一个可以对部分已生成前缀进行打分的 new 鉴别器 D。将某真实样本的 的全部前缀子序列(必须从第一个词开始)集合记作 ,同样将某生成样本 $X^-$ 的全部前缀子序列集合记作 ,我们每次从这两者中随机挑选一个或若干个标定为 + 或 - (与原序列相同),与原序列一同加入鉴别器 D 的训练中,这样训练得到的 Discriminator 便增添了给前缀子序列打分的能力,直接使用这样的 Discriminator 给前缀子序列打分即可获得。这种方法的耗时比起使用 MC search 要少很多,但得损失一定的准度。
一句话总结两种 的计算方法:一种是利用部分序列 YY 出完整序列来给鉴别器打分,而另一种则直接将部分序列加入鉴别器的训练过程,得到可以为部分序列打分的鉴别器,一个较慢,另一个快却损失准度,如何选择就看大家了。
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 ?”
4.2 节中提到,生成器 G 和 判别器 D 的训练时交替进行的,由于鉴别器返回的打分是判定输入样本为真的概率,我们可以随机取出一部分真实的样本对话组
,然后直接设置他们的鉴别器奖励值为 1 (或者其他任意定义的最高分),将它们加入生成器 G 的训练过程中,这样生成器就能知道何种样本能得到最高的奖励,从而一定程度上避免了 SeqGAN 的训练过程由于一方的弱势而发生崩塌。
或者也可以这样:用训练好的鉴别器 D 也为随机抽样的真实样本打分,然后加入到生成器 G 的训练过程中,不过,一定要确保鉴别器 D 已经得到充分训练,至少给予任意真实样本 的打分要高于 baseline 才行(奖励值经过偏置处理后也必须为正)。
5.5. Actor-Critic:更广义上的 GAN?
在 DeepMind 的一篇半综述式的文章 [24] 中,谈到了强化学习中的另一个特殊的模型——Actor-Critic,并分析了这个模型与 GAN 之间的联系。
首先我们回顾一下 GAN 中鉴别器 D 和生成器 G 优化时的目标函数:
再说说强化学习,在基于策略迭代的强化学习中,通过尝试当前策略的 action,从环境获得 Reward,然后更新策略。这种操作在游戏实验环境中非常有效,因为游戏系统有封闭且清晰的环境,能够稳定地根据各种接收到的 action 客观地给出对应 Reward ,而在现实生活中,很多时候并没有封闭清晰的环境,给定 action 应该得到什么样的 Reward 本身也不准确,只能通过设定 DIY 的打分器来实现,显然这么做很难完美 model 真实世界千变万化的情况。
那么,能不能先学习出一个能够准确评估出奖励值的值函数 ,尽可能地描述环境,对各种 action 返回较为公正的预期奖励呢?也就是说 Reward 的估计模型本身也是被学习的,这就是 Actor-Critic,Actor 部分采用传统的 Policy Gradient 优化策略 π ,Critic 部分借助 “Q-Learning” 学习出最优的 action-value 值函数,听起来有没有点像 GAN 的模式?来看看它的目标函数,其中 指任意一中 Divergence,值域非负当且仅当两个分布相同时取值为零即可(比如,KL-divergence, JS-divergence 等等):
文中将 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 模型看上去更像是一个二类分类器,它的目标是尽可能地区分有关联查询对
光从两个模型简单的介绍来看就能丝丝感觉到它们之间特殊的联系,两种风格迥异的 IR 模型在 GAN 的思想中 “有缘地” 走到了对立面,我们将生成式 IR 模型记作: ,将判别式 IR 模型记作: ,于是整个 IRGAN 的目标函数为:
在 IRGAN 中,鉴别器 D 定义为判别式 IR 模型的逻辑回归:
于是鉴别器 D 的目标函数进一步写为:
相对地,生成器 G 就直接输出以 query 为 condition 答案池中所有 document 与该 query 的关联分布,不幸地,我们必须将通过这个关联分布,过滤出当前认为最相关的 document 答案,才能作为鉴别器 D 的输入来判定此时此刻检索结果的质量,原本连续型的分布经过这一步的折腾又变成离散型的数据了,还好, 我们有强化学习,设 ,则生成器 G 的目标函数被写成:
也就是最大化鉴别器 D 给出的奖励,而这个奖励值主要来源于检索结果形成的查询对 在判别式 IR 模型中被认为确实有关联的概率之和。将求和符号内的项记作: ,按照 Policy Gradient 的方式进行梯度优化,并使用 4.1 节中的推导方法描述 的优化梯度,在实做时为了方便,采样 k 个当前生成式 IR 模型给出的查询结果求近似。
当然,也不能忘了我们的 baseline—— b ,文中设置 baseline 为当前查询结果的平均期望 Reward 。
上述是针对 Pointwise 情形的 IR 任务,不同于 Pointwise 情形着重于得到直接的检索结果,Pairwise 情形的 IR 把更多精力放在了 ranking 上,其返回结果 中全是非对称二元对,其中 比 与当前的查询项关联性更高。IRGAN 也可以扩展到 Pairwise 的情形,原则是:“一切从减”。 鉴别器函数将改写为:
而假设生成器 G 是一个 softmax 函数,则 Pairwise 情形下的变形和简化推导如下:
IRGAN 在 Pairwise 情形下的总目标函数如下,其中, o 表示真实的非对称二元组,而 o' 则表示生成式 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.
☞ 【最详尽的GAN介绍】王飞跃等:生成式对抗网络 GAN 的研究进展与展望
☞ 【智能自动化学科前沿讲习班第1期】王飞跃教授:生成式对抗网络GAN的研究进展与展望
☞ 【智能自动化学科前沿讲习班第1期】王坤峰副研究员:GAN与平行视觉
☞ 【重磅】平行将成为一种常态:从SimGAN获得CVPR 2017最佳论文奖说起
☞ 【干货】强化学习在生成对抗网络文本生成中扮演的角色(上)
☞ 【胶囊理论】深度学习教父Geoffrey Hinton的“胶囊理论”终于发出论文,能开启AI的新时代吗?
☞ 【少量像素攻击】修改一个像素,就能让神经网络识别图像出错