分享
Mixture of Experts(MoE)架构 解析
输入“/”快速插入内容
Mixture of Experts(MoE)架构 解析
用户4242
用户4242
4月10日修改
原帖链接:
https://x.com/amitiitbhu/status/2042214049350664668
在这篇博客里,我们会学习 Mixture of Experts(MoE)架构,理解什么是 experts,router 如何选择它们,为什么 MoE 能让大模型更快、更便宜,以及为什么它驱动了如今很多最强大的大语言模型(LLMs)。
当我们听到 “Mixture of Experts” 这个词时,它听起来很复杂。但别担心。如果我们把它拆成各个独立部分来看,每一个部分都很简单。我们的目标,是把这个架构讲解得足够清楚,这样到最后,我们就能把 Mixture of Experts 的工作原理解释给任何人听。
我们将覆盖以下内容:
•
为什么需要 Mixture of Experts
•
“expert” 到底是什么意思
•
router 以及它如何选择 experts
•
MoE 在 Transformer 中位于哪里
•
sparse activation 以及它为什么能节省算力
•
experts 之间的负载均衡
•
MoE 的优点与挑战
•
为什么 MoE 驱动了许多现代 LLMs
我是 Amit Shekhar,来自
Outcome School
,我在那里教授人工智能与机器学习。
我们开始吧。
整体概览
在进入细节之前,先来理解整体图景。
Mixture of Experts 模型是一种特殊的神经网络。它不是对每个输入都使用一个大网络,而是拥有许多更小的网络,这些网络被称为 experts,并且对于每个输入只激活其中少数几个。一个称作 router 的小组件,会决定对每个输入应该使用哪些 experts。
用简单的话说:Mixture of Experts = 很多个小型 expert 网络 + 一个负责挑选它们的 router。
你可以把它想成一家医院。医院不会只有一个医生给所有病人看病。它会有很多专科医生,比如心脏专科、皮肤科、脑科等等。当病人走进来时,接待员(router)会把他带到合适的专科医生(expert)那里。病人不需要见医院里的每个医生。他只会见那些和自己问题相关的人。
这正是 Mixture of Experts 在 LLM 内部的工作方式。
为何需要Mixture of Experts 模型?
在 MoE 之前,大语言模型是 dense 的。Dense 的意思是:每个 token 都会使用模型中的每一个参数。如果一个模型有 1000 亿参数,那么在推理时,每个 token 都会使用全部 1000 亿参数。
这有两个大问题:
问题 1:计算成本。随着模型为了变得更聪明而不断变大,计算成本也随之上涨。更大的模型意味着更慢的推理,以及每个 token 更高的 GPU 成本。
问题 2:容量浪费。并不是每个输入都需要模型的每个部分。不同输入会从不同子网络中受益,但在 dense 模型里,每个输入都会被迫流经每一个参数,不管它需不需要它们。
所以,Mixture of Experts 登场来解决这个问题。它让我们能够构建一个参数总量极其巨大的模型,但每个输入只使用其中很小的一部分。我们获得了一个超大模型的好处,却不需要支付全部计算成本。
什么是Expert?
Expert 本质上只是一个小型神经网络。在大多数现代 LLM 中,每个 expert 都是一个小型 feed-forward network,也就是我们在
Transformer 架构
中所熟知的同类型前馈网络。
MoE 模型中的一个 Transformer layer,可以并排放置 8 个 experts,或者 64 个 experts,甚至 128 个 experts。每个 expert 自身都是一个完整的 feed-forward network。
注意:“expert” 这个词可能会造成误解。Expert 并不是被专门训练来处理数学或物理。模型会在训练过程中自己学会,哪些 experts 该处理哪些类型的输入。在实践里,experts 往往是根据低层模式进行专门化的,比如标点、词类型或 token 形状,而不是根据高层主题。没有人手工给它们打标签。
路由模块
现在我们已经有许多 experts 并排坐在一起,接下来的问题就是:模型如何决定每个输入该使用哪个 expert?
这就是 router 发挥作用的地方。Router 是一个非常小的神经网络,它查看每个输入 token,并决定哪些 experts 应该处理它。在实践中,router 通常只是一个 linear layer 加一个 softmax,而不是一个深网络。
Router 通过三个简单步骤工作。
首先,router 会查看输入 token,并为每个 expert 生成一个分数。如果有 8 个 experts,那么 router 就会生成 8 个分数。背后的数学很简单:Router(x) = Softmax(x * W_router),其中 x 是输入 token,W_router 是 router 学到的权重矩阵。这里的Softmax只是一个把原始分数变成概率的函数,这些概率加起来等于 1。
然后,router 会挑出得分最高的 top-k experts。在大多数 MoE 模型里,k = 2,也就是说每个 token 只会选出得分最高的两个 experts。有些模型,比如 Switch Transformer,则使用 k = 1。
最后,token 只会被发送给这 top-k 个 experts。其他 experts 对于这个 token 会被完全跳过。
下面是一个简单的 router 选 expert 示意图。假设在这个例子里,router 选中了 E3 和 E5: