GAN笔记_李弘毅教程(九)Sequence Generation


Improving Sequence Generation by GAN

Conditional Sequence Generation

以chat-bot 为例,正确答案应该是“I‘m good”,输出的结果和它越接近越好,实际上“Not bad”也是正确回答,对于机器来说“I’m John”相比“Not bad”,与正确答案更加相似。

Improving seq2seq model

用RL

人问一个句子,机器给予一个回应,人类会根据这个回应给出分数,回答错误,低分甚至负分。通过互动过程改善。

输入一句话c到机器,机器输出x;同时输入c和x给人,输出两者的匹配度。整个过程需要让reward提高,方法用“Policy Gradient”
下图“human”绿方块相当于一个D。

什么是“Policy Gradient”?
调参数 θ \theta θ,使
先固定 θ \theta θ,计算reward的期望值有多大。
R θ {R_\theta } Rθ是期望值。
P ( c ) P(c) P(c)表示每一种c出现的的几率;
p θ ( x ∣ c ) {p_\theta }(x|c) pθ(xc)表示当给出c和 θ \theta θ,出现x的几率为多少。
R ( c , x ) R(c,x) R(c,x)表示人给出的reward。
(期望公式: p ( x , c ) = p ( c ) × p ( x ∣ c ) p(x,c) = p(c) \times p(x|c) p(x,c)=p(c)×p(xc)

不可能穷举,最后是从c、x中sample出N个,取平均。

θ \theta θ在哪里呢?藏到每一对里;当 θ \theta θ变化的时候,每一对都会发生变化。
实际上应该怎么办?
实际上怎么更新 θ \theta θ,先对前者进行更新,再做估计。

如果 R ( c i , x i ) R({c^i},{x^i}) R(ci,xi)是正确的,那么 P θ ( x i ∣ c i ) {P_\theta }({x^i}|{c^i}) Pθ(xici)就会增加;反之相反。

训练过程

Maximum Likelihood的training data是正确的,无权重;
而Reinforcement Learning(强化学习)的training data不一定正确,所以要加上 R ( c i , x i ) R({c^i},{x^i}) R(ci,xi),有权重。
train的话 R ( c i , x i ) R({c^i},{x^i}) R(ci,xi)有正有负比较好

实际上是不可能能穷举的
所以解决方法:Alpha GO,让两个agent互讲。

用GAN

让D来给反馈

Algorithm

RNN generator右下角
左上角D同时输入Chatbot的输入和输出
更新参数使scalar越大越好
事实上该network没有办法作微分,因为有sampling的过程,
当你对参数update的时候,因为这个sampling,所以这种结果的小小变化不一定能显示出来。

如何解决这个问题?(三种)

Gumbel-softmax

本来不能微分的东西变得可以微分

Continuous Input for Discriminator

跳过sampling的过程

但问题是什么?
real sentence和fake sentence类型不一样,一个one hot(整数),一个小数
最后导致D判断generated data的准则是观察fake sentence是不是one hot。

所以可以加一个constraint

“Reinforcement Learning”

R ( c i , x i ) R({c^i},{x^i}) R(ci,xi)换成 D ( c i , x i ) D({c^i},{x^i}) D(ci,xi)
区别就是D也会更新

具体:

换成

当回答错误, D ( c i , x i ) D({c^i},{x^i}) D(ci,xi)是负的,那么就会使 log ⁡ P θ ( x i ∣ c i ) \log {P_\theta }({x^i}|{c^i}) logPθ(xici)降低,那么“I”对应的也会降低,但实际上回答的第一个单词是应该为“I”,那这个过程是不合理的。
但其实这个过程是没有问题的,因为回答正确时, D ( c i , x i ) D({c^i},{x^i}) D(ci,xi)是正负的,那么就会使 log ⁡ P θ ( x i ∣ c i ) \log {P_\theta }({x^i}|{c^i}) logPθ(xici)提高,第一个单词是为“I”的次数会很多,就可以抵消掉之前错误降低的“I”。
但实际上当sampling不够多的时候,还是会出现这种问题。

怎么解决?
不reward整体,而是分为部分的。尽管回答错误,但仍让第一个单词是为“I”的提高
所以改写reward期望求导的公式。
Method 1计算量会很大,难度比较大;
Method 2计算量没那么大,但不如Method 1效果好。

还可以用RankGAN

实验结果如下:
MLE总回答“I don’t know”,和图片类比就相当于模糊图片。
GAN就会回答得清晰些,比较喜欢讲长的句子,但不一定就是好的回答。

更多的应用:

Unsupervised Conditional Sequence Generation

Text Style Transfer

文字上的风格迁移
把正面和负面当成一种style

因为seq是离散的,所以会sampling,这时候很可能出现两个G和D无法一起train,无法更新的问题,这问题就回到了上一节的内容。用三种方法即可解决。

或者用word embedding取代

实验结果:

相同空间的映射
但为了防止decoder输出到D输入之间因为离散出现的问题,D输入的是Decoder的hidden vector。

Unsupervised Abstractive Summarization

Abstractive Summarization
摘要总结
输出用机器自己话总结出来的句子

但问题就是:supervised需要大量的有标签训练数据,所以用unsupervised。
收集两堆data就行。

过程

换一种思维:
先是auto-encoder

再判断word sequence是否是正确的,所以加D:

为了防止离散导致的sampling,可以用Reinforcement Learning。
但如下的实验结果可以看出,第一个例子中机器为了让结果看起来是人写的,直接拿出文中的一句话当摘要。
第二个例子还可以。

下图实验就是个比较错误的例子。

下图的实验结果:
supervised需要3.8M对,但性能最好;
如果少量,就可以用GAN,500k时,就可以得到较好的性能。

Unsupervised Translation

不同语言之间的转换

不同的语言视作不同的domain。

实验结果:
En英文
Fr法文
De德文

语音与文字的转换

简单理论

实验结果
辨识出音标:
虽然分数不是很高,但比随机的还是好一些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值