图片以及思想来源请参考论文 Lite Transformer with Long-Short Range Attention
瓶颈结构(bottleneck)是否真的有效
注意力机制被广泛应用在诸多领域,包括自然语言处理,图像处理和视频处理。它通过计算所有输入元素的点积来建模长短期关系。尽管非常有效,但是它庞大的计算量一直为人所诟病。
为了降低计算量,常用的方法是先通过一个线性投影层减少通道数 d d d,然后运用注意力机制,最后再增加通道数,也就是瓶颈结构。这种方法在减少计算量的同时,也降低了注意力层的信息提取能力,这在自然语言处理中更为糟糕,因为NLP中注意力层是主要的特征提取模块(在图像和视频处理中是卷积层)
典型的 Transformer 模块包含注意力层,后面加前馈层。注意力层的计算复杂度 O ( 4 N d 2 + N 2 d ) \mathcal{O}\left(4 N d^2+N^2 d\right) O(4Nd2+N2d),而前馈层计算复杂度 O ( 2 × 4 N d 2 ) \mathcal{O}\left(2 \times 4 N d^2\right) O(2×4Nd2),于是对于一个较短的序列 N N N,前馈层会消耗大量计算资源,然而前馈层并没有特征提取功能,因此瓶颈结构失效,它不仅达不到减少计算量的效果,反而还损害了特征提取能力。
长短期注意力(Long-Short Range Attention)
With a larger weight w i j w_{i j} wij (darker color), the i i i-th word in the source sentence pays more attention to the j j j-th word in the target sentence. And the attention maps typically have strong patterns: sparse and diagonal. They represent the relationships between some particular words: the sparse for the long-term information, and the diagonal for the correlation in small neighborhoods. We denote the former as “global” relationships and the latter as “local”.
LSRA 模块有两个分支,左分支提取全局特征,右分支提取局部特征。将输入在特征维上分解后(Embedding),分别送到两个分支,经过处理,再合成,这样可以将计算量减半。左分支是常规的注意力机制模块,特征通道维减半;右分支用卷积模块提取局部特征,并且使用线性层和深度可分离卷积进一步减少计算量。
论文中给的源代码相当臃肿,又兼本人学识有限,无法给出示例代码。