Improving Supervised Seq-to-seq Model
有监督的 seq2seq ,比如机器翻译、聊天机器人、语音辨识之类的 。

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

RL(human feedback)
训练目标是,最大化 expected reward。很大的不同是,并没有事先给定的 label,而是人类来判断,生成的 x 好还是不好。
 
简单介绍一下 policy gradient。更新 encoder 和 generator 的参数来最大化 human 函数的输出。最外层对所有可能的输入 h 求和(weighted sum,因为不同的 h 有不同的采样概率);对一个给定的 h,对所有的可能的 x 求和(因为同样的 seq 输入可能会产生不一样的 seq 输出);求和项为 R(h, x)*P_θ (x | h) ,表示给定一个 h 产生 x 的概率以及对应得到的 reward(整项合起来看,就是 reward 的期望)

用 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)的区别

GAN(discriminator feedback)
不再是人给 feedback,而是 discriminator 给 feedback。

训练流程。训练 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 噪声再采样。

  xπ  = argmax(log(πi) + Gi)
  其中,G是独立同分布的标准 Gumbel 分布的随机变量,cdf 为 F(x) = exp(-exp(-x))。为了要可微,用 softmax 代替 argmax(因为 argmax 不可微,所以光滑地逼近),G可以通过 Gumbel 分布求逆,从均匀分布中生成 Gi = -log(-log(Ui)),Ui ~ U(0, 1) 
  

  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    

    • Using the formulation of policy gradient, replace reward  R(c, x) with discriminator output D(c, x)
  
  和典型的 RL 不同的是,discriminator 参数是要 update 的,还是要输入给 discriminator 现在 chatbot 产生的对话和人类的对话,训练 discriminator 来分辨。
  

 
Unsupervised Seq-to-seq Model
 
Text Style Transfer
用 cycle GAN 来实现,训练两个 GAN,实现两个 domain 的互相转。仍旧要面对 generator 的输出要 sampling 的情况,选择上述第二种解决方案,就是连续化。直接用 word embedding 的向量。

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

 
 
Unsupervised Abstractive Summarization
 
Unsupervised Translation

GAN在seq2seq中的应用 Application to Sequence Generation的更多相关文章

  1. spark-sql启动后在监控页面中显示的Application Name为SparkSQL::xxxx的疑问

    启动spark-sql执行sql时,在监控页面中看到该Application的Name是SparkSQL:hadoop000(其中hadoop000是测试机器的hostname),就有个想法,修改下该 ...

  2. 在 asp.net core 中使用类似 Application 的服务

    在 asp.net core 中使用类似 Application 的服务 Intro 在 asp.net 中,我们可以借助 Application 来保存一些服务器端全局变量,比如说服务器端同时在线的 ...

  3. Xcode11 Developer Tool中没了Application Loader

    升级Xcode11之后不少人发现在Open Developer Tool中没了Application Loader. 那么如果我们还想用该怎么办呢? 先这样 找个老版的Xcode–>Conten ...

  4. 在IIS7中使用ARR(Application Request Routing)反向代理虚拟目录到Nodejs站点

    目标: 1.访问www.arrdemo.com/proxy 跳转到 localhost:8898的Nodejs站点 2.Nodejs站点的页面可以返回到浏览器,包括js,css,图片 3.Nodejs ...

  5. JavaScript中的Partial Application和Currying

    这篇文章是一篇学习笔记,记录我在JS学习中的一个知识点及我对它的理解,知识点和技巧本身并不是我原创的.(引用或参考到的文章来源在文末) 先不解释Partial Application(偏函数应用)和C ...

  6. GAN︱GAN 在 NLP 中的尝试、困境、经验

    GAN 自从被提出以来,就广受大家的关注,尤其是在计算机视觉领域引起了很大的反响,但是这么好的理论是否可以成功地被应用到自然语言处理(NLP)任务呢? Ian Goodfellow 博士 一年前,网友 ...

  7. 『TensorFlow』通过代码理解gan网络_中

    『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 上篇是一个尝试生成minist手写体数据的简单GAN网络,之前有介绍过,图片维度是28*28*1,生成器的上采样使 ...

  8. java中session和application的用法

    Session的用法 首先创建2个jsp文件t1.jsp  t2.jsp 在t1.jsp <% //设置session的键与值 session.setAttribute("abc&qu ...

  9. Java中session与application的异同

    客户端的session 其实是标记了你的请求来自哪个浏览器 问题1:永远都一样吗? 答:重启了浏览器,你的session id就改变了, 结果会导致,再无法取回原来在服务端保存的数据. 问题2:假设客 ...

随机推荐

  1. 安装yarn 心得分享

    初次使用yarn ,坑的我,全局安装完@vue/cli,安装之后就是说vue不是内部命令,研究好久,总结一下分享大家一起学习 1,首先安装yarn: 安装yarn 去官网下载yarn 安装包 默认安装 ...

  2. idea如何安装插件

    原文地址:https://jingyan.baidu.com/article/215817f742a61c1eda142329.html 1.首先打开idea界面,然后 按住快捷键ctrl+shift ...

  3. 创建一个springbootcloud项目

    nacos:服务治理 fegin:负载均衡 sentinel:分布式系统的流量防卫兵 sleuth+zipkin:链路追踪 前提软件安装 nacos: github下载地址:https://githu ...

  4. js动画和css3动画的区别

    JS动画(逐帧动画) 首先,在js动画是逐帧动画,是在时间帧上逐帧绘制帧内容,由于是一帧一帧的话,所以他的可操作性很高,几乎可以完成任何你想要的动画形式.但是由于逐帧动画的帧序列内容不一样,会增加制作 ...

  5. 用 Java 拿下 HTML 分分钟写个小爬虫

    本文适合有 Java 基础知识的人群 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款开源 Java 版一款网页元素解析框架- ...

  6. oracle 11g 导入表时 提示 ***值太大错误

    导入数据库时,总是提示**值太大,实际值是**的错误. 具体忘了错误代码是什么了 ——! 经查询,这个是由于字符集设置的不是gbk的,导致导入时遇到中文字符出现的问题, 解决方法: 如果可以的话就把数 ...

  7. MyBatis-Plus分页——PageHelper和IPage介绍

    两个都用于分页,常用的应该是PageHelper了,理解了一下源码后发现IPage比PageHelper好用. 使用方法是 PageHelper.startPage()然后后边写sql就可以. 紧接着 ...

  8. Java实现内嵌浏览器

    创建项目 ---->   导入需要的jar ---->  代码实现 需要的jar: https://pan.baidu.com/s/1MEZ1S0LnKSMGQm24QWgmCw 代码: ...

  9. 本地ubuntu 往阿里云ubuntu服务器传文件

    起因 今天在本地ubuntu搭环境,弄好之后需要把本地的文件传到服务器上去... 本想着用xftp直接拖过去,结果连接不上,可能是我太菜了吧,只好百度找方法··· 这里就简单的记录一下吧~ 步骤 sc ...

  10. 【盗墓笔记】图解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

    将一些项目中的一些独立功能打包成aar,不仅能于项目解耦,还能够提供给其它项目使用相同的功能,可谓是为项目开发带来了很大的便利.最近第一次做sdk,碰到一些问题,花了不少时间才解决,所以这里做一下简单 ...