处理对象:Sequence Labeling

image-20211002145237875

指输入为一系列vector,而输出为每一个vector对应一个label,对于输入vector数量不定的情况,用FCNN明显是不合适的。

简介

self-attention对于每一个输入vector进行处理,使得输出的vector包含了整个context(sequence)的信息。

image-20211002150117342

self-attention会计算当前单元与其他输入单元的关联程度

image-20211002150432856

计算的方法很多,transformer里的self-attention计算的方法叫Dot-product, 就是将两个输入各自乘以一个权重矩阵后再做dot-product,所得的结果即为。这里的q指query,k指key,其作用大概就是英文所表达的意思,类似于搜索里的概念,我也没有搞很清楚。

image-20211002151059369

计算

image-20211002151354162

(attention scores)乘上用原本vector计算出的关键信息向量,得到对应的处理后的vector。

image-20211002152226571

比较关键的是,对于每个输入vector来说都是一样的,可以并行计算

image-20211002152550483 image-20211002152721661

后面的计算过程也可以用矩阵简化,做到并行,不多赘述。

全流程

image-20211002152930403

整个过程中,只有是要学习的参数。

改进

改进1:Multi-head Self-attention

image-20211002153414669

image-20211002153429774

大体上来说就是多算几组,head数需要依据具体问题自己调整,这个方法现在用的比较多

改进2:Positional Encoding

self-attention没有利用相对位置的信息

image-20211002154211210

利用一些人工规则为每一个输入向量计算出一个positional vector,这一方面的方法有待研究

Self-attention与CV

在CV上的应用

image-20211002154739021

与CNN的关系:CNN就是Self-attention的简化版

image-20211002154909761

image-20211002154954213

该paper用数学方式证明,CNN就是self-attention的子集,特定参数的self-attention就是CNN

image-20211002155346485

Self-attention弹性大,也需要更多data

对比RNN

image-20211002155759199

RNN看起来能保留位置信息,但是也有着难以考虑远距离vector的性质,而且无法做到并行处理,因此现在都用Self-attention而不用RNN了,也有一篇paper说明了self-attention加上一些东西就是RNN。