滑动窗口注意力:零训练胜过线性方案

当我们为大模型优化长上下文推理时,往往会想到把Transformer改造成线性化模型,而这通常需要数千万甚至上百亿token的额外后训练。但最新的研究显示,一个只保留4个attention sinks的滑动窗口注意力机制,几乎不需要任何额外训练,就能在多项任务上匹敌甚至超越这些复杂的线性化方案。
全注意力机制的KV缓存会随着上下文长度不断膨胀,当上下文超过一定长度后,解码速度会明显下降。线性注意力则通过将历史信息压缩进固定大小的循环状态,解决了KV缓存膨胀的问题,但这类方法往往需要从头训练模型,或者通过蒸馏、LoRA等方式对现有模型进行大量后训练改造,成本不菲。
有研究团队将常见的线性化方案的后训练成本整理成了对比表格,从20M、700M到数十亿token不等,而滑动窗口注意力(SWA)的后训练成本为0——不需要修改模型权重,也不需要蒸馏或额外训练。
他们采用的是SWA(w,4)的配置:总窗口大小为w,其中4个固定位置留给最开头的attention sinks,剩余的w-4个位置用于保留局部历史信息。在六项知识与推理任务上,这种配置平均恢复了原模型99.0%的性能,和需要350M到700M token后训练的QRWKV6的99.1%几乎持平。在MMLU任务上,SWA的恢复率甚至达到93.2%,略高于QRWKV6的92.4%。
这项实验覆盖了多个模型系列,参数规模从1.3B到数十B不等。在11组对比测试中,SWA有9组拿到了除原始全注意力模型外的最高平均成绩,剩下两组的差距也仅有0.1和0.7分。在部分专用推理模型上,经过约100M token两阶段蒸馏的线性化方案平均得分仅为50多分,而SWA的平均得分达到70分以上,优势明显。
长上下文下的表现更突出
很多人认为滑动窗口注意力只能利用局部的窗口信息,但实际上经过多层网络后,有效感受野可以随着网络深度逐层扩展,局部信息能够传递到更远的上下文位置。在针对长上下文的测试中,所有窗口和上下文长度下,SWA的表现都不低于同类线性注意力方案。
比如在特定长上下文任务上,当窗口为128、上下文长度达到4K时,SWA的准确率达到17.2,而同类线性注意力方案仅为1.6,两者相差约10.8倍。在另一项长上下文测试中,短上下文时线性方案还略占优势,但到了2K上下文后SWA开始反超,到4K时两者的得分已经拉开到15比3,而全注意力模型的得分仍保持在较高水平。随着上下文长度增加,SWA和线性化方案的差距越来越明显。
工程实现上的额外优势
研究团队还测试了从128到256K的超长上下文场景。全注意力的KV缓存会持续增长,当上下文超过约1K后,解码吞吐会明显下降。而SWA的KV缓存达到窗口上限后,状态内存会保持固定,解码吞吐也基本稳定。
在测试中,SWA的吞吐表现最高,其中窗口为64时速度最快,状态内存也最低。窗口越大,SWA的状态内存开销也会随之增加,当窗口达到512时,其内存开销已经高于基础线性注意力方案。整体来看,当窗口小于512时,SWA的状态内存与线性注意力相当或更低,同时速度更快。
滑动窗口注意力和attention sinks都不是新概念,但此前的线性化工作很少直接和带sinks的SWA进行对比。这项研究直接将两者放在同一张对比表中,证明了带sinks的SWA无需大量额外训练,就能在性能和工程效率上匹敌甚至超越复杂的线性化方案。
研究最后建议,如果目标是在固定、较小的推理状态内存下运行现成模型,可以优先尝试带attention sinks的SWA,再考虑投入大量token进行后训练线性化。如今,SWA + attention sinks已经成了后续线性化工作很难绕开的强基线。

