一、目录
- 定义:MOE架构
- 代表类型
- 如何解决expert 平衡的?而不是集中到某一专家。
- 如何训练、微调MOE模型?
- 基础架构
- 优缺点
- 不同MOE 模型实现方式、训练方法
二、实现
- 定义:MOE架构
MOE:混合专家模型,多个专家共同决策的模型。
实现: 将transformer模型中的每个前馈网络 (FFN) 层替换为 MoE 层,其中 MoE 层由两个核心部分组成: 一个路由器(或者叫门控网络)和若干数量的专家。 - 代表类型
谷歌MOE, deepSeek-MOE(国内第一个开源),Mistral-7B, Gemma - 如何解决expert 平衡的?而不是集中到某一专家。核心点, 其中也是目前研究方向
为了防止专家不均衡,导致集中到单一专家,采用门控机制 对专家负载均衡,防止不均匀分配。
在训练 MoE 模型的过程中,因为受欢迎的专家训练的更快,所以门控网络往往更倾向于主要激活相同的几个专家,使得这种情况自我加强。为了缓解这个问题,就需要引入一个辅助损失,从而确保所有专家接收大致相等数量的训练样本。在 transformers 库中,可以通过 aux_loss 参数来控制辅助损失。
优化MoE模型的一个重要策略是对门控网络与其他组件进行联合训练。在联合训练过程中,门控网络的参数通过整个模型的反向传播进行更新。这个过程允许门控网络根据从专家模型收到的反馈来调整其路由决策。该模型通过对所有组件进行集成优化,可以更好地平衡不同专家的贡献,优化路由机制,达到最优结果。
但: 联合训练,损失函数由参数自动调节,不需要用户提供数据集训练。(不改变原训练方式) - 如何训练、微调MOE模型?
MOE模型本质还是LLM语言模型的变形,虽然中间加了一些层,但训练方式仍然是一样的,expert 在训练时会自动平衡好的,这也是核定的点。训练时不需要刻意关注是否均衡。
步骤: 1. 将常规LLM模型转为MoE模型,提高训练效率。(学习一些层的参数)
2. 预训练/或者微调。
可参考:https://github.com/Darrenzeng/MoE_Train
步骤2: 加载MoE 模型,微调/预训练。 - 基础架构
6 优缺点
- 训练速度更快,效果更好。
- 相同参数,推理成本低。
- 性能更好。
缺点: - 训练稳定性:MoE在训练过程中可能会遇到稳定性问题。
- 模型复杂性:MoE的设计相对复杂,可能需要更多的工程努力来实现和优化。
3.下游任务性能:MoE由于其稀疏性,使得在Fine-tuning过程中容易出现过拟合。
7.不同MOE 模型实现方式、训练方法
见对应模块页https://blog.csdn.net/weixin_40777649/article/details/139358124
8. MoE 为什么能够实现在低成本下训练更大的模型。
这主要是因为稀疏路由的原因,每个 token 只会选择 top-k 个专家进行计算。同时可以使用模型并行、专家并行和数据并行,优化 MoE 的训练效率。而负载均衡损失可提升每个 device 的利用率。
9. MoE 如何解决训练稳定性问题?
可以通过混合精度训练、更小的参数初始化,以及 Router z-loss 提升训练的稳定性。
10. MoE 如何解决 Fine-Tuning 过程中的过拟合问题?
可以通过更大的 dropout (主要针对 expert)、更大的学习率、更小的 batch size。目前看到的主要是预训练的优化,针对 Fine-Tuning 的优化主要是一些常规的手段。