Scaling-Law
介绍MoE前,首先要介绍Scaling-Law,这条定理的含义是,对于相同的Transform类网络结构下,最终网络的能力一般仅和训练数据量(训练数据Token数)、模型参数量、训练的计算量相关a:
其中最终模型在验证集上的损失函数,N和D分别为模型参数量和训练集Token总量,其余的,,a,b均为拟合参数,这些拟合参数最终和模型的结构相关。
scaling-law所给的提示也就是传统的超参数拟合(例如每层网络多少维度,多少深度)对大模型提升意义不大(实测在2%)左右,因此要提升网络的表现,最终有两种方案:
- 更换网络架构:不同的网络架构对应一套不同的超参数
- 提升训练数据量+加大网络参数量:提升N和D参数
换一种说法,一个表现良好的网络,必须具有较大的参数量和训练数据量,这种网络对应的计算量也会很大,而MoE的提出,就是为了降低大参量模型推理时的计算量,其将部分参与训练的参数在推理过程中动态的设置为激活或不激活(不激活就不参与运算),从而在维持模型参数量的情况下,大幅度降低推理时的运算量。
MoE前向传播(推理)
MoE的架构图如下所示:
MoE层的数据流分成两组,起点均是原始输入X,尺寸为{batch,qlen,embd},其中batch为数据批数,qlen为输入的Token数量,embd为词嵌入矩阵的维度。
门控通路
第一条通路为输入X->门控网络->门控向量G->加权就和。门控网络是一个简单的线性层,如下所示,其中为门控网络层的训练参数:
这里生成了门控向量G’,尺寸为{batch,qlen,N},其中N为专家网络的总数量。随后,对G’中的每个Token(共qlen个Token)分别选择最大的k个值,其他位置置位为0,表示不选择这个专家网络:
最后对做归一化即可获得门控向量G:
整体图示如下所示,需要注意的是,MoE是针对每个Token独立的选择专家,每个Token选择的专家都有可能不同:
这里举的例子是一个输入长度(glen=3),专家数为4,每次激活top2的专家的例子。
数据通路
数据通路相对简单,即具有多个专家网络(可以同构也可以异构),每个专家网络生成相同尺寸的输出。首先根据门控通路的选择选择需要使用的专家网络,即“激活”,随后将选择的专家网络生成的输出进行加权累加,而权值就是门控通路输出的G矩阵中每个Token中每个专家位置对应的值,如下图所示:
这里举的例子是一个输入长度(glen=3),专家数为4,每次激活top2的专家的例子。另外,本质上说可以所有专家都激活,再使用G进行加权累加,不使用的专家会被置位为0对结果不产生影响,但这样就失去了MoE架构的初衷(降低激活参数量和运算量)
MoE在GPT中的使用
在GPT类网络中,MoE一般用于代替解码器中的线性层,开源大模型中,Mixtral 8x7B是比较早引入MoE架构的大模型,其将原有的线性层设置了8遍,并仅选择Top2的专家进行加载,如下图所示:
这里的SwiGLU是一种用于代替FFN的线性层,在Mixtral 8x7B和其他开源大模型(LLama等)中广泛使用。