文章目录
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θ(x∣c)表示当给出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(x∣c))
不可能穷举,最后是从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θ(xi∣ci)就会增加;反之相反。
训练过程
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θ(xi∣ci)降低,那么“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θ(xi∣ci)提高,第一个单词是为“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德文
语音与文字的转换
简单理论
实验结果
辨识出音标:
虽然分数不是很高,但比随机的还是好一些