前言
1、Introduction
虽然 self-attention 的效果很好,但是它所需要的内存和算力会随序列呈平方增长。现在的方法大多是将上下文缩短或者划分为较小的序列,以限制这些序列再512的长度内。
为了解决这个问题,提出了 Longformer。
它包含局部 attention 和全局的 attention。
2、Related Work
过。
3、Model
为了解决这个问题,作者根据一个“attention pattern”来稀疏完整的自注意力矩阵
3.1、Attention Pattern
3.1.1 Sliding Window
滑动窗口 attention,就是围绕每个token采用固定大小的窗口计算局部的注意力,可以对照上面的图看。计算复杂度为 O ( n ∗ w ) O(n*w) O(n∗w),n 为句子长度,w 为窗口大小。
3.1.2 Dilated Sliding Window
跟上面的区别是,这个滑动窗口是有缝隙的,类似与CNN中的空洞卷积。在mutilhead attention中,作者设置允许一些没有空洞的head专注于局部上下文,而其他具有空洞的head专注于较长的上下文,最终发现这样的做法能提升整体的表现。
3.1.3 Global Attention
对于一些任务,比如说QA,需要通过question去找document里的答案,因此局部注意力在这种情况下就不适用。
作者就在预先选择的位置上添加了全局注意力。
global attention是视具体任务而定的,换个任务可能之前的做法就不适用了。
3.2
- 稀疏矩阵:所有存储都是用稀疏矩阵,如果值为0,都跳过计算,提高计算效率。
- 矩阵乘法:跳跃滑动窗口比较特殊,不能直接使用高效的矩阵乘法。作者自己实现了基于Cuda的高效算法。
- 训练技巧:阶段式的训练方式,序列长度和窗口大小逐步提高,窗口大小和序列长度增加一倍,并将学习率减半。这样可以加快训练速度。
4、 Autoregressive Language Modeling
过。