我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。

已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-notes

本节内容综述

  1. 本节内容将介绍:GenerationAttentionTips for GenerationPointer Network
  2. 第一步是 Generation ,具体来讲,是如何产生一个 structured object 。提到了 Seq 2 seq
  3. 接下来的部分是 Attention 。提及了图片生成句子等有趣技术。
  4. 课程过半,进入 Tips for Generation 部分。提到了许多新技术,或者说容易遇到的问题、偏差,并由此介绍了相应的解决方案。
  5. 接下是 Pointer Network。Pointer Network可以有效利用输入中的人名地名等等。
  6. 最后穿插一点内容,RNN的变体,Recursive Network。

文章目录

  • 本节内容综述
  • 小细节
    • Generation
      • Conditional Generation
    • Attention
      • Speech Recognition
      • Image Caption Generation
      • Memory Network
      • Neural Turing Machine
    • Tips for Generation
      • Good & Bad Attention
      • Mismatch between Train and Test
        • Modifying Training Process?
        • Scheduled Sampling
      • Beam Search
      • Object level v.s. Component level
    • Pointer Network
      • Applications - Summarization
      • Applications - Machine Translation
    • Recursive Network
      • Application: Sentiment Analysis
      • Recursive Model
      • Recursive Neural Tensor Network
      • Experiment
      • Matrix-Vector Recursive Network
      • Tree LSTM
      • More Application

小细节

Generation


如上,我们如何让机器产生一段句子呢?这个我们已经清楚了。使用 RNN 把 word 或者说 character 一个一个产生出来。

此外,如上,还可以把图形拆分成像素,使用 RNN 生成。

但是,如上,我们应该让就近的像素对生成的像素进行影响,而非按行来。可以进行 filter + 3维记忆空间 的方法。

Conditional Generation


但是,使用RNN存在一些问题,如上图,我们希望根据不同情况给出信息。

如上,一般来讲,RNN产生的话是随机的。我们可以对图片进行处理,比如用CNN获得一个向量,然后输入RNN中。可以在每个时间点都把图片输入,防止机器“忘记”自己在说什么。

对于机器翻译,同理。如上,先在Encoder中,对句子的每个成分按照时间点挨个输入。这样最后得到的向量,就包含了句子的全部信息。将这个输入到Decoder,就可以得到翻译。

这就是 Seq2seq

此外,在聊天机器人中,我们需要让之前的信息也输入到模型中,防止说重复的内容。

Attention


如上,我们将 z0z^0z0 与 各个hhh 进行 match 函数计算,得到各个 hhh 对应的 α\alphaα 。这个 match 函数中的参数也是训练出来。

之后,经过一个 softmax ,然后求和得到 ccc ,此时,ccc 就是Decoder input 。此外,可以得到心得 zzz 。

之后继续进行该内容。

Speech Recognition


如上,颜色深度代表 match score 。

Image Caption Generation

如上,可以把每个区域的向量与$z_0$进行运算得到,之后,进行 weighted sum,再交给 Decoder ,以此得到输出。

如上,在产生划线词汇是,其Attention也是集中在图片的相应位置的。

此外,还有些失败的地方,我们可以通过 Attention 进行分析,为什么出错了。

此外,机器还可以看视频说话。如上。

“我们的作业二就是做这个。”很有趣。

Memory Network


如上,也可以进行利用注意力做问答。

此外,Memory Network 也有更复杂的版本。

如上,有两组vector分别为xxx与hhh来表示Document,qqq与xxx做match得到α\alphaα,但是Extracted Information时,使用hhh与α\alphaα进行结合。

而得到的新向量,可以与 q 进行运算,表示机器在反复“思考”。这个过程叫做 Hopping 。

Neural Turing Machine


Neural Turing Machine 不仅可以读记忆,还可以改变记忆。

如上,实际上,k与memory产生四个新值其实有5个步骤。如下。

李老师:“我相信你一定没有兴趣知道他,所以我们把他跳过。”

如上,eee与aaa用于修改旧的 memory 。

总的计算框架如上。

Tips for Generation

Good & Bad Attention


如上,一个Bad Attention就是,可能α\alphaα过于不均衡,导致机器只注意到了视频的主体。

我们可以用一个正则化的方法,让各个输入的部分都有近似的 attention weight 。如上图中的公式(这只是最简单的一种方法)。

Mismatch between Train and Test

如上,每次你的 RNN 的 input 其实来自于“正确的解答”。但这是训练时的状态

如上,在实际使用时,在每次的 input 都来自自己上次的解答。

这将带来Exposure Bias

如上,如果机器没有在一开始时正确地选择“A”,这将让接下来所有的生成都受影响。

Modifying Training Process?


那么,在训练时,就将 input 改为“自己生成”的答案呢?

但实际上,这将让我们的网络十分难以训练。

Scheduled Sampling


如上,我们用综合的想法来训练。

在输入时,我们随机地选择将 model输出 或者是 训练数据 进行作为输出。

要注意的是,我们在训练了一定步骤后,才考虑把 model输出 作为输入。随机选择的几率如上图中的表。

如上图,如果使用Scheduled Sampling,效果好很多。

Beam Search

如上,如果我们“贪婪地”每次都选择最好的那个输出,但是其最后的总的概率值(累成起来),未必是最高的。如上图中,绿色分支的分数是要高于粉色分数的。

因此,提出 Beam Search 。

如上,我们可以只选分数最高的 2 个,探索几步,看哪个分高。

如上,发现X、Y、W分数都高,因此,都在下一段时间输入。然后取分数最高的那个,最为下一时间的输入。

Object level v.s. Component level


如上,在有细微错误时,其与正确答案的Loss值差别并不大。

因此,我们考虑使用object-level criterion(假设有这样一个评估函数RRR,评估句子语法),可行吗?

不可行,因为很可能无法做微分。

可以使用强化学习的方法。

把 generation 这件事,当成 reinforcement learning 来做。

在结束后,通过RRR函数判断奖励值。


如上,MIXER是使用了强化学习与传统方法相结合的方法。

Pointer Network


如图,Pointer Network中可以解决如同的演算的内容。

如何转换为 Seq 2 seq 的模型呢?
如上,如果只是用 Encoder-Decoder 当然是不 work 的。当然,如果加入注意力是可以的。

如上,attention做了一点改善,不用 softmax 层,而使用 argmax 筛选输出。

这种方法,可以做到 100 个点规模都正确。

Applications - Summarization

如上,使用 Pointer Network 可以有效利用文章中的人名地名,而且将文章中的词接起来一般来讲就可以得到 Summary 。

Applications - Machine Translation


此外,还可以用在机器翻译上。

Recursive Network

Application: Sentiment Analysis


如上,对于Recursive,我们需要决定各个输入之间的关系。将某些输入值放在一起,输入到模型中。

Recursive Model


如上,我们可以考虑用文法结构的顺序进行输入。

这个 f ,不能用一个简单的函数。因此需要一个 network。


如上,对于 g 与 f 函数,我们都要训练。

Recursive Neural Tensor Network


如上,作为 f 的输入,将两个输入简单的拼接并不是首选。我们考虑线性代数的输入方法(上面的矩阵运算计算了两次)。

Experiment


如上,有一些实验,进行了检验。

Matrix-Vector Recursive Network

尽管这篇文献的表现较差,但是李老师介绍了其中思想。

如上,我们“玄学地”将输入分离,分为aaa与AAA。之后交叉地进行相乘。

Tree LSTM

如上,基于 Recursive ,可以构建一个 Tree LSTM 。

More Application

比如 Sentence relatedness 。

【李宏毅2020 ML/DL】P53-55 Conditional Generation by RNN Attention Pointer Network Recursive相关推荐

  1. 【李宏毅2020 ML/DL】P1 introduction

    [李宏毅2020 ML/DL]P1 introduction 本节主要介绍了 DL 的15个作业 英文大意 Regression: 回归分析 Classification: 分类 RNN: 循环神经网 ...

  2. 【李宏毅2020 ML/DL】P86-87 More about Domain Adaptation

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 本节课由助教 Chao Brian 讲解. 首先讲解些领域适配的基础内容,包括名词.定义等. 接 ...

  3. 【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  4. 【李宏毅2020 ML/DL】P58 Unsupervised Learning - Neighbor Embedding | LLE, t-SNE

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  5. 【李宏毅2020 ML/DL】P15 Why Deep-

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...

  6. 【李宏毅2020 ML/DL】P14 Tips for training DNN | 激活函数、Maxout、正则、剪枝 Dropout

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...

  7. 李宏毅svm_李宏毅2020 ML/DL补充Structured Learning Structured SVM

    李宏毅2020 ML/DL补充Structured Learning Structured SVM [李宏毅2020 ML/DL]补充:Structured Learning: Structured ...

  8. 【李宏毅2020 ML/DL】P76 Generative Adversarial Network | Unsupervised Conditional Generation

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 这是我的李宏毅老师 GAN 系列第3篇笔记,GAN 系列: 1:Basic Idea 2:Conditiona ...

  9. 【李宏毅2020 ML/DL】P82 Generative Adversarial Network | Improving Sequence Generation by GAN

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 这是我的李宏毅老师 GAN 系列第9篇笔记,GAN 系列: 1:Basic Idea 2:Conditiona ...

最新文章

  1. fread读结构体返回值是0无错误_嵌入式C编程之错误处理(附代码例子)!
  2. Sonar 质量扫描的输出日志--对应源码的跟踪(一){源码解析sonar-scanner-maven3.2}
  3. 《Python Cookbook 3rd》笔记(1.19):转换并同时计算数据
  4. dedecms 漏洞_dedescan一款织梦漏洞扫描器
  5. caioj1495: [视频]基于连通性状态压缩的动态规划问题:Formula 2
  6. comsol分析时总位移代表什么_基于COMSOL的气动软体执行器仿真
  7. python调用hive与java调用区别_python3.6.5基于kerberos认证的hive和hdfs连接调用方式
  8. python题目-奇偶数调用函数
  9. 该死的clear 根本不释放内存,怎么才能释放泛型LIST的内存?
  10. fabio docker
  11. OGG-01008 Extract displays Discarding bad record (discard recs=1) when using filter or where clause
  12. matlab sskf,[转载]fortran语言常用函数
  13. 「找一找」考你眼力的时候到了!
  14. HDU 2047 [阿牛的EOF牛肉串] 递推
  15. 2020中国高校计算机大赛网络技术挑战赛,【科研竞赛】2020年度“中国高校计算机大赛-网络技术挑战赛”...
  16. 各个段位 毕业要准备几篇论文,毕业太难了。
  17. PHP开发微信公众号,实现上传永久素材
  18. OpenMv学习总结
  19. PS教程---如何绘制噪点插画
  20. 技巧分享|教你如何编写桌面快捷方式文件

热门文章

  1. 成绩单表格html,【Web前端HTML5CSS3】15-表格
  2. R语言-异常数据处理3
  3. VS 2005部署应用程序提示“应用程序无法正常启动( 0x0150002)” 解决方案
  4. nginx 反向代理时丢失端口的解决方案(转)
  5. FutureTask的get()方法之异常处理
  6. 解决 sublime text3 运行python文件无法input的问题
  7. Spring MVC异常处理详解
  8. RabbitMQ的工作模式Routing 路由,test测试代
  9. python中关于命名的例子_Python()-类命名空间和对象/实例命名空间
  10. Android:使用SharedPreferences进行数据存储