李宏毅机器学习笔记——Transformer
本章主要是介绍了Transformer(全自注意力网络):
1. 通过sequence-to-sequence模型中的RNN存在问题——不能并行计算,CNN替换可以解决一部分问题,但也存在缺陷。
2.由CNN缺陷引入了Self-Attention Layer来替代RNN的sequence-to-sequence模型——Transformer。
3.讲解Self-Attention的基本原理与具体过程。
4.讲解了一种叫做“多头”注意力(“multi-headed” attention)的机制,进一步完善了自注意力层。
5.为了解决在Self-Attention中词的顺序信息是不重要的问题,而提出Position Encoding操作。
6.重点是Transformer的整体架构,Transformer采用了Encoder-Decoder框架,以机器翻译为具体实例做了过程讲解;
7.Attention visualization(可视化)与Transformer的实际应用和变形。
一、Transformer的引入
一般的sequence-to-sequence模型是用RNN(单方向或者双向)来做,RNN输入是一串sequence,输出是另外一串sequence。RNN常被用于input是一个序列的情况,但是有一个问题——不容易平行化(并行化计算)。
例如下图中左边的模型就是RNN结构的sequence-to-sequence模型,(假设是单向RNN)想要求出b4就得先从a1输入开始一步一步往后求,直到求出b4,而不能对a1,a2,a3,a4一起计算。(如下图左侧!)
解决办法:为了能够进行并行计算,于是提出了使用CNN代替RNN的方法,如上图右侧基于CNN的sequence-to-sequence模型:
(1)将三个vector的内容串起来与filter内部的参数做内积,得到一个数值,将filter扫过sequence,产生一排不同的数值。
(2)会有多个不同(颜色不同)的filter,产生另外一排不同的数值。
用CNN也可以做到和RNN类似的效果:输入一个sequence,输出一个sequence,表面上CNN和RNN都可以有同样的输入输出。但是每个CNN只能考虑很有限的内容(三个vector),而RNN是考虑了整个句子再决定输出。
(其实CNN也可以考虑更长的信息,只要叠加多层CNN,上层的filter就可以考虑更加多的信息。)
使用CNN的优点:可以并行化计算,全部的filter可以同时进行计算。
使用CNN的缺陷:是必须叠加多层filter,才可以看到长时间的信息,如果要在第一层filter就要看到长时间的信息,那是无法做到的。
那要怎么解决使用CNN的缺陷呢?我们引入了 一个新的想法:Self-Attention!
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
二、Self-Attention
2.1 Self-Attention具体原理及过程
首先我们知道Transformer是用Self-Attention Layer来替代RNN的sequence-to-sequence模型。Transformer模型在质量上更优越,同时更具可并行性,并且需要的训练时间更少。
Self-Attention做的事情就是取代RNN原本要做的事情,Self-Attention Layer 与双向RNN有同样的能力,**每一个输出都是看过整个input sequence,**并且 b1,b2, b3, b4 是可以同时算出来的,可以并行计算!如下图:
Self-attention 的具体过程(Self-attention is all you need):
第一步:
输入sequence x1-x4,通过乘上一个W权重矩阵来得到向量a1~a4,然后丢入Self-attention层,每一个输入都分别乘上三个不同的transformation matrix(变换矩阵,是随机初始化的),产生三个不同的向量 q,k,v。其中vector q,k,v分别代表:(如下图)
q代表query,用来match其他单词;
k代表key,用来被query匹配的;
v代表要被