不管dense还是MoE(Mixture of Experts)都是基于transformer的。
下面回顾下解码器块的主要架构:
注意力机制-层归一化&残差连接-FFN前馈神经网络-层归一化&残差连接。
dense模型是沿用了这个一架构,将post-norm换为pre-norm,层归一化换成了RMSNorm归一化,FFN替换成GLU,MHA替换成GQA或MLA等。
MoE模型在dense的基础上,将FFN分为了若干个更小的FFN,从而扩大了模型容量。
dense模型和moe模型的区别:
1.架构上:
dense模型一般采用transformer的稠密型架构。
MoE模型将FFN层划分了若干个小型专家FFN,并新增路由器进行专家选择。
2.训练上:
dense模型在训练时,前向传播激活所有参数,反向传播更新所有参数,推理时也是激活所有。
MoE模型在训练时,前向传播会根据输入数据由路由网络选择部分专家进行激活,反向传播时也只更新被激活的专家和路由网络的参数。推理时路由网络会根据输入动态选择部分专家进行计算,只有被选中的专家会被激活。
3.推理上:
MoE的时延更低,吞吐量更高。训练更不稳定。
MoE架构概述
MoE将dense的FFN层修改为了一个门控网络和多个小型FFN,在处理输入时,由门控网络选择激活最相关的top_k个FFN,将输出进行加权求和,得到MoE层的输出。目的是通过多个专家网络来提高模型的表达能力和性能。
计算公式:
MoE工作流程
1.输入数据x
2.进入门控网络,计算专家的权重
3.使用路由激活专家,获取加权和
每个专家都是一个FFN,输出对输入x的处理结果。汇总加权求和后输出y。这里的权重是门控网络给出的专家权重。
4.负载均衡策略
为了防止模型偏向于特定的专家,引入了辅助损失函数,迫使模型让所有的专家都得到训练。
下面是三种防止某些专家得不到训练的方法
辅助损失函数例子:
deepseekMoE的架构
1.更细粒度的专家:专家FFN参数量减少,使得每次可以选择4个专家激活。
2.共享专家:设置一个共享专家,用于存储通用知识,从而使其他专家更加专业化。
参考:
1.【DeepSeek-MOE原理讲解】 https://www.bilibili.com/video/BV1uUPieDEK1/?share_source=copy_web&vd_source=29af710704ae24d166ca951b4c167d53
2.https://arxiv.org/html/2401.06066v1
3.http://www.sniper97.cn/index.php/note/deep-learning/note-deep-learning/4497/#MoE_jie_shao