机器学习之十一(读书笔记)

该篇博客详细介绍了如何利用RNN进行条件生成,包括句子和图像的生成,并探讨了RNN在处理序列到序列学习中的作用。此外,还讨论了注意力机制(Attention)在机器翻译、图像描述生成和记忆网络中的应用,以及在生成任务中的技巧,如Scheduled Sampling和Beam Search。最后,提到了评估生成模型时面临的挑战和强化学习的潜在解决方案。
摘要由CSDN通过智能技术生成

十八、Conditional Generation by RNN & Attention

  • Generation
  • Attention
  • Tips for Generation
  • Pointer Network
      

(一)Generation
  产生有structure的object,假设可以拆成很多component,使用RNN把这个component一个一个产生出来。
  举例来说,怎么让machine产生句子,一个句子由word或者character组成,使用RNN把character或word一个一个产生出来。
  一开始丢一个token到RNN,就会得到一个character的distribution,从这个character distribution做sample,接下来再把这个sample出来的character丢到RNN,RNN就会告诉你要接的character的distribution,再做sample,一直反复…
在这里插入图片描述
  不仅仅是文章可以generate,image也可以,image是由pixel所构成,用RNN来generate pixel,把一张image看成sentence,下图可以看成由9个“词汇”组成的sentence:
在这里插入图片描述
  同以上词汇的RNN的train的过程,image的generate的过程如下:
在这里插入图片描述
  如果产生pixel的过程如下图,那就没有考虑pixel和pixel之间的几何关系:
在这里插入图片描述
  考虑pixel和pixel之间的几何关系的过程如下图:
在这里插入图片描述
  怎么实现这个几何关系?input3组数据,output3组数据,详情可看原视频:
在这里插入图片描述
  光是使用RNN来generate是不够的,machine产生句子必须根据某些condition。
  举例来说,我们怎么让machine看一个image就说一句话来说明这个image,即希望这个image可以影响RNN所产生的句子,做法:把image通过一个实现train好的CNN,然后把它变成一个vector,然后把这个vector当作RNN的input,这样RNN产生output时就会被image影响。如果担心,只是在第一个时间点把vector丢进去影响不够大,所以就在所有时间点都丢这个vector,RNN就可以反复复习。
在这里插入图片描述
  同样的方法可以做很多其它的事情,比如机器翻译:现在有一个generator,它可以拿来产生英文的句子,但是现在的中文“机器学习”和这个generator是没有关系的,要把中文的input和这个generator牵扯在一起,做法:把中文的“机器学习”表示成一个vector,然后就可以和之前的图片处理一样。变成vector的方法:把中文的character一个一个丢到一个RNN里面,把RNN最后一个时间点的output抽出来,这个output可能就包含了这个句子的所有的information。
在这里插入图片描述
  前面把input变成一个vector,然后丢给generator这个事情叫做Encoder(编码器);后面根据code产生句子的事情称为Decoder(译码器)。
  Encoder和Decoder可以Jointly train(联合训练)这件事情称为Sequence-to-sequence learning。
  

(二)Attention
  attention:动态的conditional generation。
  刚才说过encoder的output在每一个时间点都接给decoder,但是可以做得更好,我们可以让这个decoder在每一个时间点看到的information都不一样,这样的好处是encoder可能没办法把input整个sentence变成一个code,如果input的information没办法用一个vector来表示,每次decoder看到的都是一样的,那就没办法得到好的结果。另一个好处是可以让decoder考虑需要的information。
在这里插入图片描述
  拿机器翻译作为例子实现Attention:
1、
  Attention-based model
  input一个句子,这个句子会用RNN做一番处理,每个时间点每个词汇都可以用一个vector来表示,接下来有一个初始的vector z 0 z_0 z0,把它当作network的参数,把 h 1 h^1 h1(如下图)和 z 0 z_0 z0丢进match函数得到 α 0 1 \alpha ^1_0 α01(上标1是指跟 h 1 h^1 h1算它们有多match,下标0是指在时间等于0,也就是初始的时候去计算match的程度):
在这里插入图片描述
  match可以自己设计:
在这里插入图片描述
  使用 z 0 z^0 z0对每一个 h h h算一个match的程度的分数,再做一个softmax,得到四个值,将这四个值分别乘上 h 1 h^1 h1 h 4 h^4 h4得到 c 0 c^0 c0
在这里插入图片描述
  接下来将 c 0 c^0 c0当作decoder的input,通过RNN得到 z 1 z^1 z1,再用 z 1 z^1 z1再去算一次match的分数:
在这里插入图片描述
  这个process一直下去直到machine generator句点的时候才停止:
在这里插入图片描述
  也可以用在speech recognition上。
  
2、
  Image Caption Generation:怎么加上attention-based model–用一组vector描述image,把每一个filter的output取出来得到一组vector,a vector for each region:
在这里插入图片描述
  把6个vector做weighted sum,得到一个新的vector再把这个vector丢尽RNN的decoder产生第一个word:
在这里插入图片描述
  其它步骤如上机器翻译的例子:
在这里插入图片描述
  也可以从一段影片里面产生一段说明。
在这里插入图片描述
  
3、
  memory network:
  举例:有一个document,一个query和一个answer,document是由很多句子组成的,每个句子用一个vector来描述,query也可以用一个vector q q q来描述,接下来用 q q q对document的每一个句子去算match分数,然后把得到的match分数与每个 x x x做weighted sum,然后把结果丢到DNN里,最后得到你的answer。
在这里插入图片描述
  memory network的另一个版本,算match的部分和抽information的部分不一定需要一样。所以可以把document里面的句子变成两组不同的vector:
在这里插入图片描述
  hopping:一个document用两组vector来表示,现在有一个query丢进来,对下面的vector做compute attention,对上面的vector做extract information,接下来把抽出来的information和query加起来;接下来document会再用两组vector表示,再去算一次compute attention和extract information,再加起来,丢到DNN中得到最后的答案。
在这里插入图片描述
  
4、
  Neural Turing Machine:首先有一组memory,这些memory就是一个vector sequence,然后会有一组初始的attention的weight,根据这个memory vector和初始的weight可以train出一个information r 0 r^0 r0,然后把 r 0 r^0 r0丢给另外一个network,再加上第一个时间点的input,你会output几个vector,这几个vector就是去操控这些memory,它们会决定新的attention长什么样子:
在这里插入图片描述
  产生attention:以上得到的output k 1 k^1 k1的作用就是产生attention, k k k和原来的 m m m做预先计算得到四个match分数,再经过softmax,得到新的attention的distribution:
在这里插入图片描述
  以上得到的output e 1 e^1 e1 a 1 a^1 a1 e 1 e^1 e1的作用是把原来memory里的值清空, a 1 a^1 a1的作用是把新的值写到memory里面去。
  把原来的memory里的vector通过以下转换以后得到新的memory vector:
在这里插入图片描述
  接下来根据以上得到的memory vector得到 r 1 r^1 r1,再加上新的input x 2 x^2 x2输入network中,就可以得到新的output,新的output会去操控 match distribution和memory…如果network f f f是RNN,那么前一个时间点的 f f f不止会output那些操控memory的vector,还会output另外一个vector h 1 h^1 h1,丢到下一个 f f f里去:
在这里插入图片描述
  
(三)Tips for Generation
  举例:假设要做video的caption generation(字幕生成),给你的machine看一段如下图所示的video,如果用的是attention-based model,machine会在每个时间点会给这个video里面的每张image一个attention, α t i \alpha _t^i αti代表attention,上标代表component,下标代表时间点,一开始会在第一个时间点对以下四个画面产生一个attention,然后产生word 1,然后同一个时间点反复进行下去,第二个时间点在产生attention,在产生word 2 ,…
在这里插入图片描述
  不好的attention:
在这里插入图片描述
  一个好的attention应该要每个input component的attention weight大致相同。比如,Regularization term:
在这里插入图片描述
  

1、mismatch between Train and Test
  Training:
在这里插入图片描述

  Generation:
在这里插入图片描述
  training和testing的不同:testing是你的input是model前一个时间点自己的output;training时你每个时间点的input是真正的答案。–这件事情叫做Exposure Bias。
  
  Exposure Bias会产生什么样的影响?
在这里插入图片描述
  修改training的process:
  使用Scheduled Sampling(定时采样)的方法:到底下一个时间点的input应该是从model的output来,还是reference来?这个方法是说给一个几率,决定哪个是input,所以有时候是model的output,有时候是reference的。
在这里插入图片描述
  
2、Beam Search(波束搜索)
  在每一个时间点,都只keep分数最高的某几条path:
在这里插入图片描述
  对比以下不能check所有可能paths的情况(greedy search),Beam Search能保证找出分数最高的路径:
在这里插入图片描述
  Beam Search的实例:
在这里插入图片描述
  
3、Object level v.s. Component level
  现在要generate是一个sentence而不是单一的word,考量generate的结果好不好的时候应该看一整个句子。
  举例:
在这里插入图片描述
  会发现文法不对的句子和文法正确的句子的差距很小,只能拼死硬train,那是因为在training的时候minimize的对象是一个word cross-entropy。
  根据整个句子来评分:
在这里插入图片描述
  但是R可以做gradient descent吗?不可以。
  解决:用Reinforcement learning(强化学习)的方法来train generator。
在这里插入图片描述

  
  


本文是对blibli上李宏毅机器学习2020的总结,如有侵权会立马删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值