【GAN与NLP】GAN的原理 —— 与VAE对比及JS散度出发

 

0. introduction

GAN模型最早由Ian Goodfellow et al于2014年提出,之后主要用于signal processing和natural document processing两方面,包含图片、视频、诗歌、一些简单对话的生成等。由于文字在高维空间上不连续的问题(即任取一个word embedding向量不一定能找到其所对应的文字),GAN对于NLP的处理不如图像的处理得心应手,并且从本质上讲,图片处理相较于NLP更为简单(因为任何动物都可以处理图像,但只有人类可以处理语言)。因而将GAN与NLP结合,具有很深远的影响。Bengio也说,这将是让计算机获得更高智能的关键一步。

在开始之前,有一些先验知识,已经懂的可以跳过。

信息量:“中国队进入了2018世界杯决赛圈”显然比“巴西队进入了2018世界杯决赛圈”发生概率p(x)要低,信息量 I(x)=−log(p(x))要大。

熵(Entropy):为事件发生所有概率p(xi)的信息量,即

KL(Kullback-Leibler)散度,也叫相对熵,用来衡量真实分布P与预测分布Q之间的差异,即

,KL散度越小,预测分布越接近于真实分布。需要注意这里DKL(P||Q)!=DKL(Q||P)。

交叉熵(cross entropy),为KL散度拆解后的一部分内容,公式是

。可以看出,相对熵DKL(p||q) = -H(p) + H(p,q),可以看做负的真实分布p的熵,加p与q交叉熵的结果。

由于p的熵不变,故在机器学习中只需要优化交叉熵作为损失函数即可,以下m为当前batch中样本数,n为标签数。

在单分类问题中(一个节点属于一个类别,使用softmax计算预测数据,每个label累积和为1),损失函数为

在多分类问题中(一个节点可以属于多个类别,使用sigmoid计算预测数据,每个label独立分布),交叉熵写法可以简化为

,损失函数为

JSD(Jensen-Shannon)散度,优化了KL散度中p与q不能换方向的限制,

,其中M为P和Q的算数平均数M=1/2*(P+Q),可以看出,这里P与Q是对称的,JSD(P||Q) = JSD(Q||P)。

 

1. 与VAE对比

Autoencoder的主要思想是,生成内容尽可能和原内容一致。如下图所示,一开始随机生成一个向量作为code,之后通过NN Decoder解码看是否生成对应图片。即原图片input为x,code为z,经过Decoder后output为生成图片x',其中z要相较于x更小,压缩更多内容。其损失函数由下面所示。VAE是加入高斯噪声的Autoencoder更进一步,进而可以生成更多样的结果。关于Autoencoder和VAE具体可以参见之前文章https://www.cnblogs.com/rucwxb/p/8056144.html  (不参见也可以。。)

 

 

但是能够生成多样化结果的VAE有一个问题是,它并不是真正的模拟生成真实图片,比如对于同样的7来说,下图的左右和原图都是1个像素点的不同,但右边就是非真实图片,而VAE对于这两个生成图片的处理方法是相同的。

 

 

因而与VAE一步到位、非黑即白的使用重构损失函数的判别方法不同,GAN的判别器对生成器的指导是一步一步地,逐步优化生成器。

 

2. GAN的原理

一般来说,GAN分为Generator和Discriminator,它们有不同的目标,Generator的目标是尽可能train,Discriminator是not train。起初Generator和VAE类似,随机生成一个向量,再由Discriminator判断真假(0/1),之后固定Discriminator,使用gradient descent来更新Generator的参数,使得Discriminator的输出尽可能接近1。

原始GAN的原理是最大似然估计,总体损失函数为

,即优化Discriminator使得损失尽可能明显,优化Generator使得损失尽可能缩小。这里G是个函数,输入的是z(一个预先随机设定的标准正态分布,每一轮迭代都会改变),输出的是生成数据x,即G(z)=x,如下图所示。其中,要注意的是优化时改变的不仅是G的参数,还有G。D也是个函数,输入的是x,输出一个x和真实数据的差异(标量)。

 损失函数V可以看做真实数据分布P_data与生成数据分布P_G的交叉熵(文章开头有详细介绍),即

 

在训练时,先固定G不动,经过k次迭代后找到最优的D。由于对于式子f(D) = alogD + blog(1-D)来说,当D*=a/(a+b)时f(D)有最大值,所以对于上面的函数V来说,D*(x) = Pdata(x) / (Pdata(x)+PG(x)) 时,V(G,D)有最大值,此时

可以转换成

的形式,损失函数V(G,D)变成P_data和P_G的JSD距离。

同时,对于Discriminator来说,应该做到输入为真实数据xi时接受,为生成数据x*i时拒绝,V还可以写成这样的形式

,同时,D的目标是maximize这个V,即minimize

,这也是Discriminator的损失函数。

对于Generator来说,只需考虑生成数据x*i的情况,因此Generator的损失函数为

,但是由于log(1-D(x))在一开始训练很慢(如下图所示),于是进一步优化Generator的损失函数改为

 最终总结下GAN每轮迭代的步骤:

a. 从P_data(x)中采样m个 {x1,x2, … xm} 

b. 通过高斯分布P_prior(z)生成m个{z1, … , zm}

c. 通过x*i=G(zi)获得生成数据 {x*1, … , x*m}

d. 更新Discriminator的参数,以最大化

 更新方法为梯度下降法θd = θd + ηΔV’(θd) 

a-d重复k次学得Discriminator

e. 通过高斯分布P_prior(z)重新生成m个{z1, … , zm},并由此生成x*i=G(zi)

f. 更新generator的参数,以最小化

 更新方法为梯度下降法θg = θg − ηΔV’(θg)

e-f只需重复1次学得Generator

 

3. 训练GAN中遇到的问题 

问题1 —— JS散度=0

Discriminator很快就准确度很接近1,too strong,由于此时还没有训练出很好的Generator(即P_data(x)与P_G(x)在高维空间上几乎没有交叠),生成数据与真实数据完全不同,JSD(P_data||P_G)=0。这样 Discriminator估计的JS散度几乎不会给Generator提供任何信息,使其停止优化。

某种程度上可以通过添加噪声来解决,这样增大P_data(x)与P_G(x)重合面积,使得Discriminator不能完美将P_data(x)与P_G(x)区分开。并且噪声随着时间逐渐减少。

 

问题2 —— Mode Collapse

 

 这个即为只生成一种类型生成数据的情形。如下图所示,红色是生成数据,蓝色是真实数据,由于Discriminator只能提供判断是否生成了正确数据,而对遗失了什么数据不得而知,最终模型会拟合到单一情形中。

 

 

而对于以上两个问题,WGAN都可以解决。

关于WGAN的介绍,知乎上的这篇文章https://zhuanlan.zhihu.com/p/25071913写的很好。

简言之,其修改损失函数,不使用不稳定的JS散度,而是使用Wasserstein距离,即EM(earth-mover)距离

,代替了JS散度,解决即使两个分布没有任何重叠情况下对于距离的计算方法,为Generator提供有意义的梯度。

主要在模型上做了四点变化,由于不再使用交叉熵,因而Discriminator最后一层无需sigmoid函数,G与D的损失函数也不取log,另外加入损失函数务必Lipschitz连续的要求,即每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c,使用适合梯度不稳定情况的RMSProp优化器。

 

 

——————— END ———————

之后会继续写出seqGAN等引入强化学习方法将GAN用于NLP领域的文章,敬请期待。

 

原文地址:https://www.cnblogs.com/rucwxb/p/10481797.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


python方向·数据分析   ·自然语言处理nlp   案例:中文分词·社交网络分析      案例:人物关系分析·人工智能·深度学习·计算机视觉案例:行人检测·网络爬虫·量化交易          案例:多因子策略模型 
原文地址http://blog.sina.com.cn/s/blog_574a437f01019poo.html昨天实验室一位刚进组的同学发邮件来问我如何查找学术论文,这让我想起自己刚读研究生时茫然四顾的情形:看着学长们高谈阔论领域动态,却不知如何入门。经过研究生几年的耳濡目染,现在终于能自信地知道去哪儿了解最新科研
ptb数据集是语言模型学习中应用最广泛的数据集,常用该数据集训练RNN神经网络作为语言预测,tensorflow对于ptb数据集的读取也定义了自己的函数库用于读取,在python1.0定义了models文件用于导入ptb库函数,然而当python升级后,导入models文件时就会出现:ModuleNotFountError错误,这时需
 Newtonsoft.JsonNewtonsoft.Json是.Net平台操作Json的工具,他的介绍就不多说了,笔者最近在弄接口,需要操作Json。以某个云计算平台的Token为例,边操作边讲解。Json转为Model将Model转为Json将LINQ转为JSONLinq操作命名空间、类型、方法大全 Json转为Model 
NLP(NaturalLanguageProcessing)自然语言处理是人工智能的一个子领域,它是能够让人类与智能机器进行沟通交流的重要技术手段,同时也是人工智能中最为困难的问题之一。因此,NLP的研究处处充满魅力和挑战,也因此被称为人工智能“皇冠上的明珠”。目前各家主流深度学习框架,都开放了相应
做一个中文文本分类任务,首先要做的是文本的预处理,对文本进行分词和去停用词操作,来把字符串分割成词与词组合而成的字符串集合并去掉其中的一些非关键词汇(像是:的、地、得等)。再就是对预处理过后的文本进行特征提取。最后将提取到的特征送进分类器进行训练。一、什么是自然语言处
NLP(NaturalLanguageProcessing)自然语言处理是人工智能的一个子领域,它是能够让人类与智能机器进行沟通交流的重要技术手段,同时也是人工智能中最为困难的问题之一。因此,NLP的研究处处充满魅力和挑战,也因此被称为人工智能“皇冠上的明珠”。目前各家主流深度学习框架,都开放了相应
编者注:文中超链接如果不能访问可以点击“阅读原文”访问本文原页面;可以参考2018年5月21-24日伦敦Strata数据会议上的教学辅导课《使用spaCy和SparkNLP进行自然语言理解》。本系列博客的目地是通过使用两个领先的生产级语言处理库(JohnSnowLabs的ApacheSparkNLP和Explosion
NLP文本相似度相似度相似度度量:计算个体间相似程度相似度值越小,距离越大,相似度值越大,距离越小最常用--余弦相似度:​一个向量空间中两个向量夹角的余弦值作为衡量两个个体之间差异的大小余弦值接近1,夹角趋于0,表明两个向量越相似如果向量a和b不是二维而是n维​
0.原文NLP系列(6)_从NLP反作弊技术看马蜂窝注水事件-寒小阳-CSDN博客https://blog.csdn.net/han_xiaoyang/article/details/842057011.马蜂窝是否有大量抄袭点评1.1先用词袋模型快速筛选一批相似点评词袋子模型是一种非常经典的文本表示。顾名思义,它就是将字符串视为
地址:https://gitbook.cn/books/5c7888e1a19247277cb5c313/index.html深度学习优势总结:手工特征耗时耗力,还不易拓展自动特征学习快,方便拓展深度学习提供了一种通用的学习框架,可用来表示世界、视觉和语言学信息深度学习既可以无监督学习,也可以监督学习在DeepNLP
本文将分享发表在2018年的NAACL上,outstandingpaper。论文链接ELMo。该论文旨在提出一种新的词表征方法,并且超越以往的方法,例如word2vec、glove等。论文贡献点能捕捉到更复杂的语法、语义信息。能更好的结合上下文内容,对多义词做更好的表征。(以往的词表征方法,例如word2ve
时间:2016年1月。出处:http://blog.csdn.net/longxinchen_ml/article/details/50597149http://blog.csdn.net/han_xiaoyang/article/details/50616559声明:版权所有,转载请联系作者并注明出处##1.引言贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时
NLP的工程化,不是一个个算法的累积,也不是一个个任务的独立优化,而应该是系统工程,综合考虑语言、计算、场景等多种因素,不断演进融合,寻求效果满意解的过程。根据赫伯特.西蒙(图灵奖和诺贝尔奖双料得主)的有限理性模型,受到所处环境的高度复杂性和有限的信息加工能力限制,因此NLP应用
继NLP之后,我又开了ML这个大坑。这是因为NLP涉及到太多的ML模型,仅仅拿过来用的话,我实现的HanLP已经快到个人极限了。而模型背后的原理、如何优化、如何并行化等问题,都需要寻根求源才能解决。所以我找了个书单自学,电子书为主,顺便分享出来。 ML书单│  李航.统计学习方法.
少玩ai,人工智能,nlp,tensorflow之类的玄学,多学学基础,三大浪漫,C++,搞开发,千万不要变成调参侠
 0.introductionGAN模型最早由IanGoodfellowetal于2014年提出,之后主要用于signalprocessing和naturaldocumentprocessing两方面,包含图片、视频、诗歌、一些简单对话的生成等。由于文字在高维空间上不连续的问题(即任取一个wordembedding向量不一定能找到其所对应的文字),GA
自然语言处理Firstatall 因为本人换系统之前都在用oneNote,在ubuntu上部署不便,所以将一些常用的信息写成博客 本文主要引用Ruder大神的NLP-proress做了一下翻译和提取原文地址:传送门1.前沿技术StateoftheArt 机器学习和自然语言处理(NLP)的研究近来发展
北风网-人工智能就业班培训链接:https://pan.baidu.com/s/128DJgMY9G-fjzRAxq1QO-w  提取码:ngwi课程体系阶段一、人工智能基础-高等数学必知必会本阶段主要从数据分析、概率论和线性代数及矩阵和凸优化这四大块讲解基础,旨在训练大家逻辑能力,分析能力。拥有良好的数学基础,有利