【李宏毅2020 ML/DL】P23 Transformer | Self-attention, Multi-head Self-attention
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-notes
本节对应笔记:无
本节内容综述
- Transformer是一种 Seq2seq model with “Self-attention”,BERT就是基于这种技术;
- 一般想到处理序列,我们首先想到的就是RNN,但是RNN
Hard to parallel
,需要按序列输入; - 于是有人提出,使用CNN来代替RNN,可以以一段作为输入,其输出是一段序列。此外,CNN
can parallel
,几段序列可以一起输入。 - 但是 CNN 的每个filter只能接收小部分的信息,也存在局限性;于是提出了
Transformer
。用self-attention
取代RNN
。 Attention is all you need.
其运算见小细节。此外,还通过矩阵运算,进一步讲解如何做“平行化”运算(可以用GPU加速)。- 接下来,讲解了 Multi-head Self-attention,见[小细节](#Multi-head Self-attention)
- 对于 self-attention 而言,其输入顺序并不重要。因此,如何把“顺序”考虑进去呢?原始论文提及了
Positional Encoding
,人手动(不是靠学习得出)规定了一个 Positional Encoding ,参与运算。见小细节。 - 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,ivi
如果让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相关推荐
- 【李宏毅2020 ML/DL】P1 introduction
[李宏毅2020 ML/DL]P1 introduction 本节主要介绍了 DL 的15个作业 英文大意 Regression: 回归分析 Classification: 分类 RNN: 循环神经网 ...
- 【李宏毅2020 ML/DL】P86-87 More about Domain Adaptation
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 本节课由助教 Chao Brian 讲解. 首先讲解些领域适配的基础内容,包括名词.定义等. 接 ...
- 【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...
- 【李宏毅2020 ML/DL】P58 Unsupervised Learning - Neighbor Embedding | LLE, t-SNE
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...
- 【李宏毅2020 ML/DL】P15 Why Deep-
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...
- 【李宏毅2020 ML/DL】P14 Tips for training DNN | 激活函数、Maxout、正则、剪枝 Dropout
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...
- 李宏毅svm_李宏毅2020 ML/DL补充Structured Learning Structured SVM
李宏毅2020 ML/DL补充Structured Learning Structured SVM [李宏毅2020 ML/DL]补充:Structured Learning: Structured ...
- 【李宏毅2020 ML/DL】P34 More about explainable AI | Attribution, Heatmap, explainable model
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...
- 【李宏毅2020 ML/DL】P56 Transformer and its variant | New Architecture
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...
最新文章
- 怎样才能高效的在家办公或者远程办公呢?
- 信道编码之编码理论依据
- python画五角星-python画五角星和六角星程序 | 学步园
- 途虎养车APP--参数分析
- VMware vSphere虚拟化-VMware ESXi 5.5组件安装过程记录
- GDCM:对dicom文件的简单Scanner的测试程序
- python输入流和输出流_python读写gbk、utf-8等输入输出流
- java 主方法 this_java main 方法怎么创建
- linux终端炫酷命令,你不得不知道11个炫酷的 Linux 终端命令
- mysql 升序_mysql 的 查找 与 排序
- Docker拉取Redis镜像安装运行
- 在 Windows Server 2008 R2 下用 Visual Studio 2010 编译 Chrome 与 WebKit Chromium Port
- php-fpm配置文件的优化
- fotify php审计,Fortify下载-代码审计工具Fortify SCA下载v20.1.1 最新版-西西软件下载...
- Selenium核心原理及浏览器实战
- 学习笔记:修改网吧计费系统
- 在html中怎样加表格斜线表头,如何在Word表格中插入斜线
- Python之GUI编程 实现界面化的词云图生成器.exe
- 湖北武汉劳务员证书劳务人员实名制管理的策略建筑七大员培训
- 案例三:小明左右手分别拿两张纸牌:黑桃10和红心8,现在交换手中的牌。编写一个程序模拟这一个过程:两个整数分别保存在两个变量中,将这两个变量的值互换,并输出互换后的结果。...
热门文章
- 【Oracle】使用logmnr工具挖掘日志
- C语言异常处理机制——为您的C程序添加异常处理
- Kubernetes master无法加入etcd 集群解决方法
- Spring Cloud 异常处理
- IDEA出现Module ** must not contain source root **. The root already belongs to module **这类错误的解决方法
- WebSocket跨域问题解决
- Rails I18n验证弃用警告
- 在Ruby on Rails中对nil v。空v。空白的简要解释
- 如何删除尾随换行符?
- win11亮度调节不见了怎么办 windows亮度调节不见了的解决方法