1. 文章简介
这篇文章算是我司最近的一篇力作吧,即DeepNet, Foundation Transformer之后,大佬们终于还是盯上了attention layer,毕竟attention层 O ( N 2 ) O(N^2) O(N2)的计算复杂度一直是制约Transformer往长文本发展的主要原因。
想当年,像是线性化Attention的Linformer,或者以更直观的稀疏化attention的Reformer,亦或者结合局部与全局attention的Longformer,或者类似金字塔型的将长文本拆分为短文本然后各自做attention然后逐层往上的方式(不过这篇具体文章给忘了),总之当年零零碎碎有不少关于优化attention层计算量,使之可以拓展到长文本上的工作。
不过可惜的是,虽然当时大家都觉得这个方向很重要,结果以GPT3还有PALM等为代表的大模型反而从工程上发力,直接强行扩展文本长度,从头上干掉了这个问题……
这两年,感觉这方面的工作已经比较少听到了,不过我司的大佬们似乎还是重新抓出了这个方向,然后像是DeepNet那样直接干出了一个量级上碾压的工作,也是真的厉害……

2. 方法原理
1. 方法思路
LongNet的整体的一个思路其实和之前的Reformer,Linformer等一致,还是在attention层方面做文章,希望将attention layer的计算复杂度从原始的 O ( N 2 d ) O(N^2d) O(N2d)进行优化,使得其与句长 N N N呈线性关系而非平方关系,从而使得模型整体的计算复杂度得到缩减。
对于,文中提出了dilated attention的结构,成功地将attention layer的计算复杂度从 O ( N 2 d ) O(N^2d) O(N2d)降维至 O ( N d ) O(Nd) O(Nd)复杂度。

需要注意的是,这里的比较没有包含linear transformer,它虽然很早之前已经实现了 O ( N d ) O(Nd) O(Nd)复杂度的attention实现,不过貌似效果不佳,不算是主流的attention方法,因此文中弃用了linear transformer作为对照。
下面,我们就需要具体看一下Dilated Attention层的具体实现方法。
2. Dilated Attention
1. 具体原理
首先,我们给出Dilated Attention层的整体原理图如下:

具体来说,就是首先给出一个局部窗口长度 w w w和间隔距离 r r r,那么,就可以将总长为 N N N的序列拆分为 N / w N/w N/w个子序列,然后在每一个子序列当中按照间隔 r r r取出token,一共就能够取出 w / r w/r w/r个token,然后用着 w / r w/r w/r个token作为新的序列计算attention,然后把这 N / w N/w N/w个attention矩阵concat起来,就能得到一个 N × N N \times N N×N的稀疏attention矩阵。
考察对于固定的 w , r w,r w,r下的第 i i i个attention矩阵,有:
{ Q i = [ Q i w Q i w + r ⋯ Q ( i + 1 ) w − r ] K i = [ K i w K i w + r ⋯ K ( i + 1 ) w − r ] V i = [ V i w V i w + r ⋯ V ( i + 1 ) w − r ] \left\{ \begin{aligned} Q_i &= [Q_{iw} & Q_{iw+r} & \cdots & Q_{(i+1)w-r}] \\ K_i &= [K_{iw} & K_{iw+r} & \cdots & K_{(i+1)w-r}] \\ V_i &= [V_{iw} & V_{iw+r} & \cdots & V_{(i+1)w-r}] \end{aligned} \right. ⎩ ⎨ ⎧QiKiVi=[Qiw=[Kiw=[ViwQiw+rK

文章介绍了LongNet,一种针对Transformer的改进方法,通过DilatedAttention降低计算复杂度,使模型适用于长文本。文章详细阐述了原理、多头实现和实验结果,显示LongNet在处理长文本时表现出色且计算效率优于传统Transformer。
最低0.47元/天 解锁文章
280

被折叠的 条评论
为什么被折叠?



