1. Dense 模型与 MoE 模型Dense 模型Dense 模型中每个 token 都会经过同一套完整参数。在 Transformer 中一层通常包含Attention → FFN其中 FFN 的参数量和计算量通常占较大比例。无论输入哪个 tokenDense 模型都会激活完整的 FFN。特点所有参数对每个 token 都参与计算训练过程相对稳定实现简单通信开销较低参数量增加时每个 token 的计算量也会同步增加。MoE 模型MoE 全称为Mixture of Experts中文为“混合专家模型”。MoE 的核心目标是在显著增加模型总参数量的同时只让每个 token 激活少量参数从而控制实际计算量。MoE 通常不是替换整个 Transformer而是将普通 FFN 替换成多个专家 FFNAttention → MoE FFN多个专家通常具有相同的网络结构但拥有不同的参数。例如Expert 0一套 FFN 参数 Expert 1一套 FFN 参数 ... Expert 7一套 FFN 参数2. Router 如何选择专家每个 token 不会经过全部专家而是先交给一个 Router也称为 Gate 网络。Router 通常是一个较小的线性层token 隐藏向量 → Router → 每个专家的分数假设有 8 个专家某个 token 的 Router 输出为Expert 00.05 Expert 10.40 Expert 20.02 Expert 30.25 Expert 40.08 Expert 50.04 Expert 60.12 Expert 70.04如果使用 Top-2 路由就选择分数最高的两个专家Expert 1 Expert 3这个 token 只进入这两个专家计算其他六个专家不参与该 token 的前向传播。不同 token 可以选择不同的专家token A → Expert 1、Expert 3 token B → Expert 0、Expert 6 token C → Expert 1、Expert 5因此MoE 是一种稀疏激活模型。3. MoE 的参数量与计算量假设一个 Dense 7B 模型中Attention 等非 FFN 参数约 1.4B FFN 参数约 5.6B 总参数约 7B总参数量总参数量 共享参数 8 个专家参数 1.4B 8 × 5.6B 46.2B现在将 FFN 替换为 8 个专家每个专家都有约 5.6B 参数而 Attention 等参数仍然共享。如果每个 token 只选择两个专家激活参数量 共享参数 2 个专家参数 1.4B 2 × 5.6B 12.6B可以近似理解为总参数量约 46B 每个 token 实际激活约 13B 参数因此 MoE 可以做到模型总容量很大 但单个 token 的计算量明显低于同规模 Dense 模型需要注意激活参数量不完全等于实际 FLOPs但可以用于直观比较计算规模。4. MoE 节省计算但不等于节省全部显存虽然每个 token 只经过少量专家但模型仍然需要保存所有专家的参数。原因是当前 token 可能选择 Expert 1、Expert 3 下一个 token 可能选择 Expert 0、Expert 7因此推理或训练时所有专家参数都必须存在于设备显存、CPU 内存或多卡系统中。可以概括为总参数量约 46.2B 每个 token 激活参数量约 12.6B 参数存储仍需容纳全部 46.2BMoE 主要减少的是每个 token 的 FFN 计算量每一步实际激活的参数数量。它不会自动减少全部模型权重的存储空间优化器状态占用多卡训练时的通信开销。而且在多 GPU 场景中不同专家可能分布在不同 GPU 上token 需要在设备之间发送这种方式称为 Expert Parallelism可能带来较高通信成本。因此MoE 的理论计算量较低但实际训练和推理速度不一定按参数比例直接提升。5. MoE的问题专家坍缩与负载不均衡专家坍缩专家坍缩是指 Router 长期只选择少数几个专家。例如有 8 个专家但大多数 token 都被路由到Expert 1 Expert 3其他专家很少收到 token。这会导致热门专家负载过高冷门专家训练不足多个专家没有形成差异化能力设备负载不均衡部分 token 因容量不足被丢弃或重新路由模型训练不稳定。理想情况下不是要求每个专家使用次数绝对相同而是避免流量过度集中。6. 常见的负载均衡方法辅助负载均衡损失训练时加入额外的辅助损失鼓励 Router 将 token 较均匀地分配给不同专家。总损失可以写成total_loss language_model_loss balance_coefficient × load_balance_loss负载均衡损失通常同时考虑每个专家被实际选择的 token 比例Router 分配给每个专家的平均概率。它不是简单地规定“某专家被选择一次就增加一次惩罚”而是当流量过度集中在少数专家时提高辅助损失。辅助损失权重过小可能无法解决专家坍缩权重过大又可能干扰模型根据 token 内容选择合适专家。专家容量限制每个专家在一个 batch 中能够处理的 token 数量通常有上限。例如每个专家最多接收 100 个 token当某个专家超过容量后额外 token 可能会被丢弃进入第二候选专家被重新分配通过残差路径跳过专家计算。专家容量通常与下面因素有关总 token 数 专家数量 每个 token 选择的专家数量 capacity factor容量限制可以防止单个专家负载过大但容量过小可能导致大量 token 无法进入首选专家。Router 噪声训练时可以在 Router logits 中加入少量噪声router_logits → 加入噪声 → 再选择 Top-k 专家作用是增加早期探索防止 Router 过早固定在少数专家上让不同专家有机会接收到训练样本。这并不是直接强制选择低分专家而是轻微扰动专家排序使分数接近的专家都有机会被选择。推理阶段通常关闭这类随机噪声。Router 正则化与稳定化还可以使用Router logits 正则化限制 Router logits 过大合理初始化 Router调整 Router 学习率对 Router 使用更高精度计算设置共享专家或始终激活的专家。这些方法主要用于避免 Router 过早饱和和训练数值不稳定。7. Dense 与 MoE 对比对比项DenseMoEFFN 数量每层通常一套每层包含多个专家 FFN每个 token 激活范围激活全部 FFN 参数只激活 Top-k 专家总参数量相对较小可以非常大单 token 计算量随总参数量增加低于同总参数量 Dense 模型权重存储保存全部参数仍需保存全部专家参数KV Cache主要由 Attention 决定通常不会因 FFN MoE 直接变化训练稳定性相对稳定Router 和负载均衡更复杂多卡通信相对简单可能产生较大 All-to-All 通信主要问题扩大参数会直接增加计算量专家坍缩、负载不均、通信开销核心区别可以概括为Dense 每个 token 使用同一套完整 FFN。 MoE 模型拥有多套专家 FFN 但每个 token 只选择其中少数几个参与计算。MoE 并不是让模型“用更少参数”而是保存大量参数形成更大的模型容量同时通过稀疏激活控制每个 token 的实际计算量。