跳到主内容
快讯直播
AI智模界
AI 词典

滑动窗口注意力:让每个词只看邻居

滑动窗口注意力(Sliding Window Attention)是一种稀疏注意力机制:它让序列中的每个 token 只与前后固定数量的邻居计算注意力,而不是和整段文本里的所有 token 两两相看。

先说清楚它要解决的问题。在标准的自注意力(AI 词典:Self-Attention">Self-Attention)里,一句话有 n 个 token,每个 token 都要和包括自己在内的全部 n 个 token 算一遍相关性,再按权重汇总信息。计算量大致按 n² 增长,需要缓存的键值(Key/Value)也随 n 线性膨胀。几千字的文本还扛得住,几万、几十万字就开始吃显存和算力。

滑动窗口的做法很直接:给每个 token 配一个固定宽度的取景框,比如左右各看 w 个位置,框外的 token 一律不参与计算。这个框随 token 的位置一路平移,所以叫“滑动窗口”。

打个比方。一千人的公司开全员大会,如果要求每个人和所有其他人单独聊一遍,那是五十万次对话,谁也开不完。改成圆桌分组,每人只和左右邻座几位交流,总对话次数就变成和人数成正比的量级。信息仍然会流动,只是需要靠一桌一桌往外传。

复杂度因此从平方级降到“长度 × 窗口大小”的线性量级,KV 缓存也不必再随文本长度无限增长——因为每个位置只存窗口内的历史。

它和全局注意力(Full Attention)到底差在哪:

维度全局注意力滑动窗口注意力
每个 token 看谁序列内所有 token前后固定窗口内的邻居
计算量增长随长度平方增长随长度近似线性增长
KV 缓存随长度线性增长基本由窗口大小决定,与总长无关
远距离依赖一步直达需多层堆叠间接传递
适合场景短文本、精度优先长文本、成本优先

有个容易被忽略的点:单层窗口很小,但多层堆叠会让感受野逐层扩大。第 k 层的 token 理论上能间接覆盖约 k 倍窗口的距离。所以“只看邻居”不等于“永远看不到远处”,只是远处的信息要靠一层层转发过来,路径更长、更容易被稀释。

代价也在这里。需要精确检索远处细节的任务,比如跨章节引用、长文档里找某个具体数字,窗口方案容易力不从心。因此工程上常做混合:大部分层用滑动窗口,少数层保留全局注意力,或者设置若干“全局 token”负责汇总。

对从业者来说,遇到显存和耗时随上下文长度爆炸的问题,先确认注意力是不是全量的;文档摘要、日志分析、流式对话这类局部语义为主的任务,窗口方案性价比很高。对普通职场人,它是一个很典型的思路:不必让每个人都认识所有人,靠熟人网络传递信息,同样能让事情跑起来,只是慢一点、有损耗。具体实现与默认窗口配置,以各框架和模型的官方文档为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。