当前位置: 首页 > news >正文

一文看懂——序列数据的生成:GAN的方法

05a9cac17f3c7ee1b08170bed741359b.gif

caa662fd680c406f5660a36d0f91d61e.png

导读:序列数据指的是一种按照先后顺序排列的离散数据,这类数据虽然不如图像数据那么直观,但其实在实际生活中非常常见。比如我们平时浏览网站的行为其实就是序列数据,我们会不断地在各种不同的网页链接之间跳转,从而形成一个序列的网页链接列表;又比如我们平时使用的自然语言,就是由一系列按照顺序排列的文字所构成。

88dc305a5c794f1186f10084acd7908a.png作者:史丹青

来源:华章计算机(hzbook_jsj)

10d8f8cc37e3403fef86afebc1ded28b.png

GAN的模型直接用于训练是一个非常自然的想法,只需要能够收集大量真实的序列数据就可以通过生成器和判别器的对抗来完美实现对与离散数据的生成。这个想法看似十分美好,但是在实践过程中会发现两个致命的问题。首先,是离散数据的可导性。GAN的创造者IanGoodfellow之前曾表示由于GAN需要计算生成器输出的梯度,因此在有连续输出的地方才能很好的工作,而像文本这样离散的数据不具备可导性很难使用GAN进行生成。其次,是如何去判断一个还没有生成完毕的序列数据是“真”或“假”。在实际的生成过程中,序列数据是一个一个逐步产生的,除了最终状态之外的大部分情况都是一个未完成的序列,比如一句还没有说完的话,或是一系列没有完成的网页操作。在这个未完成的状态下,如何让判别器判断当前的序列是“真”是“假”就变成了一个棘手的问题。

SeqGAN

SeqGAN首先提出了GAN在序列生成上的方法。为了解决在之前提到的那些问题,SeqGAN把序列数据生成的过程看作是一个序列决策的过程,在生成数据的过程中一步一步决定下一个元素是什么。

SeqGAN使用了一种基于强化学习的方法,它的生成器正是强化学习中的代理(Agent),而模型的状态(State)是当前已经生成的序列,行为(Action)则是下一步需要生成的元素。但和传统的强化学习不同的是,在整个模型训练过程中并不会有一个明确的奖励函数(Reward),而是使用了GAN架构中的判别器网络来评估当前生成的序列,从而指导生成器的训练。首先,对于离散数据难以进行反向传播的问题,由于SeqGAN的生成器是一个随机策略模型,可以直接使用强化学习中的策略梯度方法(PolicyGradient)完美规避了这个问题。因为在Policy Gradient中并不用针对误差来进行反向传播,而是根据当前选择的结果来决定每种行为在各种状态下的概率,如果该行为最终得到了一个比较好的分数,则下次在相同情况下该行为将会有一个比较大的概率,反之的话则该行为的概率则会降低。其次,对于无法判断不完整序列的问题,SeqGAN在中间过程中使用了蒙特卡洛搜索的方法,会把中间序列进行补全,这也使得判别器可以始终用评估完整序列的方式来评估中间序列。

a7bb109d81af897ab12c00ad7517c009.png

SeqGAN架构示意图(图9-1)

上图展示了SeqGAN的架构,从整体上来看和传统的GAN架构基本是一致的,唯一的差别是数据上的差异,判别器D会基于真实世界的序列数据和生成器G产生的假序列数据进行训练。

04c0628e4e0a795d6d3f936e45e8d776.png

SeqGAN生成过程示意图(图9-2)

我们来看一下SeqGAN的生成的细节。对于强化学习来说通常需要能够清晰定义马尔科夫决策模型,其中最重要的三个元素就是状态(State)、行为(Action)以及奖励函数(Reward)。对于SeqGAN中的生成器G来说,State正是当前已经生成的中间序列,Action是序列中下一个会使用的元素,而Reward则是由判别器D给出的结果,用于后续的策略梯度算法。图中的曲线表示对于中间序列采用了蒙特卡洛搜索的方式来对未完成的序列进行采样补全,从而可以让判别器对完整的序列结果进行评估。

自然语言生成

在离散序列数据中最常用的就是自然语言,文字是天然的序列数据,每个元素代表自己独立的含义又和前后文保持关联。如果SeqGAN在序列数据上能够保证生成的质量,那在此基础上就可以自动生成让人难以分辨真假的文本数据。在SeqGAN的论文中,作者在中国的诗词和奥巴马的政治演讲上分别进行了测试,其中在诗词任务中使用了16384个中文诗句,在演讲任务中则使用了11092段奥巴马的句子。为了保证自动化的完整性,没有使用任何先验知识。在实验结果中可以发现,使用SeqGAN生成的自然语言文本已经和真实的数据比较接近了。为了更进一步提高文本生成的质量,研究者们在判别器上提出进一步优化的想法。传统GAN的判别器往往是对于数据进行二分类,判断为“真”或为“假”,但是在自然语言的场景下这样的判断就显得限制过多了,因为自然语言的表现是非常丰富的,很难用单纯的二分类对一句句子下定义。

RankGAN[2]是对现在GAN生成方法在语言生成上二分类方法的改进,RankGAN顾名思义是使用了排序的方法去替换二分类的方法。在RankGAN的架构中有两个神经网络,分别是生成器和排序器,对于排序器来说,它的目标是将人类写的句子尽量要排在自动生成的句子之前。如图所示,H表示人类写的句子,而G是机器所写的句子。排序器的输入是一个自动生成的句子和一组人类写的句子。同时,我们会给排序器一个人类写的句子作为参考,它需要依据这个参考项去尽量将自动生成的句子排在比较靠后的位置上。图中的例子表示的是生成器已经完全骗过了排序器,将生成的句子G排在了第一位。

c5cf66d3389db96e3b9c6ad0372706c3.png

RankGAN架构示意图(图9-3)

上面的工作在生成短文本的任务中已经有了不错的结果,但由于在生成数据的过程中,需要使用采样的方式得到完整句子后才可以得到奖励函数作为反馈,这导致生成的句子在这个过程中会丢失掉中间信息,如果生成的句子一旦超过20个字,效果就会大大降低。

为了解决长文本生成的问题,研究者提出了一种LeakGAN的新框架,让判别器能够将提取到的高阶信息泄露给生成器,以此更好地来指导生成器。如下图所示,LeakGAN的判别器中会提取中间特征,用来透露给生成器,而传统的GAN通常在训练过程中不会将生成器和判别器的中间信息共享,这也是LeakGAN名字的由来。

1be26c01f2b228f4473725e5eeae01ba.png

LeakGAN框架示意图(图9-5)

看另一边,生成器会基于前一个单词去预测下一个输出的词是什么。在生成器中包含两个角色,一个是Manager用于接收来自判别器泄漏的信息,并提出指导的生成方向,另一个是Worker用于接收上一个单词并输出向量用于预测下一刻的单词。在生成器中,会需要把Manager的指导和Worker的预测进行整合,考虑两者并最终一起得出句子中的下一个单词。

在真实的数据实验中,LeakGAN获取了比较显著的效果提升,尤其是在长句子上,LeakGAN通常能取得表好的结果。

小结

SeqGAN、RankGAN、LeakGAN等研究是GAN在离散序列数据生成上的探索,这些探索打开了GAN的应用领域,未来我们可以期待GAN在离散数据上有更多的AI应用出现。

参考文献

[1] Yu, L., Zhang, W., Wang, J. and Yu, Y., 2017, February.Seqgan: Sequence generative adversarial nets with policy gradient. InProceedings of the AAAI conference on artificialintelligence(Vol. 31, No. 1).

[2] Lin, K., Li, D.,He, X., Zhang, Z. and Sun, M.T., 2017. Adversarial ranking for languagegeneration. InAdvances in neural information processing systems(pp.3155-3165).

[3] Guo, J., Lu, S.,Cai, H., Zhang, W., Yu, Y. and Wang, J., 2018, April. Long text generation viaadversarial training with leaked information. InProceedings of the AAAIConference on Artificial Intelligence(Vol. 32, No. 1).

以上内容摘自《生成对抗网络入门指南(第2版)》一书

a3318c41d56dfd22b4fedc2229f06bca.png

GAN入门佳作时隔3年再升级!支持Tensorflow2,提供全部示例代码。揭秘海量人脸图像生成技术,追踪GAN前沿发展。

6f053c70a96b448fd7120b7de59ec502.png

加群一起学👇

3e2ca77bb3e4feb6cabf4db1e63e2eda.png

扫码关注【华章计算机】视频号

每天来听华章哥讲书

40ba78c82122af9829a6be74daaefaca.gif

更多精彩回顾

书讯 | 1月书讯(下)| 2022年的第一本书

书讯 | 1月书讯(上)| 2022年的第一本书

资讯 | 重磅!达摩院发布2022十大科技趋势

书单 | 6本书,读懂2022年最火的边缘计算

干货 | Flink1.14.2发布,除了log4j漏洞你还需要关注什么?

收藏 | Docker冲顶技术热词,微服务应用热度不减,中国云原生开发者真实现状如何?

上新 | 【新书速递】金融领域可解释机器学习模型与实践

赠书 | 【第88期】这10本硬核技术书,带你读懂5G、物联网和边缘计算,玩转元宇宙

aa32b9d4d477d7674b8532ecec815335.gif

8a5caf6df40b48c14a82adcdda359a89.gif

点击阅读全文了解更多AI好书

相关文章:

  • “三行代码,确实需要耗上一整天!”
  • GraalVM下一代JVM到底是什么?
  • 【第89期】推荐几本电商必读书
  • 一文带你了解LoongArch自主指令系统
  • 2021年数据中台行业十大关键词
  • 测试工程师的未来发展方向在哪里?
  • 一个案例讲明白!如何更安全地实现数据备份和恢复
  • 省政协委员、南京大学人工智能学院院长周志华: 科研学习探索最重要的是“兴趣”和“勤奋”...
  • 为什么现在还有985高校给大一上C语言课?
  • 如何用数字化构建企业的“韧性”?
  • 前端应用和产品逻辑的核心:交互流
  • 2月书讯 (上)| 新年到,新书到!
  • 2月书讯(下)| 新年到,新书到!
  • Three.js 的 3D 粒子动画:群星送福
  • 如何平衡存储系统的一致性和可用性?
  • [译]前端离线指南(上)
  • gulp 教程
  • JavaScript设计模式与开发实践系列之策略模式
  • Koa2 之文件上传下载
  • Linux中的硬链接与软链接
  • Promise初体验
  • SpingCloudBus整合RabbitMQ
  • Web标准制定过程
  • 番外篇1:在Windows环境下安装JDK
  • 分类模型——Logistics Regression
  • 理清楚Vue的结构
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 普通函数和构造函数的区别
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端
  • 微服务框架lagom
  • 系统认识JavaScript正则表达式
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 阿里云ACE认证之理解CDN技术
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (C语言)fread与fwrite详解
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (推荐)叮当——中文语音对话机器人
  • (转)Scala的“=”符号简介
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Core 和 .NET Framework 中的 MEF2
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [16/N]论得趣
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [20170713] 无法访问SQL Server