【MoE】探究能否指定路由以训练某些专家

前言

我们之前讲了很多面试常考的MoE架构和分布式,但是实际上让你动手改一个MoE架构或者实现一个指定多个专家来输出某一个领域的MoE仍然束手无措,因为MoE最重要的是如何让路由选择我们需要的专家,由于训练和微调时涉及的稀疏激活机制,MoE 模型在微调时往往不如 dense 模型那样直接有效,而怎么指定路由进行期望的选择结果需要更复杂的调参和策略。因此,本文通过调研多篇论文以及博客,目标是验证能否指定某些专家作为我们期望的专家,从而使用特殊的格式在训练集上进行标记,然后对这些专家进行专门的训练,从而得到我们期望的输出。

注意,本文的目的是为了验证能否人为训练指定路由,并列举调研的结果和思考,同时会顺势讲解路由的发展和实现。

为了不吊胃口,这里直接告诉答案:不能人为指定训练。

接下来的内容讲解了MoE路由的技术以及为什么不能人为指定训练的原因。

MoE路由发展进程

MoE架构之前讲过了,见《【LLM架构】动手实现MoE架构》,本文就不讲了,本章主要讲一下MoE在路由方面的发展历程以及DeepSeek对MoE进行了哪些改进。

注:《【LLM架构】动手实现MoE架构》 这篇只是从微观角度来说明MoE最简单是实现方式,其中的路由使用的是最简单的全连接层实现的,实际上与正常的dense架构如GPT、LLAMA系列是一样的训练方式,但是本文是希望指定路由到某些专家进行训练并指定这些专家来输出,注意区分。

MoE架构路由机制的背景与原理

  • MoE架构简介

    混合专家(Mixture-of-Experts,MoE)架构是一种稀疏激活的模型架构,其核心思想是在模型内部设计多个“专家”(sub-networks)。通过一个门控机制(gating network),在每个输入或每个token上仅激活其中一部分专家进行计算。这种架构能够在大规模参数扩展的同时,保持较高的计算效率,尤其适用于处理复杂的任务和大规模数据。

    相比传统的密集型模型(Dense model),MoE架构在计算效率和模型容量方面具有显著优势。然而,其路由机制的合理性和有效性直接决定了模型的性能和稳定性。

  • 路由机制的作用

    路由机制是MoE架构中的关键部分,它决定了每个输入数据如何被分配到不同的专家进行处理。合理的路由机制能够确保专家之间的负载均衡,避免某些专家过载而其他专家闲置,同时也能提高模型的整体性能和稳定性。

MoE架构路由机制的发展历程

image.png

Mixtral 8x7B (announcement, model card) 是高质量的混合专家模型 (Mixed Expert Models,简称 MoEs) 的 Transformer 模型,或者说是一种稀疏的 mixture-of-experts 模型,采用纯解码器结构,并使用 MOE 结构,替换原始的 FFN 结构。在每一层,对每个 token,存在一个 router network 会挑选两组 “experts”(即参数量更小的 FFN)来分别处理该 token,并通过加法方式融合两组 “experts” 的输出。

  • 早期的简单路由策略

    在早期的MoE架构中,路由机制相对简单,通常基于简单的门控函数来选择专家。例如,通过计算输入数据与每个专家的相似度,选择相似度最高的几个专家进行激活。这种策略虽然简单,但在处理复杂任务时容易出现专家知识重叠和负载不均衡的问题。

    传统的MoE架构用MoE层代替Transformer中的前馈网络(Feed-Forward Networks,FFN)。每个MoE层由多个专家组成,每个在结构上与标准FFN相同,每个token分配给一个或两个专家。但是会有以下两个问题:

    (1)知识杂交:传统的MoE实践通常采用有限数量的专家(例如8或16),因此分配给特定专家的标记可能会涵盖不同的知识。因此,指定的专家将倾向于在其参数中汇集不同类型的知识,这些知识很难同时利用。

    (2)知识冗余:分配给不同专家的token可能需要共同知识。因此,多个专家可能会在各自的参数中收敛到共享知识的获取,从而导致专家参数中的冗余。这些问题共同阻碍了现有MoE实践中的专家专业化,使其无法达到MoE模型的理论上限性能。

    例如,在处理自然语言处理任务时,不同专家可能被分配到相似的任务,导致专家之间的知识冗余,降低了模型的效率和性能。

  • 基于负载均衡的路由优化

    随着研究的深入,人们开始关注路由机制中的负载均衡问题。一些研究提出了基于负载均衡的路由策略,通过引入**辅助损失函数(auxiliary loss)**来约束专家的负载。例如,通过计算每个专家被选中的频率和处理的样本数,调整门控函数的参数,以实现专家之间的负载均衡。

    然而,这种基于辅助损失的策略需要额外的超参数调优,并且会增加训练的复杂性和计算开销。

DeepSeek在MoE路由机制方面的努力与创新

DeepSeekMoE的专家专业化与路由优化——DeepSeek V2

image.png

DeepSeek-V2采用了这两种核心技术:细粒度专家分割和共享专家隔离,这两种策略显著提高了专家的专业化水平。

同时,DeepSeek-V2整合了两种创新架构:用于前馈网络(FFNs)的DeepSeekMoE架构和用于注意力机制的多头隐性注意力(MLA)

多头隐性注意力(MLA)通过低秩键值联合压缩和解耦旋转位置嵌入,优化了模型的存储和计算效率。相较于标准的多头注意力(MHA)实现了更优的性能,并且显著减少了KV缓存,提高了推理效率。MLA将键(Key)和值(Value)共同压缩成一个潜在向量,而不是缓存键(Key)和值(Value)矩阵,这使得缓存的项目数量更少。

其余详细内容见:4篇DeepSeek官方论文梳理: DeepSeekMoE、MLA、MTP、RL、Distillation-优快云博客 DeepSeek V2章节

细粒度专家分割:DeepSeekMoE通过细粒度专家分割(finely segmenting the experts)来解决专家知识重叠的问题。将传统的专家进一步细分为更小的专家,并激活更多的专家组合,从而提高专家的专业化水平和组合灵活性。这种方法使得不同专家能够更精确地学习不同的知识领域,减少了专家之间的知识重叠。

共享专家隔离:为了进一步优化路由机制,DeepSeekMoE引入了共享专家隔离(isolating shared experts)的策略。通过隔离一部分专家专门用于捕捉通用知识,减轻了其他专家在获取通用知识时的冗余,使得路由专家可以更专注于独特知识的学习。这种策略不仅提高了模型的参数效率,还优化了路由机制的负载均衡。

专家级别与设备级别平衡损失:针对传统MoE中路由选择不平衡导致的路由崩溃(Route Collapse)和计算瓶颈问题,DeepSeekMoE提出了专家级别平衡损失(expert-level balance loss)和设备级别平衡损失(device-level balance loss)。通过控制专家和设备的负载平衡,避免了路由崩溃和计算瓶颈,提高了模型的稳定性和性能。

  • expert - level balance loss(专家级别平衡损失):控制对专家负载平衡的约束程度,尽量让每个专家都能得到足够的训练机会,避免路由崩溃route collapse;计算基于每个专家被选中的频率和每个专家的平均样本数,通过调整超参数(专家级别平衡因子),可以控制对专家负载平衡的约束程度

image.png

  • device - level Balance Loss(设备平衡损失):将所有路由专家划分为D个组,并将每个组部署在单个设备上。计算基于设备上所有专家的平均被选中频率和设备上所有专家处理的平均样本数的值。通过超参数(设备级别平衡因子)来控制设备间的负载平衡,以确保设备间的计算负载相对均衡,避免出现计算瓶颈。

image.png

DeepSeek V3的无辅助损失负载均衡策略

点击【MoE】探究能否指定路由以训练某些专家查看全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值