2020李宏毅学习笔记——38.Conditional Generation RNN & Attention

三部分:
Generation
Attention
Tips for Generation

一:Generation

1. 生成句子:RNN是可以把word一个一个的产生出来的

特殊的BOS丢进去之后,出来一个W1的几率,得到的是床。以此类推。
生成好的RNN模型里,我们输入开头,模型可以输出一系列的输出,如下图,我们根据输出得到了“床”,然后把“床”作为下一个时间点的输入,得到“前”,依次类推。这是测试时的一种做法,并不是唯一做法。在训练RNN模型的时候,并不是拿上一时刻的输出当作下一时刻的输入,而是拿句子真正的序列当作输入的。
在这里插入图片描述

2. 生成generation图片:
·Images are composed of pixels
·Generating a pixel at each time by RNN
图片看做是一个句子:红,黄,蓝。。。,由九个字组成的句子。train下去,就可以产生一个图片:由红黄蓝这个句子组成
在这里插入图片描述
然后就可以用产生句子的模型来玩这个东西。。。如果rnn train的够好的话,不光会生成,还会知道关系
在这里插入图片描述
但是像素中间的关系不是这么简单的,例如灰色那个像素从纵向看,是在蓝色下面的,上面的横着看的序列忽略了这一个关系。虽然RNN可以保留前面像素序列的信息,但是没有办法表示像蓝色下面是灰色的关系。正确的考虑方式为:
在这里插入图片描述
这个东西怎么建模型?用3D的LSTM
在这里插入图片描述

还可以生成图像,手写字体,演讲稿

光是RNN generate远远比狗,我们要有情景

二:condition generation

前提:RNN的标签是随机,LSTM是有记忆
但是如果只用RNN来做生成是不够的,因为我们不想生成一些随机的东西。

我们希望根据一些情景来生成我们的句子而不是随机生成一些句子,比如对话系统,需要根据问题来生成我们的答案,再比如翻译系统,我们要根据给出的句子得到对应的翻译。

CNN提取特征vector是encoder,RNN知道是个WOMAN:是decoder
比如下图:input一个image,通过CNN得到image的vector,把vector当做input丢给RNN,丢进去的input(image)不一样的话,它的output也会不一样,可能你的input影响不够大,网络在后面会遗忘之前看到的东西,我们需要在每次RNN output之前的时间点丢一个image(vector),RNN就会反复的复习看到的这张image。就不会让句子忘记自己要说什么了。
为了防止RNN把图片遗忘掉,在每次输出句子的时候都把图片向量作为输入。
在这里插入图片描述

再比如下面的机器翻译:实际上是后面要讲的Sequence-to-sequence learning。

首先,我们把问题或者需要被翻译的句子通过一个RNN或者LSTM进行Encoder,最后一个的输出就包含了这个句子的全部信息,然后把这个句子当作初始输入丢到另一个RNN或者LSTM中,然后通过这个得到对应的输出。encoder和decoder的LSTM或者RNN里的参数可以一样也可以不一样。
有如下场景:chat bot
机器说:Hello
人说:Hi
机器说:Hi(这里是错误的,之前已经打过招呼了)
所以需要把前面说过的话要记住,然后考虑到当前的输出。一种方式是使用双层encoder把前面的话的向量表示加入当当前上文表示中,综合考虑:
在这里插入图片描述
把long time 的information 都变成conditition ,方法是双层的encode

3、attention(本质:dynamic(动态) conditional generation)
让decoder在不同的时间点看到的encoder不一样,防止忘记,还可以加深
当使用attention的时候,它只会关注“机器”这一个词的vector,在decoder中能更好地学习到“机器”这一个词的特征,输出会更加准确
在这里插入图片描述

下图中的match是一个function,可以自己设计,“机”,“器”,“学”,“习”通过RNN得到各自的vector,z0是一个parameter。α10,上标1表示z0和h1到底有多match,下标0表示时间是0这个时间点,α表示相匹配程度。
无论是那种方式,如果match方法中有参数,要和模型一起训练jointly train
在这里插入图片描述

z1可以是c0丢到RNN以后,hidden layer的output,也可以是其他,z1再去算一次match的分数
对每个输入都做match后分别得到各自的α,然后softmax得到α^

在这里插入图片描述

time为1的时候:
在这里插入图片描述

得到的c1就是下一个decoder的input,此时只关注“学”,“习”。
在这里插入图片描述

得到的z2再去match得到c2。。
在这里插入图片描述

- Image Caption Generation
图片做注意力要注意,没有办法用一个向量来表示一个图片,所以这里把图片CNN划区后变成多个变量:
在这里插入图片描述
初始向量z0,然后就可以开做attention计算:

第二个词:
在这里插入图片描述
attention可视化:
在这里插入图片描述
视频文字生成:
在这里插入图片描述

四:memory network

application:reading comprehension

如下图所示:把一个document用N个句子来表示,每个句子对应一个vector(这里需要用到其它的neural network),question也用一个vector来表示,将每个句子与question进行match,得到对应的α。做∑相当于针对这一个question,跟它有关的句子的集合:用match score和句向量做加权和。。接着把 question和相关的部分都丢到DNN里面,最后得到答案。
在这里插入图片描述
阅读理解哪里体现了注意力:注意力的标准操作,意思就是我们计算了与Query有关的句子。

memory network复杂版本(下图所示):其实就是计算相似度和抽取句向量两部分分开,相当于把句子用不同的参数变成两组不同的向量h和x

match的部分与information的部分不见得是一样的,同一个句子可以分别抽取不同的两组vector,一组是x,一组是h。用两组不同的vector会得到更好的performance。query对x这组vector算attention,但是它是用h表示每一个句子的information。然后将attention得到的α和information****相乘,得到extracted information(vector)。这个vector可以放入DNN(deep neural network)得到answer,也可以Hopping,把这个vector和q加在一起得到一个新的q,再去match—>extracted information—>…可以跑好多个循环。
在这里插入图片描述

Hopping:

首先:一篇document用两组vector来表示它;接着一个query进来,和蓝色的vector计算attention,橙色的是从document中抽出来的information,将抽出来的information和q 进行;得到的结果再去计算attention。。。重复。

下图中的橙色和橙色的vector可以相同也可以不同,蓝色同理。
在这里插入图片描述

5、neural turing machine(神经图灵机)

neural turing machine不仅可以从memory中读出information,还可以修改memory。
在这里插入图片描述

一个memory(m…),是vector sequence,还会有一组初始的attention的weight(α…),根据vector和weight可以extracted information得到r0。r0和第一个时间点的input x1丢到f(f这个function可以自己设计,可以是DNN,LSTM,GRU…)
在这里插入图片描述

这个f就会output几个vector,这些vector就是去操控memory。k1就是去产生attention,k1和m计算得出α,再做softmax,就得到新的attention的distribution。新的attention和e1和a1就会去修改memory。e1的作用就是把原来memory里的值清空(e1范围是0-1),a1就是把新的值写到memory中去。经过上述步骤,得到下一个时间点的同一个位置的新的memory。
在这里插入图片描述

但其实k和m产生新的attention是很复杂的,有很多步骤。
在这里插入图片描述

六:tips for generation

(1)不要让attention过度关注于一个field,可以设置一个regularization term,使attention可以关注到其它的field。相当于加大其它component的权重 。
在这里插入图片描述

(2)

把condition和begin of sentence 丢进去,然后output一个distribution,颜色越深表示产生的几率越大,再把产生的作为下一个的input。。。这里有一个注意的是,在training的时候,放入下一个的input其实是reference,但在testing的时候,是没有reference的,并不知道output的是什么,可能输出的完全不同,这就是exposure bias
在这里插入图片描述

在training的时候犯了一个错,可能会导致testing的时候totally wrong(一步错,步步错)
在这里插入图片描述
train 的时候下一步输入是reference,test的时候输入是output,所以test容易错。

改进方法:在training的时候,如果output的值与reference不一样,也要把output的值放到下一个时间点的input,这样training和test就会是match的。但是这样在实际操作中是train不起来的。比如下图:在training的时候,与reference不同,假设你的gradient告诉你要使A上升,B上升,如果让A的值上升,它的output就会改变,即第二个时间点的input就会不一样,那它之前学的让B上升就没有意义了,可能反而会得到奇怪的结果。
在这里插入图片描述

在这里插入图片描述
改进方法plus:schedule sampling
一开始是看reference,train稳定后然后看output
就是用综合的方法来training network,现在我们纠结的点就是,training的时候,下一个时间点的input到底是从reference来还是model的output来,这里就用到了一个schedule sampling,给它们一个几率,随机选择。这样比总是看reference的结果要好。

在这里插入图片描述

七:beam search(集束搜索)

beam search是一个介于greedy search(贪心搜索)和暴力搜索之间的方法。第一个时间点都看,然后保留分数最高的两个,一直保留两个

贪心搜索:直接选择每个输出的最大概率

暴力搜索:枚举当前所有出现的情况,从而得到需要的情况;

beam search:在搜索的时候,设置beam size=2,就是每一次保留分数最高的两条路径,走到最后的时候,哪一条分数最高,就输出哪一条。如下图所示:一开始,可以选择A和B两条路径,左边的第一个A点有两条路径,右边第一个B点有两条路径,此时一共有四条路径,选出分数最高的两条,再依次往下走 。。。
在这里插入图片描述

example:beam size=3,保留最好的三个,meici假设一个句子丢进去只有三个单词和一个表示句末的符号(共4个),输出分数最高的三个X,Y,W,再分别将三个丢进去,比如将X丢进去得到X,Y。。。将Y丢进去得到W,Y。。。将W丢进去得到。。。这样就得到三组不同的distribution(一共4*3条路径),选出分数最高的三条放入。。。
在这里插入图片描述

为什么不把整个distribution都丢进去呢?而是丢reference。
高兴想笑和难过想哭的话。虽然一开始,高兴或者难过都可以,但高兴不可以接想哭

下图提出另一种idea:不用考虑input的东西到底从哪里来,直接把一整个output的东西放到input中,这样可能会有一个问题:比如下图右边所示:把高兴和难过都input进去,得到的可能就是“高兴想哭”,“难过想笑”,句子杂糅了。

在这里插入图片描述

八:object level vs component level

衡量好坏是根据句子不是词汇
在这里插入图片描述
object level是根据整个句子的好坏进行评价,比如下面的句子:the dog is is fast,本来它的loss值应该是很小了,但是实际上它的效果并不好,用object level可以使它的loss值变大。假设下图中的R是衡量两个句子之间的差异,但是不可以做gradient descent,而cross entropy是可以gradient descent的。

如何改进:Reinforcement learning(强化学习)
前面的r都是0,只有最后一个参数通过调整得到一个reward

在reinforcement learning中,一旦你take action了,就会改变你的observation。总而言之就是调整你的参数去maximize你的reward。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值