架构: 把dense ffn拆成n个小的sparse ffn,在计算attn之后
router选择expert,router是一个ffn,接上softmax,得到每个expert分配得到的probability.
topk选多少个e,这是一个超参
why?
现在的大模型从三个方面scale up模型,魔性的参数量,计算量和训练数据。带来的问题是:遇到瓶颈,遇到了不可能三角,分别是模型的性能,size和速度,不能同时优化。
moe的本质是解耦合模型的参数量和计算量,可以把参数量做的很大,但是计算量随着参数量急剧增大。他有实际的激活参数。
现在的观点认为,知识存在ffn里面,因此moe的expert有了知识分类的划分。而且moe模型可以做的更大,可以存下更多的知识。
moe本质上是在sparse上,类似cnn引入了sparse的卷积kernel,类似于一个矩阵的svd。其实类似于cnn人为的加入prior。
他的优点:训练拟合快
他的缺点:训练容易不稳定
可能的问题: expert的负载问题
moe: open mixture of expert language model
switch transformer: moe的scaling law,在e上做scale up
deep seek moe: fine grain expert更小的e, shared expert.有一个必须经过的e,代表人为注入先验知识。
router strategy
token choice: 按照token分配,针对每一个token,选topk个expert。带来load balance的问题,某些expert会很集中,有些训练不充分。
expert choice: 给每个expert 选topk个token。token可能会被重复选到,而且可能被漏选,token drop,信息没有被很好的利用。在sr模型里,因为每次都只能看到前面的token。这个方法在infer有问题。
而且现在论文中发现token choice的性能远高于expert的。会有一些load loss去约束防止load balance问题。
moe的初始化: n个ffn参数线性拆分,或者直接拷贝,router Xavier初始化,保证无偏向性。
训练的trick:
为保护预训练知识,初始化后需分阶段微调:
1. 第一阶段(冻结基础模块):仅解冻门控网络和专家网络的“微调层”(如专家的输出线性层),固定预训练的基础模块(注意力层、LayerNorm)和专家网络的核心参数,让门控先学习“如何合理分配输入给专家”;
2. 第二阶段(逐步解冻):待门控输出稳定(负载均衡性达标)后,再逐步解冻专家网络的全部参数和基础模块,结合任务数据微调,让 MOE 整体适配下游任务