Lecture 4:自注意力机制(Self-Attention)

Lectured by HUNG-YI LEE (李宏毅)

Recorded by Yusheng zhao(yszhao0717@gmail.com


引入

例如👇)——作业一自然语言处理

作业二——声音讯息👇

作业三——图👇,每个节点都可以是一个向量,包含了人物的社交信息

分子也可以看作“Graph”:(这里化学元素每个原子用one-hot表示)



模型一:Sequence Labeling

即上文输入和输出数目一样多的情形。

注意到,对于单个输入vector要关注它的上下文信息。但是,以某个vector为中心,为了cover整个sequence,开一个一定尺寸的窗口输入全连接层中——参数巨多而且有可能overfitting。Self-attention被用来化解这个困难。

FC = Fully Connected Layer

Self-attention考虑到整个sequence的信息,有多少输入self-attention就有多少输出。模型中经常使用FC和Self-attention交替使用。Attention is all you need

Self-Attention的每个输出都考虑了所有的输入。以为例:

再把算出来的通过处理:

不一定要用Softmax,只要是激活函数,有人用Relu效果也很好。

上边谁的值最大,谁的那个Attention的分数最大,谁的那个就会dominant你抽出来的结果。举例说:上述中如果支计算出来的值最大,那么就最接近

相似度计算方法

在做attention的时候,我们需要计算query()和某个key()的分数(相似度),常用方法有:

总结

Self-attention就是一排input的vector得到相同数量的output的vector。计算中涉及到三个Transform矩阵是network的参数,是学习(learn)得来的,可以看作是带有权重的,以下认为是self-attention的矩阵运算

每一个self-attention层只有一个矩阵。

然后为了得到得分,计算内积👇

同理👇

不是唯一的选项,也可以用其他激活函数。

接下来👇

这一串操作全是矩阵运算,不用加循环体,方便编程。把上述过程可以精简为👇

称之为Attention Matrix。在整个Self-attention中输入是,输出是,其中又只有是未知的,需要透过训练集(training data)学习得到。

self-attention进阶版——Multi-head Self-attention

为什么我们需要多一点的head呢?——关系中蕴含着不同种类的关联性,以下 2-head为例:

我们需要两种不同的相关性,所以需要产生两种不同的head,都有两个,另外一个位置做相似处理。head 1和head 2相对独立,分开做,如上图,只和运算。

缺陷——self-attention少了关于位置(上下文)的资讯,因此一下介绍相关的完善方法。

Positional Encoding——把位置的咨询塞进self-attention

这篇论文讨论了Positonal Encoding的生成方法。

Many applications of Self-attetntion

Self-attention和CNN的比较

CNN可以看作是一种简化版的Self-attention,它只关注于receptive field;而self-attention则关注整张图像。self-attention看作是复杂化的CNN,用attention找到有关联性的pixel,仿佛是network自动learn且决定自己的“receptive field”(不再是人工划定)

On the Relationship between Self-Attention and Convolutional Layers用数学的方式严谨的证明CNN是self-attention的一个特例。self-attention设定特定的参数就可以做到和CNN一样的事情。

由于self-attention相较于CNN更加flexible,为了避免过拟合,需要更多的数据才能达到更好的效果。而CNN在训练资料较少时表现相对较好,因为随着数据增多,CNN并没有得到更多好处。

An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale这篇文章用self-attention处理影像,它把一张图像拆成个patch,把每个patch当作一个word处理。(当然这个数据集量一般研究者很难搜集到,这篇文章来自Google)

Conformer:一个CNN和Self-attention的混合体。

Self-attention和RNN的比较

RNN:Recurrent Neuroal Network(循环神经网络)和self-attention一样都是处理input是一个sequence的状况,在第一个RNN里扔进input第一个vector,然后output一个东西hidden layerFCprediction,对于第二个RNN需要input第一个吐出来的东西以及input第二个vector再output东西,以此类推,如下图👇

当然,RNN可以是双向的。两者不同的地方:对于RNN而言,距离较远的两个vector,如果前者不被memory一直记忆到输入处理后者的网络,两个向量很难产生关联性;而再attention里,输入向量是平行的,输出向量是平行的,只要match到,就可以产生任意两个向量的关联性。——天涯若比邻,aha

所以目前来看attention优于RNN,许多RNN架构都改为attention了。进一步了解两者关系:Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention,attention加一点东西就会变成RNN。

延展

Self-attention有非常多的变形:Long Range Arena: A Benchmark for Efficient TransformersEfficient Transformers: A Survey

由于self-attention最大的问题就是运算量大,所以未来相关的问题很多关于如何变形以减少运算量,提高运算速度。如何使attention越来越好,也是未来尚待研究的问题。