GAN在seq2seq中的应用 Application to Sequence Generation
而 generator 其实就是典型的 seq2seq model ,可以把 GAN 应用到这个任务中。


用 sampling 后求平均来近似求期望:

但是 R_θ 近似后并没有体现 θ(隐藏到 sampling 过程中去了),怎么算梯度?先对 P_θ (x | h) 求梯度,然后分子分母同乘 P_θ (x | h) ,而 grad(P_θ (x | h)) / P_θ (x | h) 就等于 grad(log P_θ (x | h)),所以就在 R_θ 原本的近似项上乘一个 grad(log P_θ (x | h))

如果是 positive 的 reward(R(hi, xi) > 0), 更新 θ 后 P_θ (xi | hi) 会增加;反之会减小(所以最好人类给的 reward 是有正有负的)

整个 implement 的过程就如下图所示,注意每次更新 θ 后,都要重新 sampling

RL 的方法和之前所说的 seq2seq model (based on maximum likelihood)的区别

训练流程。训练 D 来分辨 <c, x> pair 到底是来自于 chatbot 还是人类的对话;训练 G 来使得固定的 D 给来自 chatbot 的 (c', x~) 高分。

仔细想一下,训练 G 的过程中是存在问题的,因为决定 LSTM 在每一个 time step 的 token 的时候实际上做了 sampling (或者取argmax),所以最后的 discriminator 的输出的梯度传不到 generator(不可微)。

怎么解决?
1. Gumbel-softmax https://casmls.github.io/general/2017/02/01/GumbelSoftmax.html
首先需要可以采样,使得离散的概率分布有意义而不是只能取 argmax。对于 n 维概率向量 π,其对应的离散随机变量 xπ 添加 Gumbel 噪声再采样。

2. Continuous Input for Discriminator
避免 sampling 过程,直接把每一个 time step 的 word distribution 当作 discriminator 的输入。

这样做有问题吗?明显有,real sentence 的 word distribution 就是每个词 one-hot 的,而 generated sentence 的 word distribution 本质上就不会是 1-of-N,这样 discriminator 很容易就能分辨了,而且判断准则没有在考虑语义了(直接看是不是 one-hot 就行了)。

3. Reinforcement Learning

把 discriminator 的 output 看作是 reward:
• Update generator to increase discriminator = to get maximum reward
也可以用映射到 common space 的方法,sampling 后离散化的问题,可以用一个新的技巧解决:把 decoder LSTM 的 hidden layer 当作 discriminator 的输入,就是连续的了。

GAN在seq2seq中的应用 Application to Sequence Generation的更多相关文章
- spark-sql启动后在监控页面中显示的Application Name为SparkSQL::xxxx的疑问
启动spark-sql执行sql时,在监控页面中看到该Application的Name是SparkSQL:hadoop000(其中hadoop000是测试机器的hostname),就有个想法,修改下该 ...
- 在 asp.net core 中使用类似 Application 的服务
在 asp.net core 中使用类似 Application 的服务 Intro 在 asp.net 中,我们可以借助 Application 来保存一些服务器端全局变量,比如说服务器端同时在线的 ...
- Xcode11 Developer Tool中没了Application Loader
升级Xcode11之后不少人发现在Open Developer Tool中没了Application Loader. 那么如果我们还想用该怎么办呢? 先这样 找个老版的Xcode–>Conten ...
- 在IIS7中使用ARR(Application Request Routing)反向代理虚拟目录到Nodejs站点
目标: 1.访问www.arrdemo.com/proxy 跳转到 localhost:8898的Nodejs站点 2.Nodejs站点的页面可以返回到浏览器,包括js,css,图片 3.Nodejs ...
- JavaScript中的Partial Application和Currying
这篇文章是一篇学习笔记,记录我在JS学习中的一个知识点及我对它的理解,知识点和技巧本身并不是我原创的.(引用或参考到的文章来源在文末) 先不解释Partial Application(偏函数应用)和C ...
- GAN︱GAN 在 NLP 中的尝试、困境、经验
GAN 自从被提出以来,就广受大家的关注,尤其是在计算机视觉领域引起了很大的反响,但是这么好的理论是否可以成功地被应用到自然语言处理(NLP)任务呢? Ian Goodfellow 博士 一年前,网友 ...
- 『TensorFlow』通过代码理解gan网络_中
『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 上篇是一个尝试生成minist手写体数据的简单GAN网络,之前有介绍过,图片维度是28*28*1,生成器的上采样使 ...
- java中session和application的用法
Session的用法 首先创建2个jsp文件t1.jsp t2.jsp 在t1.jsp <% //设置session的键与值 session.setAttribute("abc&qu ...
- Java中session与application的异同
客户端的session 其实是标记了你的请求来自哪个浏览器 问题1:永远都一样吗? 答:重启了浏览器,你的session id就改变了, 结果会导致,再无法取回原来在服务端保存的数据. 问题2:假设客 ...
随机推荐
- shell脚本同步私人git仓库
前言 分别在个人电脑.个人服务器.码云三个地方建立了数据仓库用于保存自己的各种数据,通过git+shell进行数据同步. 此举不仅可以避免因存储损坏.版本更迭.数据误操作等因素带来的各种麻烦,也能实现 ...
- 3个必备cookie实用方法
今天跟大家介绍一下三种cookie的使用方法,selenium提供了我们add_cookie()方法来跳过验证码直接登录的方法.我们现在以博客园登录为例,都知道现在博客园登录要拼图验证. 先在网页打开 ...
- Apache Tika实战
Apache Tika实战 Tika 简介 Apache Tika 是一个内容分析工具包,可以检测上千种文件类型,并提取它们的元数据和文本.tika在设计上十分精巧,单一的接口使它易于使用,在搜索引擎 ...
- JS数组遍历的十二种方式
遍历有如下几种方式 数组方法 map forEach filter find findIndex every some reduce reduceRight 其他方法 for for in for o ...
- laravel Application实例化后两个方法
laravel容器初始化registerBaseServiceProviders方法 上篇讲解了laravel容器的基本使用和原理,这篇继续Application构造方法中的registerBaseS ...
- 数字电路基础(二)TTL与非门输入端悬空和接大电阻的问题
引言 我们在做那些判断与非门输入输出的时候,常常把输入端悬空和接大电阻作为高电平输入处理,比如下边这一例题: 很显然,我们无法直接从与非门逻辑图中看出其内部工作原理,那我们该如何分析呢?那肯定是去分析 ...
- Apache Pulsar 2.6.1 版本正式发布:2.6.0 功能增强版,新增 OAuth2 支持
在 Apache Pulsar 2.6.0 版本发布后的 2 个月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式发布! Apache Pulsar 2.6.1 修复 ...
- HDU多校-1004-Vacation(思维)
Tom and Jerry are going on a vacation. They are now driving on a one-way road and several cars are i ...
- WebLogic12C安装配置文档
jdk版本:1.8; jdk安装路径不准有空格 JDK安装: jdk版本:1.8; jdk安装路径不准有空格 WebLogic安装: 解压安装包 解压JAR 找到fmw_12.2.1.3.0_wls\ ...
- agumaster增加了网易数据源