【笔记】A Tutorial of Transformers_复旦大学邱锡鹏报告
强推看原视频:https://www.bilibili.com/video/BV1sU4y1G7CN?from=search&%3Bamp%3Bamp%3Bseid=416604809063304846&%3Bamp%3Bamp%3Bspm_id_from=333.337.0.0
官方pdf:http://valser.org/webinar/slide/slides/%E7%9F%AD%E6%95%99%E7%A8%8B01/202106%20A%20Tutorial%20of%20Transformers-%E9%82%B1%E9%94%A1%E9%B9%8F.pdf
一、Self-attention & Transformer
Attention
原来主流的神经网络:CNN(卷积和、滑动窗口)、RNN(梯度消失问题)都只有局部特征,只能抽取出input sequence的local dependencies
怎么样才能拿到Long-term dependency呢?
答案就是全联接。但全联接的权重如果是固定的话,就无法处理句子不同的长度and插入某个词后句子的依赖关系发生变化,所以需要动态生成权重。
注意力机制(Attention Mechanism):
注意力机制包括两个步骤:
-
求得注意力分布:假如有一个查询向量q,我们想要知道输入的x和向量q之间有什么关系,就通过scoring函数来进行x和q之间的关系的打分(最简单的方法就是内积)。求出来的分数可能很大很小,我们把它通过一个softmax,进行一个归一化,得到注意力分布 α \alpha α,也可以叫attention matrix。
-
求得注意力:这个 α \alpha α就是对输入x的权重分布,我们将 α \alpha α和对应的x做一个加权和(也可以视为一个期望),就得到了attention。
Self-Attention
把这个attention机制应用在句子建模上:一个句子中,并不是所有的词都是有用的,我们希望可以得到对每个词来说,得到他们在句子中的注意力分布,从而得到这个词在句子中的注意力表示,这个就是self-attention。
Query-Key-Value Model
QKV model简直像拦路虎一样,一开始无法理解为什么要搞出这三个向量出来,各自有什么物理含义。
query就是上文中提到的查询向量,用查询向量去找到相应的索引(Key),把Q、K进行一个打分(这里仍然选择直接用内积计算Scoring function),再求一个softmax,这个就是我们要求的注意力分布。
但是softmax函数有一个特殊性质,如果某个数是非常大的话,它会使得大的更大、小的更小,分布是很sharp的,需要对其进行一个平滑,所以我们加上了一个缩放因子 D k \sqrt{D_k} Dk.
最终得到的这个注意力分布再乘以索引(Key)对应的值(Value),就是我们求得的注意力。
Multi-head Self-Attention
可以把它投射到不同的空间去计算他们注意力,在不同空间的QKV是独立的。这个有点像CNN里面的multi-channel,不同的映射在这里是用head来表示。
这种用查询向量去找对应值的方法,就类似于计算机中的寻址,read head / write head,所以就叫multi-head self-attention。
Transformer
Position-wise FFN也可以认为是窗口为1的CNN。
模型可以单独使用encoder(文本分类)、encoder-decoder(机器翻译)、单独只使用decoder(语言模型)。
模型复杂度
Transformer模型的问题在于长度过长(大于512)的时候,模型过于复杂,就无法处理了
二、Transformer的改进与变形
Transformer的改进
-
Model Efficiency
-
因为不善于处理长文档,从轻量化的attention去处理长文档(e.g. sparse attention variants)
-
分治法处理长文档,分成不同的segment,再通过某些方式综合起来(e.g. Recurrent and hierarchical mechanism)
-
-
Model Generalization
- 模型是一个很灵活的架构,几乎没有先验假设,所以需要大量数据
- 引入一些卷积、循环神经网络等来正则化
- pretraining on large-scale unlabeled data
-
Model Adaptation
- 自适应下游任务或修改