MoE 中的 TopK 算法为什么要添加噪音?
- Authors
- @SLIPPERTOPIA
很多人了解到 MoE 应该都是从 Mixtral 8x7B 模型出圈之后,开始回看《Outrageously large neural networks: the sparsely-gated mixture-of-experts layer》这篇论文的,但 MoE 其实有比较久的历史,早在 1991 年就已经有相关的研究了。
先回顾一下 MoE 的基本结构,一个 MoE 系统 由两块组成,其中:
- 是专家网络集合,每一个都是神经网络(例如,FFN),每一个网络参数都不相同。
- 指的是门控网络(gating network, GN),目标是为了根据不同的输入 选择不同的专家。GN 可以通过训练获得,也可以固定,后者就对应于静态路由。
MoE 模块的输出可表示为: ,其中 (原文符号 ,但我觉得 更直观一些)是 GN 第 维的输出, 是 个专家的输出。 如果把 GN 看作是选择专家的概率分布,那么模型的输出就是不同专家的加权组合。
MoE 本质上属于条件计算(conditional computation) 的一种,核心的思想是根据输入样本的特征,仅激活模型的一部分参数,而非全部参数(区别于 dense layer)。目标是在不增加计算量的情况下尽可能增加模型的容量,换句话是在保持计算效率的前提下增强模型的表达能力。关于条件计算的原则与趋势,可阅读《[2403.07965] Conditional computation in neural networks: principles and research trends》。
模型的容量是增加了,但对应的专家数也随之增多。一个 MoE 层可能包含数百个甚至数千个专家,那一个样本该如何选择专家呢?这就是门控网络要解决的问题。
Gating network
门控网络根据输入数据生成一个概率分布,用于选择最合适的专家。常见的方法包括 Softmax 门控和噪声 Top-k 门控。
Softmax 门控
Softmax 门控通过 Softmax 函数生成概率分布,简单直观一些就是直接训练一个权重矩阵 ,然后通过 softmax 激活函数得到一个 维稀疏向量:
其中 是 softmax 函数。Softmax 门控思路非常简单直观,但它会给每个专家都分配一个非零概率,这意味着每个专家都会参与计算,这样会增加计算量。一个解决方案是引入稀疏性,即只选择少数几个专家参与计算。也就是:
如此就保证了稀疏性,但仅有这一点还是不够的,实际训练时会遇到一个问题:就是专家之间负载不均衡的问题。 门控网络往往倾向于选择少数几个受欢迎的专家,这会导致这些专家过载,而其他专家几乎不被使用。因此需要某种方法,去打破这种偏好,确保所有专家都(相对)均匀地去处理训练样本,从而实现负载均衡。
带噪声的 TopK 门控
在选择时,如果引入一点随机性,就可以在一定程度上打破这种选择偏好,这个思路的一个具体应用就是 noisy top-k gating network:
其中 , 表示高斯分布。这个公式的后半部分就是 MoE 模型引入的辅助损失函数,用来平衡各个专家的负载,在训练时鼓励所有专家均匀地接收输入数据,这样的训练出来的专家侧重于不同的特征。
Quick quiz
一个小问题,MoE 看起来也是只使用部分网络,那跟 Dropout 有什么差异?
首先从目的上,作为条件计算的一种形式,MoE 的主要目的是显著增加模型的容量,学习和存储更多的信息以提高性能,同时兼顾计算效率,而 Dropout 是正则化技术,为了防止过拟合,提高泛化。
从实现上对比,MoE 由多个专家网络和一个门控网络组成。门控网络负责为输入样本选择一个稀疏的专家集合。这意味着对于每个输入,只有一小部分专家被激活,而其他专家则不被使用。Dropout 层每个神经元连接在训练迭代中以一定的概率被设置为零。这是一种随机过程,每次迭代中哪些神经元被丢弃都是不确定的。
小结
MoE 通过引入门控网络及专家网络来增加了模型的容量,提高模型的表达能力。在专家选择算法中,Top-k 算法通过 sparse gating network 保证稀疏性,减少了计算量。同时通过往 gating network 中引入噪声,保证了专家网络的负载均衡。