SeqGAN这篇paper从大半年之前就开始看,断断续续看到现在,接下来的工作或许会与GAN + RL有关,因此又把它翻出来,又一次仔细拜读了一番。接下来就记录下我的一点理解。

paper链接

1. 背景

GAN在之前发的文章里已经说过了,不了解的同学点我,虽然现在GAN的变种越来越多,用途广泛,但是它们的对抗思想都是没有变化的。简单来说,就是在生成的过程中加入一个可以鉴别真实数据和生成数据的鉴别器,使生成器G和鉴别器D相互对抗,D的作用是努力地分辨真实数据和生成数据,G的作用是努力改进自己从而生成可以迷惑D的数据。当D无法再分别出真假数据,则认为此时的G已经达到了一个很优的效果。 
它的诸多优点是它如今可以这么火爆的原因: 
- 可以生成更好的样本 
- 模型只用到了反向传播,而不需要马尔科夫链 
- 训练时不需要对隐变量做推断 
- G的参数更新不是直接来自数据样本,而是使用来自D的反向传播 
- 理论上,只要是可微分函数都可以用于构建D和G,因为能够与深度神经网络结合做深度生成式模型

它的最后一条优点也恰恰就是它的局限,之前我发过的文章中也有涉及到,点点点点点我,在NLP中,数据不像图片处理时是连续的,可以微分,我们在优化生成器的过程中不能找到“中国 + 0.1”这样的东西代表什么,因此对于离散的数据,普通的GAN是无法work的。

2. 大体思路

这位还在读本科的作者想到了使用RL来解决这个问题。

如上图(左)所示,仍然是对抗的思想,真实数据加上G的生成数据来训练D。但是从前边背景章节所述的内容中,我们可以知道G的离散输出,让D很难回传一个梯度用来更新G,因此需要做一些改变,看上图(右),paper中将policy network当做G,已经存在的红色圆点称为现在的状态(state),要生成的下一个红色圆点称作动作(action),因为D需要对一个完整的序列评分,所以就是用MCTS(蒙特卡洛树搜索)将每一个动作的各种可能性补全,D对这些完整的序列产生reward,回传给G,通过增强学习更新G。这样就是用Reinforcement learning的方式,训练出一个可以产生下一个最优的action的生成网络。

3. 主要内容

不论怎么对抗,目的都是为了更好的生成,因此我们可以把生成作为切入点。生成器G的目标是生成sequence来最大化reward的期望。

在这里把这个reward的期望叫做J(θ)。就是在s0和θ的条件下,产生某个完全的sequence的reward的期望。其中Gθ()部分可以轻易地看出就是Generator Model。而QDφGθ()(我在这里叫它Q值)在文中被叫做一个sequence的action-value function 。因此,我们可以这样理解这个式子:G生成某一个y1的概率乘以这个y1的Q值,这样求出所有y1的概率乘Q值,再求和,则得到了这个J(θ),也就是我们生成模型想要最大化的函数。

所以问题来了,这个Q值怎么求? 
paper中使用的是REINFORCE algorithm 并且就把这个Q值看作是鉴别器D的返回值。

因为不完整的轨迹产生的reward没有实际意义,因此在原有y_1到y_t-1的情况下,产生的y_t的Q值并不能在y_t产生后直接计算,除非y_t就是整个序列的最后一个。paper中想了一个办法,使用蒙特卡洛搜索(就我所知“蒙特卡洛”这四个字可以等同于“随意”)将y_t后的内容进行补全。既然是随意补全就说明会产生多种情况,paper中将同一个y_t后使用蒙特卡洛搜索补全的所有可能的sequence全都计算reward,然后求平均。如下图所示。

就这样,我们生成了一些逼真的sequence。我们就要用如下方式训练D。

这个式子很容易理解,最大化D判断真实数据为真加上D判断生成数据为假,也就是最小化它们的相反数。

D训练了一轮或者多轮(因为GAN的训练一直是个难题,找好G和D的训练轮数比例是关键)之后,就得到了一个更优秀的D,此时要用D去更新G。G的更新可以看做是梯度下降。

其中,

αh代表学习率。

以上就是大概的seqGAN的原理。

4. 算法

首先随机初始化G网络和D网络参数。

通过MLE预训练G网络,目的是提高G网络的搜索效率。

使用预训练的G生成一些数据,用来通过最小化交叉熵来预训练D。

  1. 开始生成sequence,并使用方程(4)计算reward(这个reward来自于G生成的sequence与D产生的Q值)。

  2. 使用方程(8)更新G的参数。

  3. 更优的G生成更好的sequence,和真实数据一起通过方程(5)训练D。

以上1,2,3循环训练直到收敛。

5. 实验

论文的实验部分就不是本文的重点了,有兴趣的话看一下paper就可以了。

后边说的比较敷衍了,那…就这样吧。

原文地址: http://blog.csdn.net/yinruiyang94/article/details/77675586

SeqGAN——对抗思想与增强学习的碰撞相关推荐

  1. 对抗思想与强化学习的碰撞-SeqGAN模型原理和代码解析

    GAN作为生成模型的一种新型训练方法,通过discriminative model来指导generative model的训练,并在真实数据中取得了很好的效果.尽管如此,当目标是一个待生成的非连续性序 ...

  2. 深度增强学习前沿算法思想

    作者: Flood Sung,CSDN博主,人工智能方向研究生,专注于深度学习,增强学习与机器人的研究.  责编:何永灿,欢迎人工智能领域技术投稿.约稿.给文章纠错,请发送邮件至heyc@csdn.n ...

  3. 深度学习:AI对抗学习比深度、增强学习能好多少

    人工智能中,或许对抗学习是继深度学习.增强学习之后下一个热点,但是,它只对中等难度的任务具有实用性,依然不能解开"迁移学习"(实际中不可行)所追求的那种像人一样跨越多个领域,具备所 ...

  4. 冯·诺伊曼奖得主Jorge Nocedal:增强学习中零阶优化方法及其应用(附演讲视频和PPT)

    2020 北京智源大会 本文属于2020北京智源大会嘉宾演讲的整理报道系列.北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性.权威性.专业性和前瞻性的" ...

  5. 2020年5月总结(网络拥塞控制和增强学习初瞰)

    起 在之前4月的时候,一天看到了清华深圳研究生院夏树涛老师的招生通告,于是就向其发了封简历,结果到了4.30号的时候,我惊讶的发现竟然收到了回复.老师给了一个project,要先做完project然后 ...

  6. 专访微软邓力:语音识别与非监督深度学习、增强学习、词嵌入、类脑智能

    在俞栋接受CSDN专访解读基于深度学习的语音识别技术及CNTK开源软件的同时,<解析深度学习-语音识别实践>一书的另一位作者.微软人工智能首席科学家邓力也接受CSDN专访,以另外的视角诠释 ...

  7. 深度增强学习(DRL)漫谈 - 信赖域(Trust Region)系方法

    一.背景 深度学习的兴起让增强学习这个古老的机器学习分支迎来一轮复兴.它们的结合领域-深度增强学习(Deep reinforcement learning, DRL)随着在一系列极具挑战的控制实验场景 ...

  8. 零和博弈下的逆增强学习

     这篇文章是个人用来水观点的,用不严谨的语言讨论两件事情,由于严格证明太长,数学都采用 hand-waving 方式的证明,大家意会思路便可,要讨论如下两件事情: 文本的生成对抗模型,下面简称文本 ...

  9. 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)

    1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...

最新文章

  1. jquery之hide()用法详解
  2. mongoDB 文档操作_改
  3. 博客重构 / Blog Refactoring
  4. python画曲线-Python绘制各种简单优美曲线
  5. 视觉检索:视频多帧排序
  6. 记录各种体育活动(持续更新到不更新为止)
  7. KindEditor解决上传视频不能在手机端显示的问题
  8. 909计算机基础大纲,《计算机应用基础》(专科)考试大纲
  9. [转]HDFS用户指南(中文版)
  10. OpenLayers相关资料
  11. 无法在Web服务器上启动调试。您不具备调试此应用程序的权限,此项目的URL位于Internet区域。...
  12. CF1151FSonya and Informatics
  13. 不干胶设计用什么软件制作_用什么软件制作抖音短视频会比较好?
  14. 如何学习操作系统这门课程?
  15. android手机内存其他文件夹里,别再胡乱清理手机内存了,1秒清空这些文件夹,手机瞬间腾出50G...
  16. BetterScroll 2.0网络数据过慢,不能滚动问题
  17. win10 应用商店无法联网(0x80072EFD)
  18. Could not clean server of obsolete
  19. TruckSim Quick Start Guide(TruckSim快速入门)
  20. 38年来,NBA最有价值球员|数据分析

热门文章

  1. 利用Web Services实现软件自动升级
  2. Matlab:精度控制
  3. Python进阶_wxpy学习:消息处理
  4. CPU所含有的寄存器
  5. linux库函数mmap()原理及用法详解
  6. [云炬创业基础笔记]商业模式在现代创业中的重要性
  7. MATLAB2017 on winserver2012 第48周运行日志
  8. 给C#开发者的代码审查清单
  9. Syslinux引导文件名与菜单解释
  10. C++成员函数指针的另类调用方法