十八、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的总结,如有侵权会立马删除。

机器学习之十一(读书笔记)相关推荐

  1. 机器学习之六(读书笔记)

    RNN LSTM Attention-based Model 十一.Recurrent Neural Network(RNN)(循环神经网络) 1.Slot Filling   智慧客服,订票系统,需 ...

  2. python自学教程读书导图-python机器学习基础教程读书笔记八(全书总结)

    全书总结 现在你知道了如何使用重要的机器学习算法进行监督学习和无监督学习,这让你可以解 决很多种机器学习问题.在带你探索机器学习提供的所有可能性之前,我们希望给你一 些最后的建议.一些额外的资源,并提 ...

  3. Python《机器学习实战》读书笔记(三)——决策树

    第三章 决策树 引言 3-1 决策树的构造 3-1-1 信息增益 3-1-2 划分数据集 3-1-3 递归构建决策树 3-2 在Python中使用Matplotlib注解绘制树形图 3-2-1 Mat ...

  4. Python《机器学习实战》读书笔记(四)——朴素贝叶斯

    第四章 基于概率论的分类方法朴素贝叶斯 4-1 基于贝叶斯决策理论的分类方法 4-2 条件概率 4-3 使用条件概率来分类 4-4 使用朴素贝叶斯进行文档分类 4-5 使用Python进行文本分类 4 ...

  5. 机器学习之八(读书笔记)

    Explainable Machine Learning Local Explanation Global Explanation LIME Decision Tree 十四.Explainable ...

  6. 《机器学习在线 解析阿里云机器学习平台》读书笔记

    原文 最近读了阿里的<大数据之路-阿里巴巴大数据实践>,对于其机器学习平台也蛮感兴趣,正好阿里出了本新书<解析阿里云机器学习平台>,顺便读了下,感触也不少,结合最近团队机器学习 ...

  7. 《机器学习实战》读书笔记(第一部分:分类)

    参考<机器学习实战> 一.KNN 原理: 步骤: 数据处理归一化(x-min)/(max-min) 计算已知类别数据集中的点与当前点之间的距离 选取与当前点距离最小的k个点 确定k个点所在 ...

  8. 《机器学习实战》学习笔记(八):预测数值型数据 - 回归

    欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...

  9. 《机器学习实战》学习笔记(四):基于概率论的分类方法 - 朴素贝叶斯

    欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...

  10. 《机器学习实战》学习笔记(三):决策树

    欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...

最新文章

  1. 如何减少WIN7响应时间
  2. Swift4 - 动态计算UITableView中tableHeaderView的高度 - 获取子控件高度和宽度
  3. mysql 选择前4个_mysql从4个表中选择
  4. tensorflow分类的loss函数_tensorflow 分类损失函数使用小记
  5. C#LeetCode刷题之#520-检测大写字母(Detect Capital)
  6. Java集合总结大全--史上最强
  7. matlab.什么意思,MATLAB是什么意思? matlab是什么软件?
  8. 数据分析学习笔记—matplotlib折线图、条形图、直方图、饼状图基础绘制
  9. Linux上 MongoDB 实现远程连接并设置账号密码
  10. 如何在 iPhone 和 iPad 上使用与你共享?
  11. centos是什么操作系统
  12. win10运行程序提示“为了对电脑进行保护,已经阻止此应用” 解决方法
  13. php的seeder是什么,Laravel框架使用Seeder实现自动填充数据功能
  14. TAPD关联Jenkins
  15. Google 全国 地图 纠偏数据 偏移数据 超高精度(0.002) (纠偏、偏移、地图、数据)
  16. 安防4G摄像头视频流媒体服务器EasyNVR关于视频集成自我展示web端嵌入视频广场的流程
  17. windows下vscode + code runner + cmake + msbuild.exe搭建C++快速编译环境
  18. 广州签发全国首张微信身份证,AI成主要证明技术
  19. 【论文阅读】一些研究想法
  20. 观沈向洋博士论文阅读技巧有感

热门文章

  1. 推荐几个程序员Mac m1max芯片笔记本软件
  2. Android集成环信IM,实现聊天置顶功能
  3. 天猫精灵 python 控制_树莓派4B小爱同学、天猫精灵、智能音箱、百度语音极速版、百度语音标准版、语音识别、语音合成终极方案...
  4. php函数param太多,关于php:在非对象上调用成员函数bind_param()
  5. 笔试题--移动手机号短号
  6. CF 1300.B——Assigning to Classes【思维】
  7. NoSQL Redis
  8. php中说的接口是什么意思,micin是什么接口
  9. Mac获取系统版本、机型
  10. 一种工控蜜罐识别与反识别技术研究与应用实践