如何评价 Kimi 开源的稀疏注意力框架 MoBA?与DeepSeek的NSA相比,二者各有哪些亮点?

发布时间:
2025-04-26 02:00
阅读量:
22

非常有幸参与到MoBA项目中,并尽自己的绵薄之力。最终成型的MoBA形式其实很简单,看论文应该容易看懂,开发历程鹿总 @Andrew Lu 也已经进行了分享。由于自己对MoBA的贡献比较微薄,所以我可以跟大家一样,从一个旁观者的角度谈谈我对MoBA的理解。

MoBA的“点火仪式”,发生在2023年的上半年,那会MoE还鲜有人关注,裘老师 @未明秋衣 早已开始了将MoE的思想用到Attention上的尝试,这也是MoBA这个名字的来源。鹿总在心路历程中也提到过,MoBA最初的形式是更复杂的,但也更像MoE,比如包含了类似gate乘上Expert的操作。这些操作在后来的调试中多数被放弃,得到了一种看上去“大道至简”的形式。

如果读者对比过NSA和MoBA,估计都有种MoBA是NSA的简化版的感觉:NSA用了MLP来压缩block,MoBA直接用Mean Pooling;NSA用另一块压缩的Attention来学block select,MoBA直接去掉了这部分。不得不说,NSA的设计是更符合一般人的想法,如果由我自己独立来设计MoBA,估计最终形式会更像NSA,因为MoBA这种极致简化的做法则更需要一点勇气(以及长时间的尝试)。

抱歉,这里没有捧一踩一的意思,主要想表达的是,即便作为MoBA(微不足道的)作者之一,我也对MoBA这种极简方式的有效性表示非常惊讶,这就是我第一次看到最终版MoBA的感觉。很多读者都在思考MoBA对Infra/Prefill/Decoding的友好性,而我更感兴趣这种有效性背后的原理。

让我们来一步步思考这个问题。首先,按Block来Sparse Attention并不是什么新鲜事,难在如何选Block。一个朴素的想法是算出完整的Attention(Softmax后或者说Exp后的),然后累计Block内的分数作为该Block的打分。但这个想法没有实际价值:完整的Attention都算出来了,还Sparse来干嘛?MoBA的做法是跟Block内的的平均()做内积,这相当于累计Softmax前的Attention分数。

这看上去也是很朴素的想法。确实,这并没有多难以想象,但MoBA让人意外的地方在于,它没有显式的梯度给到仅仅参与选Top- Block的过程,不参与Attention Output的计算。前面我们说了,NSA的设计更常规一些,因为它相当于把单独做了一个Block级的Attention加入到输出中,这样经过特别训练的它能选出正确的Block并不让人意外。

相反,MoBA这里虽然没有直接的梯度,但最后的实验效果显示它依然能选出正确的Block来。这某种程度上可以理解为如下平均场近似在Softmax Attention中成立得比较好:

当然这个关系顶多可能局部成立,因为如果全局成立的话,Softmax Attention就退化为Linear Attention了。这表明Softmax Attention沿着Sequence方向似乎也存在着“局部线性,全局非线性”的特点,这个特点是否可以启发更好的混合架构也尚未可知...

总的来说,我觉得MoBA并不单单是一次在Sparse Attention上的成功尝试,它的有效性还可能蕴含着一些值得深思的本质原理在里边,期待大家的集思广益。

八字精批2025运势命中贵人八字合婚
END