条件计算是什么?只在需要的时候、只用需要的部分计算
条件计算(Conditional Computation)是一种只在需要时才进行计算、从而减少总计算量的技术。它的核心思想是:模型不必对每一个输入都动用全部的参数和计算,而是根据输入的具体情况,动态地决定激活网络中的哪些部分。何时需要计算、需要多少计算量,目前已经有了多种解决方案。
为什么需要它
在传统的“稠密”神经网络中,每一个输入都要经过网络中的每一个参数,计算量和模型的大小成正比:模型大一倍,每次推理的计算量也大一倍。缩放定律告诉我们,模型越大通常能力越强,但计算成本也随之水涨船高。可是,并不是每个输入都需要动用模型的全部能力:回答“一加一等于几”和证明一道数学难题,所需的“思考量”显然不同;一个关于编程的问题,可能不需要用到模型中擅长诗歌的那部分知识。条件计算的目标,就是让模型的总容量可以很大,而每个输入实际用到的计算量保持较小,从而“既大又快”。这一思想在 2013 年前后就被 Yoshua Bengio 等研究者提出和探讨。
主要的实现方式
混合专家(MoE):这是目前最成功的条件计算形式。模型中有很多个“专家”子网络,以及一个路由器。每个输入的 token,路由器只把它分配给少数几个最合适的专家处理,其余的专家不参与计算。这样,模型的总参数量可以达到数千亿甚至上万亿,但每个 token 只用到其中一小部分。2017 年谷歌提出的稀疏门控 MoE 层是重要的里程碑,此后 Switch Transformer、Mixtral、DeepSeek-V3、Qwen3 等模型都采用了 MoE 架构,它已经成为前沿大模型的主流设计之一。
早退机制:在网络的中间层设置“出口”,如果一个输入在浅层就已经能有把握地给出答案,就提前退出,不再经过后面的层;难的输入才走完整个网络。
混合深度:让每个 token 自己决定要经过哪些层的计算,部分 token 可以跳过某些层。
动态的推理长度:推理模型根据问题的难度决定思考多久,在更宏观的层面上也可以看作一种条件计算。
挑战
条件计算的一个现实难题是,这些算法在现有的硬件上不一定高效:GPU 擅长处理规整的、大批量的并行计算,而条件计算带来的是动态的、不规则的计算模式,不同的输入走不同的路径,容易导致硬件的利用率下降。MoE 还面临负载均衡的问题:如果大部分 token 都涌向少数几个专家,这些专家就会成为瓶颈,而其他专家则闲置。研究者为此设计了专门的负载均衡策略和高效的计算内核。