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。

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

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

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

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

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

---------------------

原文:https://blog.csdn.net/yinruiyang94/article/details/77675586

另一篇不错的文章:https://blog.csdn.net/Mr_tyting/article/details/80269143

SeqGAN 原理简述的更多相关文章

  1. TCP/IP协议工作原理简述

    TCP/IP协议工作原理简述 // */ // ]]>   TCP/IP协议工作原理简述 Table of Contents 1 概要 2 应用层 3 传输层 4 网络层 5 链路层 1 概要 ...

  2. ButterKnife的原理简述

    ButterKnife的原理简述 注解处理器Java5 中叫APT(Annotation Processing Tool),在Java6开始,规范化为 Pluggable Annotation Pro ...

  3. Excel阅读模式/聚光灯开发技术序列作品之三 高级自定义任务窗格开发原理简述—— 隐鹤

    Excel阅读模式/聚光灯开发技术序列作品之三 高级自定义任务窗格开发原理简述——    隐鹤 1. 引言 Excel任务窗格是一个可以用来存放各种常用命令的侧边窗口(准确的说是一个可以停靠在类名为x ...

  4. Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述—— 隐鹤 / HelloWorld

    Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述———— 隐鹤  /  HelloWorld 1. 引言 自本人第一篇博文“Excel阅读模式/单元格行列指示/聚光灯开发技术要 ...

  5. FileCloud 的原理简述&自己搭建文件云

    FileCloud 的原理简述&自己搭建文件云 copyright(c) by zcy 关于如何使用IIS创建asp服务,请读者自行研究 注:不要忘记添加入站规则 代码的存储: 根目录 fil ...

  6. 网络知识杂谈 - https - 原理简述

    概述 简单描述 https 尽量介绍它的原理 实际的机制, 可能会更加复杂一些... 背景 这玩意, 困扰我好多年了 今天开始, 想做个了断 之前工作也接触过, 但从我的角度来说, 认识很浅 会配置 ...

  7. UPS不间断电源工作原理简述

    原文地址:https://blog.csdn.net/uamix/article/details/52776297 一.定义 UPS即不间断电源,是将蓄电池(多为铅酸免维护蓄电池)与主机相连接,通过主 ...

  8. frame shiro 认证示例及原理简述

    shiro 认证流程 1.创建一个 javaSE 的maven项目(quickstart),并添加依赖 <dependency> <groupId>junit</grou ...

  9. linux文件系统实现原理简述【转】

    本文转载自:https://blog.csdn.net/eleven_xiy/article/details/71249365 [摘要] [背景] [正文] [总结]   注意:请使用谷歌浏览器阅读( ...

随机推荐

  1. Android Developers:按钮

    按钮是有文本或者图标(或者文本和图标)组成,它传达用户触摸它的时候所发生的动作. 你可以在你的布局中使用三种方式创建按钮,取决于你是否想创建文本按钮,突变按钮或者两者都有: 设置文本,使用Button ...

  2. 微信小程序 - tab选项卡(组件)

    更新日期: 2019/3/5:首次发布,默认下标“curIndex”超出红色提示 2019/3/7:增加tabName,可自定义数据标题名称(详情看示例) 支持单个/多个tab(显示/隐藏) 参数: ...

  3. Spark的运行模式(2)--Yarn-Cluster和Yarn-Client

    3. Yarn-Cluster Yarn是一种统一资源管理机制,可以在上面运行多种计算框架.Spark on Yarn模式分为两种:Yarn-Cluster和Yarn-Client,前者Driver运 ...

  4. MYSQL优化优化再优化!

    1.数据库设计和表创建时就要考虑性能 2.sql的编写需要注意优化 3.分区 4.分表 5.分库 .数据库设计和表创建时就要考虑性能 mysql数据库本身高度灵活,造成性能不足,严重依赖开发人员能力. ...

  5. java 加密

    加密.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密. 双向加密大体意思就是明文加密后形成密文,能够通过算法还原成明文. 单向加密仅仅是对信息进行了摘要计算,不能通过算法生成明文. ...

  6. ps 如何制作动态打字图?

      1.情景展示 有几句话,想以打字的形式出现,而不是干巴巴的几个字,如何实现这个有趣的效果呢? 2.解决方案 第一步:录制屏幕:将想展示的文字逐字打出来-->保存: 第二步:将录制的视频使用p ...

  7. 【shell】创建长目录,目录存在则忽略,缺失则创建

    有时候,我们需要创建一个空目录树,如果给定路径包含目录,那么还必须检查这些目录是否存在: mkdir –p /qinys/oliver/tmp/ 执行上述命令即可创建长目录,并且有则忽略,无则创建原则 ...

  8. 使用VTK与Python实现机械臂三维模型可视化

    三维可视化系统的建立依赖于三维图形平台, 如 OpenGL.VTK.OGRE.OSG等, 传统的方法多采用OpenGL进行底层编程,即对其特有的函数进行定量操作, 需要开发人员熟悉相关函数, 从而造成 ...

  9. java第六节 字符串/集合

    /* *String类和StringBuffer类 * 位于java.lang包中 * String类对象中的内容一旦被初始化就不能再改变 * StringBuffer类中用于封装内容可以改变的字符串 ...

  10. RHEL7-openldap安装配置一(服务器端安装配置)

    LDAP的术语:entry:一个单独的单元,使用DN(distinguish name)区别attribute:entry的属性,比如,如果entry是组织机构的话,那么它的属性包括地址,电话,传真号 ...