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

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

本节对应笔记:无

本节内容综述

  1. Transformer是一种 Seq2seq model with “Self-attention”,BERT就是基于这种技术;
  2. 一般想到处理序列,我们首先想到的就是RNN,但是RNN Hard to parallel,需要按序列输入;
  3. 于是有人提出,使用CNN来代替RNN,可以以一段作为输入,其输出是一段序列。此外,CNN can parallel,几段序列可以一起输入。
  4. 但是 CNN 的每个filter只能接收小部分的信息,也存在局限性;于是提出了 Transformer。用 self-attention 取代 RNN
  5. Attention is all you need. 其运算见小细节。此外,还通过矩阵运算,进一步讲解如何做“平行化”运算(可以用GPU加速)。
  6. 接下来,讲解了 Multi-head Self-attention,见[小细节](#Multi-head Self-attention)
  7. 对于 self-attention 而言,其输入顺序并不重要。因此,如何把“顺序”考虑进去呢?原始论文提及了Positional Encoding,人手动(不是靠学习得出)规定了一个 Positional Encoding ,参与运算。见小细节。
  8. Seq2seq with Attention,原来的RNN都可以用Self-Attention Layer 来替代。这里详细讲了 Transformer的模型具体细节。见小细节。

文章目录

  • 本节内容综述
  • 小细节
    • Self-attention
    • Multi-head Self-attention
    • Positional Encoding
    • Seq2seq with Attention
    • Result
    • Universal Transformer

小细节

Self-attention


如上图,在 self-attention layer 里,每一个 input 都乘上3个不同的 transformation (不同的 matrix),产生三个不同量:qqq,kkk和vvv。

得到了qqq,kkk和vvv后,就拿每个 query q 去对每个 key k 做 attention 。 如下图。

Scaled Dot-Product Attention:
α1,i=q1⋅ki/d\alpha_{1,i} = q^1 \cdot k^i / \sqrt{d}α1,i​=q1⋅ki/d​

如上图,接下来对 α\alphaα 做 softmax 处理,得到 α^\hat{\alpha}α^:
α^1,i=exp⁡(α1,i)/∑jexp⁡(α1,j)\hat{\alpha}_{1,i} = \exp{(\alpha_{1,i})}/\sum_{j}\exp (\alpha_{1,j})α^1,i​=exp(α1,i​)/j∑​exp(α1,j​)


如上,再通过如下运算,可得到考虑了全局信息的序列(中的第一个元素)。

b1=∑iα^1,ivib^1 = \sum_i \hat{\alpha}_{1,i}v^ib1=i∑​α^1,i​vi

如果让b1b^1b1只考虑前三个输入的影响,如何做呢?很简单,让其余的α^\hat{\alpha}α^在运算时为0即可。

b1,b2,..b_1,b_2,..b1​,b2​,..这些可以同时计算(Can be parallell computed)。

以下是矩阵部分。


如上,用大写符号QQQ、KKK、VVV、III代表变量叠加后的矩阵。

如上,可以将k⋅qk \cdot qk⋅q这个过程并行,放在一个矩阵中。

如上,可以通过矩阵运算得到 α\alphaα 的矩阵。

A=KTQA = K^T QA=KTQ

A→softmaxcolumn→A^A \rightarrow softmax \; column \rightarrow \hat{A}A→softmaxcolumn→A^

如上,再次进行矩阵运算,得到输出的序列。

O=VA^O = V \hat{A}O=VA^

因此,整个的 self-attention 就是一堆矩阵运算,可以用GPU来加速。

Multi-head Self-attention


如上,使用 2 个 head 进行举例。得到了两个 bib^ibi。


最后,可以再对两个 head 进行如上操作。

之所以用 Multi-head ,是希望每个 head 的关注点不同:有些看长时间的,有些看短期内的。

Positional Encoding

原论文中,介绍了将位置特征向量与aaa相加。这是会有问题:为什么不是concat,而是相加?

李老师提供了一种讲法,先讲 concat ,最后达到了与原论文相同的效果(转化回原论文的式子ei+aie^i+a^iei+ai)。


如上,轻易论证了二者相加与concat的同理性。

论文的WPW^PWP是人手动设定的,长得样子如下。

Seq2seq with Attention



如上,谷歌做了一个动图:

  • 首先是3层attention;
  • 接下来是decoding,不止会考虑到input,还会考虑之前输出的部分。

如上,一个典型的 Transformer 。

如上:

  • 处理前先加上位置编码;
  • 首先进行注意力层的处理;
  • 之后进行一个 Add ,就是将注意力层的输入加上对应的输出;
  • 然后经过 Layer Normalization ;
  • 右半部分中,输入为之前输出的值;
  • 其中 Masked 表示:在做 self-attention 时,会将自己的内容 attend 到已经产生的序列上。

Result


如上,仅仅将句子中的 tired 改成 wide ,it就可以自动地改变其“理解”,从 animal 改为指向了 street 。

如上,Multi-head起到了关注点不同的效果。

如上,用维基百科作为输出(句子长度长达10e2到10e6),神经网络还能不混乱,足以见到 Transformer 之强。

Universal Transformer

在深度上,类似 RNN ,不断使用同一 transformer 。

此外,还有人做了在CV上的拓展。

【李宏毅2020 ML/DL】P23 Transformer | Self-attention, Multi-head Self-attention相关推荐

  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】P34 More about explainable AI | Attribution, Heatmap, explainable model

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

  9. 【李宏毅2020 ML/DL】P56 Transformer and its variant | New Architecture

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

最新文章

  1. 怎样才能高效的在家办公或者远程办公呢?
  2. 信道编码之编码理论依据
  3. python画五角星-python画五角星和六角星程序 | 学步园
  4. 途虎养车APP--参数分析
  5. VMware vSphere虚拟化-VMware ESXi 5.5组件安装过程记录
  6. GDCM:对dicom文件的简单Scanner的测试程序
  7. python输入流和输出流_python读写gbk、utf-8等输入输出流
  8. java 主方法 this_java main 方法怎么创建
  9. linux终端炫酷命令,你不得不知道11个炫酷的 Linux 终端命令
  10. mysql 升序_mysql 的 查找 与 排序
  11. Docker拉取Redis镜像安装运行
  12. 在 Windows Server 2008 R2 下用 Visual Studio 2010 编译 Chrome 与 WebKit Chromium Port
  13. php-fpm配置文件的优化
  14. fotify php审计,Fortify下载-代码审计工具Fortify SCA下载v20.1.1 最新版-西西软件下载...
  15. Selenium核心原理及浏览器实战
  16. 学习笔记:修改网吧计费系统
  17. 在html中怎样加表格斜线表头,如何在Word表格中插入斜线
  18. Python之GUI编程 实现界面化的词云图生成器.exe
  19. 湖北武汉劳务员证书劳务人员实名制管理的策略建筑七大员培训
  20. 案例三:小明左右手分别拿两张纸牌:黑桃10和红心8,现在交换手中的牌。编写一个程序模拟这一个过程:两个整数分别保存在两个变量中,将这两个变量的值互换,并输出互换后的结果。...

热门文章

  1. 【Oracle】使用logmnr工具挖掘日志
  2. C语言异常处理机制——为您的C程序添加异常处理
  3. Kubernetes master无法加入etcd 集群解决方法
  4. Spring Cloud 异常处理
  5. IDEA出现Module ** must not contain source root **. The root already belongs to module **这类错误的解决方法
  6. WebSocket跨域问题解决
  7. Rails I18n验证弃用警告
  8. 在Ruby on Rails中对nil v。空v。空白的简要解释
  9. 如何删除尾随换行符?
  10. win11亮度调节不见了怎么办 windows亮度调节不见了的解决方法