题目重点:区分局部注意力窗口、KV cache 保留和跨层信息传播,解释为什么省资源但会改变可见性。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版为因果局部窗口:位置 i 只直接关注最近 W 个含自身 token;模型层数与其它全局机制未给,不能宣称任意长距离依赖都可无损表达。
- 题目口语 ‘window attention’ 可能包含不同滑动/块状方案,本文只分析最基本局部窗口。
解题路线
- 从 mask 定义开始:对 query i,仅允许 key j 满足 max(0,i−W+1)≤j≤i;这和 full causal attention 可看全部历史不同。
- 训练/长序列 prefill 中每个位置最多看 W 个 key,注意力配对量从约 O(L²) 降到 O(LW);实际内核与 padding/分块会影响速度。
- decode 若架构真正只需窗口内 K/V,可按层保留最近 W 项,缓存从与总已生成长度线性增长变成与 W 有关;但一些模型用跨层传播/全局 token/混合层,不能擅自裁掉它们需要的历史。
- 长程信息可能通过多层逐跳传播,但有效感受野和任务质量不等于 full attention;用长文事实检索、跨段引用、短文质量和峰值显存对比,评估窗口大小。
手动走一遍
长度 L=10、W=4 时第 9 个位置(0-based)直接看 6、7、8、9;看不到位置 0。若问题的答案只在位置 0,模型能否回答取决于其它层/全局机制,不能单凭‘窗口滚动’保证。
规模与取舍
单层配对 O(LW),若 W≈L 退回 O(L²);局部 KV 保留约 O(W×层数×KV 维度×并发),前提是模型允许丢弃窗口外缓存。质量与计算成本取舍需按具体模型验证。
易错点与追问
容易失分的边界
- 把 window attention 与 paged KV 内存管理混淆。
- 认为局部窗口仍直接关注全部历史。
- 不看模型是否有全局/混合层就裁掉旧 KV。
- 用理论 O(LW) 宣称任何硬件必更快。
- 只测短 prompt 质量,忽略长程检索下降。
继续深挖
- W 与层数怎样影响可传播的长程信息?
- 局部窗口和全局 token 如何组合?
- 流式 decode 哪些 KV 可以安全释放?
- 长文检索评估怎样避免被短距离样本掩盖?
技术参考
- Mistral 7B 原论文:使用滑动窗口注意力的研究实例,仅作技术参照。
