@misc{lo2024closerlookmixtureofexpertslarge,
title={A Closer Look into Mixture-of-Experts in Large Language Models},
author={Ka Man Lo and Zeyu Huang and Zihan Qiu and Zili Wang and Jie Fu},
year={2024},
eprint={2406.18219},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2406.18219},
}
引言
随着大型语言模型(LLMs)的出现,自然语言处理领域发生了革命性的变化。研究人员通过增加模型规模和训练数据量,不断推升这些模型的能力。然而,这也带来了训练成本和复杂性的急剧增加,迫切需要新的解决方案来更好地平衡预训练效率和模型性能。专家混合(Mixture-of-Experts, MoE)架构通过动态路由输入到一部分专家,从而在不牺牲计算效率的情况下,实现模型的大规模扩展。
Mixture-of-Experts 概述
MoE模型通过用N个并行的前馈网络(FFNs)替换原有的FFNs,并结合一个路由器来增强Transformer。这些并行的FFNs被称为专家,每个专家通过路由器的评分分布来接收输入。公式如下:
[ \mathbf{y} = \sum_{n \in N} g_{n}(\mathbf{x}; \mathbf{G}, k) E_{n}(\mathbf{x}) ]
当Top-k小于N时,仅有部分专家参与计算,这被称为稀疏专家混合(SMoE)。
方法概述
本文选取了Mixtral 8x7B. DeepSeekMoE和Grok-1三个模型进行分析,并附加了标准的Transformer模型Mistral 7B作为对比。研究分为静态参数分析和动态行为分析两部分。✅
静态参数分析
专家权重矩阵
在矩阵级别,我们计算了所有专家在每一层的投影矩阵Wup、Wgate和Wdown之间的相似性,并用PCA将这些矩阵扁平化为二维空间。结果显示,不同模型的矩阵相似性模式存在显著差异。
门嵌入
门嵌入的相似性分析显示,Mixtral和DeepSeek的门嵌入与专家选择的权重矩阵Wgate之间存在较强的相关性,这表明门嵌入和Wgate可能学习了相似的知识来执行选择操作。
动态行为分析
专家输出
通过输入短序列和长序列,我们测量了专家输出特征向量之间的相似性。结果显示,被选择的专家输出更相似,尤其是在Mixtral模型中。
专家输出的L2范数和门评分
在Mixtral模型中,我们发现被选择的专家通常输出范数最大,这表明范数可能是门决策的关键因素之一。这一发现与CompeteSMoE的设计一致,该设计基于输出范数选择专家。
讨论
基于我们的分析,我们提出了一些关于MoE模型的建议:
相关工作
现有的大部分工作从路由器的角度分析MoE,通过观察专家选择来研究其行为。近年来的研究发现标准路由器并未在领域级别表现出明显的专业化,主要基于token ID进行路由。
结论
本文首次尝试通过研究参数和输出来揭示MoE模型的内部工作机制。我们总结了实证观察,并提出了一些实用建议。虽然目前还无法全面回答MoE是否学习了异质的专家,但我们的一些实验表明,特定的架构设计和训练框架可能更有利于专家的专业化。
限制
我们的分析主要基于观察,缺乏进一步验证的干预措施。
GitHub – kamanphoebe/Look-into-MoEs: A Closer Look into Mixture-of-Experts in Large Language Models
这个GitHub仓库包含了论文《A Closer Look into Mixture-of-Experts in Large Language Models》的代码。以下是仓库的主要内容和使用指南:
概述
我们首次尝试理解基于MoE的大型语言模型的内部工作机制。具体来说,我们全面研究了三个基于MoE的模型(Mixtral 8x7B, DeepSeekMoE, Grok-1)的参数和行为特征,揭示了一些有趣的观察结果,包括:
基于这些观察结果,我们还为MoE实践者提供了一些建议,如路由器设计和专家分配。
使用指南
默认情况下,我们的代码从ckpt目录加载预下载的模型。你也可以修改代码直接从HuggingFace下载。我们使用的模型下载链接如下:
创建conda环境后,需要将其选为Jupyter内核。
两个Jupyter notebooks(static_analysis.ipynb和dynamic_analysis.ipynb)分别包含了关于静态参数和动态行为的实验代码。你可以简单地运行每个实验对应的代码块,这些代码块的标题与论文中的实验名相同。
引用
如果你觉得我们的工作有用,请引用我们的论文:
致谢
我们的模型配置和建模文件借用了HuggingFace仓库中的相应文件,感谢这些作者的出色工作。
通过这个GitHub仓库,研究者可以复现论文中的实验,并进一步探索MoE模型的内部机制。