4个月前
# Deepseek 的注意力优化算法: NSA 当前 AI 有一个很重要的能力指标叫上下文长度,这个长度在ChatGPT出来的时候是4K, 现在主流模型基本上做到了128K, 谷歌, MiniMax已经做到了1m,2m。 如果把这个长度类比成计算机内存,我们现在还处在晶体管时代。 这个长度难以拓展的原因在于注意力的复杂度上。随着问题上下文变长原始 Transformer 注意力的计算量呈平方增长的。 这次 Deepseek 用 NSA 算法把原来计算复杂度由 $O(t^2)$ 改进到了 $O(t* N)$ 这个 N 远小于 t. 更神奇的是这种优化不只是无损的,甚至还是有益的。 ## 人类是怎么分配注意力的 传统的注意力计算是这样的,根据问题一个字一个字的往前计算注意力。不管这个字与问题关联大不大,都一视同仁,都要计算,最后,再通过注意力值的相关系数来区分一个字,一段话,重不重要。 NSA 则更智能它的的思路可能是参考自人类在阅读长文注意力机制, 比如:我们在阅读一篇长文时是这样处理问题的: 遇到问题q -> 根据问题类型选择关注策略(部分段落还是横跨全文) 。 再根据策略: 快速扫一下全文 -> 精选出相关部分 -> 整理精选内容(把这些内容的上现也看看) -> 再计算注意力。 ## NSA 的思路 NSA 也是这个思路,类似的 NSA 是这么做的, 其中: - **根据问题类型选择关注策略** ➡️ **门控聚合 Gated Aggregation** - **快速扫一下全文 ➡️** **Token 压缩 Token Compression** - NSA 先把长文本“压缩”成一系列“要点”(compressed tokens) - **挑出相关部分** ➡️ **Token 选择 Token Selection** - NSA 从这些“要点”中挑选出最相关的部分,就像你找到相关的段落。 - **整理精选内容** ➡️ **滑动窗口 Sliding Window** - NSA 会仔细处理这些被选中的部分,同时看看被选中部分的,上下文 上面的过程会同时对 K,V 作用,然后得到 $\tilde{K}_t, \tilde{V}_t$, 最后的注意力计算就变成:$o_t = \text{Attn}(q_t, \tilde{K}_t, \tilde{V}_t)$ NSA 的重点在于整个过程都是动态的,可学习的,这意味着这个智能选择的关注过程与 q 高度相关,这也是 NSA 能节省计算量的关键。 ## 硬件上的优化 为了让算法更高效,他们还对硬件做了细致控制, 比如: 1. 把大量的计算由HBM 改到更高效的 SRAM 中进行,避免的挑选带来的数据过于分散, 2. 尽可能多的共享查询头数据, 3. 自定义 CUDA kernel. ## NSA 的效果 从上图,可以看出 NSA 的在不同任务的表现都相当好,甚至好于全注意力,而且解码,训练推理,反应传播的速度也比全注意力快。 NSA 的效果好于全注意力的原因可能在于: NSA 的稀疏性起到了正则化的作用。通过限制每个 query 可以关注的 key-value 对的数量,NSA 降低了模型的复杂度,减少了过拟合的风险。这类似于 Dropout 或其他正则化技术,NSA 的稀疏性可以被看作是一种 "注意力 Dropout"。 ## 存在的问题 - 前面说的 ”注意力过程与 q 高度相关“, 而 q 是动态的。这里也带来了一个问题提示词缓存失效了,也就是没法复用已经计算过的注意力。如可以缓存计算结果,甚至可以长文缓存在内存甚至是SSD上, 如果是 NSA 这个以前这个省钱小技巧没用了。 - NSA 带的另外的问题是加入新的结构让训练难度上升了, 跟硬件 CUDA 相关的硬件优化方案,也没法直接迁移到其他硬件上。 ## 后记 他们出之前 MLA (Multi-head Latent Attention) 算法也是注意力计算的优化,不过 MLA 做的是静态的优化,而且计算量还是不小,可能这种优化还会掉点。 如果能在以后的模型训练中如果能用上 NSA, 模型的总体的能力还有上升空间, 对普通用户来说缺点可能是推理价格要上涨了。 发现最近有关 Transformer 注意力算法的公开的创新都是国内公司在做: - Deepseek 有 MLA, NSA - Minimax 有线性注意力 - Moonshot 有发了 MoBA 欧美的几家头部肯定也有方案,就是最近都不怎么公开了😂。