想象你在夜市排队买一份网红烤冷面。队伍排了三百米,如果你想知道前面每个人都在买什么口味,得从头到尾问一遍——这就是经典注意力机制的做法:每个字都要“回头看”整篇文章的所有字。可当文章变成一本三百万字的小说时,这种“挨个问”的方式会让人崩溃——计算量呈平方级爆炸。Mistral 模型给出了一个聪明的解法:你不需要认识队伍里所有人,只需要盯紧前面那几个人,信息自然会像“人传人”一样传到你的耳朵里。这就是滑动窗口注意力(Sliding Window Attention)——把“全队社交”变成“邻里串门”,用局部视野撬动全局信息。
掌握滑动窗口注意力,你就掌握了当前大模型(如 Mistral)支持超长上下文的核心理念。在推理引擎优化、长文本应用开发、模型架构选型中,这一知识能帮你理解“为什么这个模型能读那么长的文档还不卡顿”,是构建高性能 AI 应用的关键拼图。
可视化演示
展示滑动窗口注意力的带状掩码矩阵、O(n^2)与O(nw)复杂度对比及多层堆叠扩展有效感受野,交互调节窗口大小查看注意力覆盖范围。
本节配有交互动效(进入视口后自动加载,约 3KB)。
滑动窗口:带状注意力掩码 每个token仅关注窗口w内局部上下文窗外位置掩码为负无穷 注意力矩阵呈带状分布复杂度从O(n^2)降为O(nw) A=band(w) 局部高效注意力配合层间堆叠传播全局信息
经典注意力瓶颈
你还记得那个三百米长的烤冷面队伍吗?在标准的注意力机制(Self-Attention)里,排在队伍末尾的你,为了决定自己要不要加辣,居然要挨个问前面三百个人“你买的是什么口味”。每个人都要这么问一遍,整个队伍就要进行三百乘三百——九万次对话。如果队伍有一万人,那就是一亿次对话。这就是经典注意力机制的困境:计算量随序列长度呈平方级增长,写成公式就是 O(n²)。
在 Transformer 架构中,每个 token(你可以把它理解为一个“字”或“词”)都要计算与序列中所有其他 token 的注意力分数。这个“全连接”设计让模型能捕捉任意距离的依赖关系,但代价极其高昂:当输入序列长度 n 翻倍时,计算量翻四倍。对于动辄几十万 token 的长文档、长对话,这个开销让训练和推理都变得难以承受。
更棘手的是,除了计算量,显存占用也随平方级增长。每个 token 都要为其他所有 token 保存注意力矩阵,这个矩阵的大小是 n×n。当 n 达到十万时,单单注意力矩阵就需要 100 亿个浮点数——这在消费级 GPU 上直接爆炸。所以,经典的全局注意力在处理长文本时,就像让夜市里的每个人都认识整条街的所有人,既不现实,也没必要。
滑动窗口机制
Mistral 对上面的困境给出了一个极其接地气的答案:既然没必要认识全街的人,那就只认识你前后几个邻居好了。这就是滑动窗口注意力(Sliding Window Attention,SWA)。它给每个 token 划定了一个固定大小的“社交圈”——通常取窗口大小为 W,每个 token 只与前后 W/2 个 token 计算注意力,窗口之外的 token 一概不理会。
这个“社交圈”的设计非常巧妙。它不像某些方法那样把序列硬切成互不重叠的块(那样会丢失块与块之间的联系),而是让窗口“滑”过整个序列。序列中的每一个 token,无论它处在什么位置,都能看到以自己为中心、宽度为 W 的一个连续区间。相邻 token 的窗口会重叠,信息在序列上是连续流动的。
窗口大小 W 是一个超参数,Mistral 在其 7B 模型中设置的窗口大小为 4096。也就是说,每个 token 只看自己前后共 4096 个邻居,而非整个序列。这就像你在夜市里只跟前后两三个摊位聊得火热,但整条街的热闹景象,依然能通过邻居们的口口相传进入你的耳朵。窗口越宽,视野越大,但计算量也越大;窗口越窄,效率越高,但可能漏掉重要的远距离信息——这是一个需要根据任务需求精心调配的旋钮。
线性复杂度
现在我们来看看,这个“只跟邻居聊天”的策略,究竟省了多少力气。假设序列长度为 n,窗口大小为 W。每个 token 只需要计算与窗口内 W 个 token 的注意力分数,因此总计算量大约是 n × W。由于 W 是一个固定常数(不随 n 变化),所以整体复杂度从 O(n²) 降到了 O(n)——这就是线性复杂度。
这个从“平方”到“线性”的跨越,在实际运行中效果惊人。假设 n 从 1000 涨到 100000,标准注意力的计算量要涨一万倍,而滑动窗口注意力只涨一百倍。在推理引擎中,这意味着同样一块 GPU,能够处理的上下文长度从“几万 token”跃升到“几十万 token”。(补充一句说明)这不仅仅是一个数字游戏,它直接决定了你的聊天机器人能否读完一整本《三体》再跟你讨论剧情。
- 标准注意力复杂度每一步都要看全序列,n 个 token 每个都要算 n 次,所以是 n 的平方。
- 窗口限制后每个 token 只看 W 个邻居,W 远小于 n 且不随序列长度变化。
- 常数吸收W 是常数,可以忽略不计,复杂度就变成了正比于 n 的线性阶。
层间信息传播
你可能会问:每个 token 只看 W 个邻居,那距离很远的两个 token 之间,信息不就彻底断了?别担心,这就是滑动窗口注意力最精妙的设计——层间接力。虽然每个 token 在单层内只看到 W 个邻居,但 Transformer 模型有几十层甚至上百层。在第 1 层,token A 认识 B;在第 2 层,B 认识的 C 通过 B 间接“介绍”给了 A;到了第 3 层,A 就认识了 C 的朋友 D。每经过一层,信息就能多传播 W 个 token 的距离。
这就是“感受野”(Receptive Field)的概念:在 L 层 Transformer 中,一个 token 能间接看到的最远距离约为 L × W。Mistral 有 32 层,窗口 4096,理论上最远可以感知到超过 13 万个 token 之外的信息。这就像夜市里的消息传播:你只跟邻居说话,但一晚上下来,整条街的八卦全都传到了你的耳朵里——因为每个邻居都从他们的邻居那里听到了消息,层层传递,毫无死角。
这个性质说明了一个深刻的道理:全局性不一定要靠“直接看”来实现,“间接听说”同样能覆盖整个序列。Mistral 用 32 层 × 4096 窗口,达到了远超单层全局注意力的有效覆盖范围,而计算量却小得多。这就像一个大公司里,普通员工不需要认识 CEO,但通过层层汇报,CEO 的决策依然能传达到每一个基层员工。
- 单层传播距离一层 Transformer 中,一个 token 只能直接影响窗口内的 W 个 token。
- 多层叠加效果第 2 层中,token 能看到第 1 层中那些“认识 W 个邻居”的 token,因此距离翻倍。
- L 层推广以此类推,总感受野为层数乘以窗口大小。
全局注意力token
虽然层间接力能传播信息,但“听说”总归不如“亲眼所见”来得可靠。对于某些关键信息——比如文章的主题句、数据库的全局统计量——如果每个 token 都要等上几十层才能“辗转听说”,既慢又容易失真。Mistral 的解决方案是:每隔一段距离,设置一个“全局注意力 token”,让窗口内的普通 token 可以直接看到它。
这些全局 token 就像夜市街角的“广播塔”:任何一个在窗口范围内的 token 都能直接“看到”广播塔里播放的全局信息。Mistral 的做法是选择序列中每隔一定间隔(比如每 7 个 token)的一个 token,让它能注意到整个序列的所有 token,而序列中所有 token 也都能注意到它。这样,全局 token 就成了信息的中转枢纽:局部信息汇聚到全局 token,再由全局 token 广播给所有窗口内的 token。
这种设计达成了一种精妙的平衡:正常 token 只用滑动窗口,保持线性复杂度;少量全局 token 使用完整注意力,提供全局视角。因为全局 token 的数量很少(比如每 7 个有一个,大约占总数的 1/7),所以即便它们用全局注意力,整体复杂度依然是线性的。这就像夜市不会真的让每个人都站在楼顶看全景,但每隔一段路设一个“瞭望塔”,就足以让所有人既了解身边的小事,也不错过整条街的大事。
这个“局部为主、全局点睛”的混合架构,后来被证明极具生命力。它让模型既能高效处理海量局部细节(比如代码中的函数体、小说中的场景描写),又能牢牢把握全局脉络(比如整个项目的架构、小说的主线剧情)。在 Mistral 的实践中,全局 token 还承担了类似“感叹词触发器”的角色——当某个关键实体在长文中出现时,全局 token 能迅速将它的历史信息拉回当前正在生成的文本中。
- 普通 token 的窗口计算n 个普通 token,每个看 W 个邻居。
- 全局 token 的全序列计算每 G 个 token 设一个全局点,共 n/G 个,每个看全序列 n 个 token。
- 合并后仍是线性两项中 G 和 W 都是常数,所以总复杂度依然正比于 n。
推理优化策略
滑动窗口注意力不仅让训练更快,也给推理阶段带来了巨大的优化空间。首先受益的是 KV 缓存(KV Cache)。在自回归生成中,每生成一个 token,都要复用之前所有 token 的 Key 和 Value 向量。如果用标准注意力,KV 缓存会随着生成长度线性增长——生成了十万个 token,就要缓存十万个 Key/Value 对。但滑动窗口注意力下,每个 token 只需要窗口内的 Key/Value,所以缓存可以像传送带一样滚动:新的 KV 进来,超出窗口的旧 KV 就可以丢弃。
这就像夜市摊位的“排队单”管理:你不需要记住今天下午每一位顾客的订单,只需要记住最近几单的口味偏好,前面的订单早已变成食物递出去了。Mistral 的 KV 缓存大小与窗口大小成正比,与生成的总长度无关。这意味着,无论你让模型写多长的文章,显存占用都不会随之暴涨——这对推理引擎的稳定性至关重要。
第二个策略是 跨层 KV 共享。Mistral 观察到,相邻层的注意力模式往往高度相似,于是让相邻两层共享同一份 KV 缓存,而不是每层各存一份。这相当于把夜市里相邻摊位的“顾客偏好记录”合并成一张共享的小黑板,既省了纸张(显存),又没损失多少信息。跨层 KV 共享让缓存量再减半,配合滑动窗口,Mistral 能在单张 A100 GPU 上流畅处理 32K 甚至更长的上下文。
第三个策略是配合 流式推理(Streaming Inference)。由于模型只需要保留窗口内的信息,推理引擎可以边读边算、边算边丢,就像一个只带了一个小背包的徒步者,而不是背着全部家当的搬家车。这让 Mistral 在处理超长文档(比如整本代码库、完整对话历史)时,依然能保持稳定的生成速度和内存占用,这也是为什么 Mistral API 能自信地宣称支持“百万 token 上下文”。
优势与局限
讲了这么多好处,滑动窗口注意力也不是没有软肋。先说说优势:最直观的就是显存占用大幅下降。标准注意力在任何时刻都要为全序列保留注意力矩阵和 KV 缓存,而滑动窗口注意力只需要保留窗口大小的那部分。这意味着同样的硬件,能跑的模型更大、能处理的文本更长。其次是计算延迟显著降低,因为每个 token 的注意力计算量从 n 降到了 W,生成每个 token 的速度更快,用户体验更流畅。
但局限也同样明显。第一,远距离依赖仍然受限。虽然层间接力能实现全局信息传播,但这种“间接传播”是有损的:信息每传一层都可能被“稀释”或“扭曲”。如果两个关键实体在文中相距极远(比如一本推理小说开头埋的伏笔,到结尾才收),滑动窗口的模型可能无法像全局注意力那样牢牢抓住这层关系。第二,窗口大小很敏感。窗口太小,局部上下文不够,模型理解力下降;窗口太大,计算量回升,失去滑动窗口的意义。这个超参需要针对具体任务精细调优,并不是越大越好。
第三,实现复杂度较高,尤其对推理引擎开发者来说:需要专门的掩码矩阵(Attention Mask)、特殊的 KV 缓存管理逻辑和跨层共享机制,这都比标准的全注意力实现要复杂。你可以把这个问题理解成:夜市管理方为了让“人传人”的消息传播机制运转顺畅,需要在各个路口设指示牌、安排广播员、设计防走失路线——这显然比“所有人直接站楼顶看到全街”要费更多管理的脑筋。
对比与展望
把滑动窗口注意力放在大模型注意力机制演进的地图上,它的位置非常有趣。与标准全局注意力相比,它以一定的远距离建模能力换取了大得多的效率提升——在长文本场景下,这几乎是决定性的优势。与稀疏注意力(Sparse Attention)的其他变体(如 Longformer 的膨胀窗口、BigBird 的随机连接)相比,滑动窗口的实现更简单、更直观,同时也能取得接近的效果。Mistral 用实践证明了:简单的“只看邻居”策略,加上多层的间接传播,足以挑战复杂得多的稀疏方案。
展望未来,滑动窗口注意力已经成为长上下文大模型的“标准动作”。GPT 系列有类似的局部注意力变体,Llama 3.1 的 128K 长上下文也有局部注意力的影子,而 Mistral 更是凭借滑动窗口 + 全局 token + KV 共享的组合拳,在效率与效果之间找到了一个漂亮的平衡点。随着上下文窗口从 128K、1M 甚至更长延伸,“完全全局注意力”在算力上越来越不可能,滑动窗口这类“局部直连 + 多层接力 + 少量全局锚点”的混合架构,将成为长上下文推理的主流范式。
就像夜市不会因为修了一条贯穿全街的高架桥,就把邻里间的串门取消——效率与温度需要兼顾。未来的注意力机制,大概率不会是“全都要”的暴力美学,而是“精准计算”的设计艺术。滑动窗口注意力,就是这个设计艺术中已经落地的、被大规模验证的一块基石。
AI 应用场景
长文本流式问答助手
阶段:模型推理优化
解决的问题:传统全局注意力在处理超长对话历史(如客服会话、法律文档审核)时,显存随对话轮数线性增长,导致长时间运行崩溃或响应越来越慢。滑动窗口注意力让 KV 缓存只保留窗口内部分,显存占用恒定,服务稳定性大幅提升。
具体案例:某法律科技公司用 Mistral-7B 搭建合同审核助手,用户上传 20 万字的合同文本。启用滑动窗口注意力后,单张 A100 GPU 即可流畅处理全文,审核响应时间从 90 秒降到 8 秒,且连续处理多份合同时显存无累积增长。
代码库全局理解工具
阶段:长上下文建模
解决的问题:编程 AI 助手需要同时理解整个代码库的架构和某个函数的局部实现。只靠全局注意力,上下文长度受限;只靠局部窗口,又抓不住项目全局。Mistral 的全局注意力 token 机制让模型每隔一段代码设置一个“全局锚点”,兼顾局部细节与全局结构。
具体案例:一款 AI 代码审查工具将整个 GitHub 仓库的源码拼成超长序列喂给 Mistral,利用滑动窗口 + 全局 token 的架构,能够准确回答“修改这个函数会影响哪些模块”这一类需要全局视野的问题,且在 10 万 token 长度下仍保持流畅推理。
Python 演示
# -*- coding: utf-8 -*-"""滑动窗口注意力机制的最小实现演示"""import numpy as np def sliding_window_attention(q, K, V, window_size=3): """对单个 query 计算滑动窗口注意力。 Args: q: 当前 token 的 query 向量, shape (d,) K: 所有 token 的 key 矩阵, shape (n, d) V: 所有 token 的 value 矩阵, shape (n, d) window_size: 滑动窗口大小(只看左边 window_size 个 token) Returns: 注意力加权后的输出向量, shape (d,) """ n = K.shape[0] # 1. 只保留窗口内的 key/value(不含未来 token) start = max(0, n - window_size) K_win = K[start:n] V_win = V[start:n] # 2. 计算窗口内注意力分数(点积) scores = K_win @ q # 3. softmax 归一化成权重 scores = scores - np.max(scores) # 数值稳定性 weights = np.exp(scores) / np.sum(np.exp(scores)) # 4. 加权求和得到输出 out = weights @ V_win return out def main(): # 构造模拟数据: 50 个 token, 每个 8 维 np.random.seed(42) n, d = 50, 8 K = np.random.randn(n, d) V = np.random.randn(n, d) # 模拟第 50 个 token(即当前生成位置)的 query q = np.random.randn(d) # 标准全局注意力(对比用) scores_full = K @ q scores_full = scores_full - np.max(scores_full) w_full = np.exp(scores_full) / np.sum(np.exp(scores_full)) out_full = w_full @ V # 滑动窗口注意力(窗口=3) out_win = sliding_window_attention(q, K, V, window_size=3) print("标准全局注意力输出:", np.round(out_full, 4)) print("滑动窗口注意力输出:", np.round(out_win, 4)) print("窗口大小=3, 仅使用最后3个token的信息") if __name__ == "__main__": main()
start = max(0, n - window_size)确定窗口起始位置,保证窗口不越界,这是滑动窗口的核心边界处理。K_win = K[start:n]; V_win = V[start:n]只取窗口内的 Key/Value 矩阵,将计算量从全序列降为窗口大小。scores = K_win @ q用点积计算查询向量与窗口内各 Key 的相似度,决定关注谁。weights = np.exp(scores) / np.sum(np.exp(scores))Softmax 归一化,把相似度分数变成“注意力权重”,相当于给每个邻居分配关注比例。out = weights @ V_win用权重对窗口内 Value 做加权求和,得到当前 token 的输出向量。if __name__ == "__main__":保证脚本可直接运行,便于读者动手验证。
常见误区
误区我以为是像切蛋糕一样,把长文本切成一块块互不相干的片段,每个片段内部做注意力,片段之间完全无关。
正解滑动窗口与“硬切块”有本质区别。窗口是滑动的,相邻 token 的窗口互相重叠,信息在序列上是连续流动的。就像夜市里每个人只跟前后几个人说话,但消息通过层层传递能传遍整条街——切块则是把街垒成隔断墙,每段互不来往。滑动窗口的“重叠”设计正是它能兼顾局部效率与全局传播的关键。
为何常见:这个名字容易让人联想到卷积神经网络中的“局部感受野”,而卷积就是切块的思路。但注意力机制中的“窗口”是重叠滑动的,不是硬分割的,这是一个常见直觉误区。
误区既然是窗口限制了视野,那把窗口设得越大,模型肯定就越聪明吧?直接把窗口设成序列长度,不就跟全局注意力一样强了?
正解窗口越大,计算量越大,当窗口接近序列长度时,滑动窗口就退化为全局注意力,失去了优化的意义。而且更大的窗口不一定带来更好的效果——过大的窗口会引入大量噪声 token,反而稀释了对关键局部信息的关注。窗口大小需要根据任务特性调优:代码生成可能 2048 就够,长文档摘要可能需要 8192 或更高。
为何常见:人们天然认为“看得越多越好”,但在注意力机制中,“精准聚焦”往往比“什么都看”更重要。窗口大小的选择本质是一个效率与效果的权衡,不是越大越优。
误区每个 token 只看窗口内的邻居,那距离很远的两个 token 之间不就永远没有联系了吗?这让模型失去长期记忆能力。
正解这是一个经典误解。虽然单层内 token 只直接看 W 个邻居,但多层 Transformer 的堆叠让信息能以“接力”方式传播。L 层的有效感受野是 L×W,Mistral 32 层 × 窗口 4096,理论感受野超过 13 万 token。此外,全局注意力 token 的引入更是为远距离信息提供了“直达通道”。所以滑动窗口并没有放弃长期依赖,而是用更经济的方式实现了它。
为何常见:人很容易从“单层”的视角去看问题,忽略了深度学习中“层数”这个关键维度。就像你看单人接力跑选手只能跑 100 米,但 4×100 米接力就能覆盖 400 米——层间堆叠的本质就是接力赛。
误区滑动窗口注意力只是推理阶段用来省显存的小技巧,训练的时候反正要把整个序列放进内存,用不用窗口没区别。
正解滑动窗口注意力是模型架构本身的设计,而非推理后处理。训练过程中,每个 token 的注意力计算同样只发生在窗口内,训练时的显存占用、计算量同样从 O(n²) 降到 O(n)。这使得 Mistral 在相同算力下能用更长的序列训练,或在相同序列长度下用更大的 batch 训练。它既服务训练,也服务推理。
为何常见:很多人是在“推理优化”的话题里第一次听到滑动窗口,因此误以为它只是一个推理技巧。实际上,模型前向传播在训练和推理时做的事是一样的,架构上的优化同时惠及两端。
面试题
Q1. 滑动窗口注意力(SWA)的核心思想是什么?
- A.每个 token 只与固定窗口内的邻居计算注意力← 正确答案
- B.将文本切成互不重叠的块分别处理
- C.用卷积操作替代全部注意力计算
- D.只让少量全局 token 参与注意力计算
答案:A。SWA 的本质是“局部直连”——每个 token 只与前后固定范围(窗口 W)内的 token 计算注意力,窗口外的 token 不直接参与。B 是“硬切块”的误解;C 是卷积网络的思路;D 只描述了全局 token 策略,但忽略了滑动窗口的主体设计。
Q2. 标准全局注意力的计算复杂度是?
- A.O(n)
- B.O(n log n)
- C.O(n²)← 正确答案
- D.O(n×W)
答案:C。标准注意力中,n 个 token 每个都要与 n 个 token 计算注意力分数,总共约 n² 次计算。滑动窗口注意力把它降到 O(n×W)≈O(n)。O(n log n) 是某些近似方法的目标复杂度,O(n×W) 是 SWA 的复杂度。
Q3. 滑动窗口注意力将复杂度从 O(n²) 降为 O(n) 的关键是什么?
- A.窗口大小 W 是固定常数,不随 n 增长← 正确答案
- B.序列长度 n 本身变小了
- C.注意力分数被近似计算
- D.只计算最后一层的注意力
答案:A。SWA 每个 token 只算 W 次注意力,总量为 n×W。只要 W 是常数,n×W 就与 n 成正比,复杂度为 O(n)。序列 n 没变,分数没有被近似,各层都参与计算,A 是唯一正确解释。
Q4. 在 L 层 Transformer 中,滑动窗口注意力的有效感受野约为?
- A.W
- B.L×W← 正确答案
- C.W/L
- D.n/L
答案:B。每层窗口传播 W 个距离,L 层叠加后信息最多传播 L×W 远。这就是“层间接力”的效果——单层只能看 W,但多层叠加让远处信息也能辗转到达。
Q5. Mistral 为了兼顾局部效率与全局覆盖,采用了哪些策略?
- A.滑动窗口注意力让普通 token 只看局部← 正确答案
- B.每隔若干 token 设置全局注意力 token← 正确答案
- C.所有 token 一律使用全局注意力
- D.跨层 KV 共享减少缓存占用← 正确答案
答案:ABD。Mistral 的核心组合拳有三招:滑动窗口做局部高效计算(A)、周期性设置全局 token 提供全局视角(B)、跨层 KV 共享减少推理显存(D)。C 是全注意力方案,恰恰是 Mistral 要避免的。
Q6. 滑动窗口注意力中的 KV 缓存相比标准注意力有什么不同?
- A.缓存大小与窗口大小成正比,与序列长度无关← 正确答案
- B.缓存大小与序列长度成正比
- C.不需要任何 KV 缓存
- D.缓存存放在 CPU 内存中
答案:A。标准注意力的 KV 缓存随生成长度线性增长,而 SWA 只需保留窗口内的 KV。缓存像传送带一样滚动,旧 KV 被丢弃。这保证了超长文本生成时显存占用依然稳定。
Q7. 关于滑动窗口注意力的信息传播,下列说法正确的是?
- A.单层内信息可直接传播到任意远距离
- B.远距离信息通过多层堆叠以“接力”方式间接传播← 正确答案
- C.信息无法传播到窗口之外
- D.只有全局 token 之间才能传播信息
答案:B。单层内窗口限制了直连范围,但多层堆叠让 token 经由中间节点间接获得远距离信息。这就像熟人网络里的“六度分隔”。信息确实能传到窗口外,普通 token 之间的信息也能流动,B 是正确的。
Q8. 全局注意力 token 的作用包括?
- A.为窗口内普通 token 提供全局信息直达通道← 正确答案
- B.数量很少,维持整体线性复杂度← 正确答案
- C.取代滑动窗口成为主要注意力机制
- D.让局部信息也能汇聚到全局视野← 正确答案
答案:ABD。全局 token 是“广播塔”,普通 token 在窗口内就能看到它,反过来全局 token 也能看到所有 token,实现了双向信息汇聚(A、D)。因为数量只占约 1/G 的比例,整体复杂度仍为 O(n)(B)。它只是补充,不取代滑动窗口主体(C 错)。
Q9. Mistral 中滑动窗口的默认大小是?
- A.2048
- B.4096← 正确答案
- C.8192
- D.16384
答案:B。Mistral-7B 设置的窗口大小为 4096,即每个 token 关注前后约 4096 个 token。这个大小是算力与效果权衡的结果,也是 Mistral 架构的重要超参数。
Q10. 关于滑动窗口注意力对比其他注意力方案,说法正确的有?
- A.与标准注意力相比,计算量从 O(n²) 降到 O(n)← 正确答案
- B.与膨胀窗口稀疏注意力相比,实现更简单直接← 正确答案
- C.远距离建模能力完全等同于全局注意力
- D.窗口大小选择不影响最终建模效果
答案:AB。A 是核心优势;B 也是正确的——滑动窗口不需要复杂的膨胀率或随机连接设计,掩码更直观,工程上更容易实现。C 错误,SWA 的“间接传播”是有损的,在极端远距离场景下不如全局注意力。D 错误,窗口大小对效果影响显著,是必须调优的超参数。