大模型入门:彻底学会MOE
1 Dense & MOE Dense:每次激活全部参数。 MoE :用一个轻量级的路由器,为每个输入的 Token,动态地、稀疏地选择一小部分专家来激活和计算。专家通常就是FFN。 这样做的好处是什么?假设我们有64个专家,但路由器每次只选择2个。那么: 参数量巨大:模型的总参数量是64个专家的总和,规模非常庞大,这让它有能力“记忆”更多的世界知识。 计算量不变:在一次前向传播中,每个 Token 实际只经过了2个专家的计算。如果每个专家的大小和原始密集模型的FFN大小相仿,那么计算成本(FLOPs)就只增加了路由器的开销,几乎可以忽略不计。 一句话总结:MoE 用“总参数量巨大”换取了“知识容量”,同时通过“稀疏激活”维持了极低的“计算成本”。 2 路由器如何选择专家? 可以想到有很多种选择方式,但越复杂的规则训练越麻烦,因此目前主流是token选择k个专家。 3 主流top k routing方法 token采用什么方式选择k个专家?比如RL选,运筹学解,但是都太复杂,还是训练复杂的问题。 这里介绍主流top k routing方法。 我们以处理单个 Token t 的第 l 层 MoE 模块为例,并假设 K=2。 第 1 步:输入就位 (Input) 一个 Token 经过前序模块的计算,以向量 $u_t^l$ 的形式抵达 MoE 层。这个向量是该 Token 在当前层的丰富语义表示。 第 2 步:计算“亲和度”并归一化 (Affinity Scoring & Normalization) 路由器需要判断该将这个 Token $u_t^l$ 发送给哪个专家。为此,它为每个专家 i 维护一个可学习的“身份”向量 $e_i^l$。 路由器通过计算输入向量 $u_t^l$ 与每一个专家身份向量 $e_i^l$ 的点积 (dot product),来衡量它们之间的“亲和度”或“匹配度”。点积结果越大,代表该专家越适合处理这个 Token。 ...