MoE演变过程
- 1 MoE
- 1.1 BasicMoE
- 1.2 SparseMoE
- 1.2.1 实现
- 1.3 Shared Expert SparseMoE
1 MoE
参考:https://huggingface.co/blog/zh/moe
1.1 BasicMoE
用router给出各专家的权重,然后让输入过每一个专家,然后做加权求和。
1.2 SparseMoE
这个模型是由Switch Transformer论文中提出来的,其预训练速度是密集模型的7倍。
- 论文:Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity
- paper:https://arxiv.org/abs/2101.03961
SparseMoE选择topk个专家(没有激活全部专家,所以叫sparse),然后各专家的输出进行加权求和。
1.2.1 实现
router
- 将hidden_dim转化为各个专家的概率route_logits;
- 根据概率,输出topk的权重(router_weights)和idx ;
- 权重归一化(router_weights),要不然topk的权重之和是小于1的;
- 选出专家id形成one_hot掩码expert_mask。
sparseMoE
- 通过router选出专家idx和其权重
- 遍历专家,找到使用了该专家的token
- 对该token进行更新
- 将其存放到最终结果中
1.3 Shared Expert SparseMoE
因为有些信息是通识的,所以建立Shared Expert共享专家,这些专家是每个token都要过的,然后其他专业领域的专家由router进行选择,然后再加权求和。
共享专家
- 共享专家的输出stack起来,并求sum
- 共享专家的输出和topk专家的结果相加(element-wise add)