大模型(LLM)驱动的应用现在随处可见,国内的豆包、Kimi、文心一言等,国外的ChatGPT、Gimini、Perplexity等。然而,随着模型规模的不断扩大,训练和部署这些模型面临着巨大的计算挑战。DeepSeek引入了一种高效的混合专家(MoE: Mixture of Expers)网络,有效地解决了这一问题。本文咱们谈谈DeepSeek MoE和传统密集型网络(Dense Model)之间的差异。希望懂算法的和不懂算法的都能够有一些裨益。注:法国有一家AI初创公司Mixtral也是使用MoE比较早的玩家。
一、什么是混合专家(MoE)?
混合专家(MoE)是一种集成学习方法,它将一个大型的神经网络分解成多个较小的、专门化的“专家”网络。对于每个输入,一个“门控网络”决定激活哪些专家来处理该输入,并将它们的输出进行组合。这种方法的核心思想是“分而治之”,让不同的专家专注于不同的输入模式或子任务,从而提高整体模型的效率和性能。
MoE的核心组成部分包括:
-
专家网络(Experts):
一组独立的神经网络,每个专家都专注于处理特定的输入子集或特征空间。专家可以是任何类型的神经网络,例如前馈网络(FFN)、卷积神经网络(CNN)或循环神经网络(RNN)。
-
门控网络(Gating Network):
一个根据输入动态地选择激活哪些专家的网络。门控网络通常是一个简单的神经网络,它接收输入并输出每个专家的权重或概率。
-
组合机制(Combination Mechanism):
将激活专家的输出进行组合以产生最终输出的方法。常用的组合方法包括加权平均、加权求和等。

二、DeepSeek MoE有2个创新点
-
更细粒度的专家划分: 传统MoE通常使用相对较少的专家,每个专家处理较大范围的输入。DeepSeek则采用了更细粒度的专家划分策略,将专家数量增加,每个专家负责更小、更专业的输入空间。这种细粒度的划分使得专家能够更好地捕捉输入数据中的细微差别,提高了模型的表达能力和泛化性能。例如,传统的MoE可能使用8个专家,而DeepSeek v3使用了256个,但每次激活的专家数量仍然保持在一个较小的水平(例如8个)。这样,虽然专家总数增加了,但计算量并没有显著增加,反而因为专家的专业化而提高了效率。这也是大家津津乐道的DeepSeek v3有6710亿参数,但运行的时候只有370亿参数激活。
-
设备受限的路由机制: 在分布式训练和推理环境中,MoE面临着专家之间通信开销大的问题。DeepSeek设计了一种设备受限的路由机制,有效地减少了跨设备的数据传输。具体来说,DeepSeek将专家分配到不同的设备上,并限制每个设备只能访问本地的专家。这样,路由过程只需要在本地设备上进行,大大减少了跨设备的通信量,提高了训练和推理的效率。这种方法尤其适用于大规模模型和大规模数据集的场景。
下面是一个简化的Transformer Decoder架构图(目前主流的大模型都是这个架构)

下面是Dense Model与MoE的两个架构图

上面3个图引用自 https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-mixture-of-experts
下面是一个DeepSeek v3中MoE简化实现(可以直接复制后运行)
import torch
import torch.nn as nn
import torch.nn.functional as F
class Expert(nn.Module):
def __init__(self, input_dim, output_dim):
super().__init__()
self.fc = nn.Linear(input_dim, output_dim)
def forward(self, x):
return F.relu(self.fc(x))
class MoE(nn.Module):
def __init__(self, input_dim, num_experts, num_selected_experts):
super().__init__()
self.experts = nn.ModuleList([Expert(input_dim, input_dim) for _ in range(num_experts)])
self.gate = nn.Linear(input_dim, num_experts)
self.num_selected_experts = num_selected_experts
def forward(self, x):
gate_logits = self.gate(x)
gate_probs = F.softmax(gate_logits, dim=-1)
top_k_indices = torch.topk(gate_probs, self.num_selected_experts, dim=-1)[1]
top_k_probs = torch.gather(gate_probs, 1, top_k_indices)
expert_outputs = []
for i in range(x.size(0)): # Batch dimension
batch_expert_outputs = []
for j in range(self.num_selected_experts):
expert_index = top_k_indices[i, j]
expert_input = x[i].unsqueeze(0) # Add batch dimension for expert
expert_output = self.experts[expert_index](expert_input)
batch_expert_outputs.append(expert_output * top_k_probs[i, j])
expert_outputs.append(torch.sum(torch.stack(batch_expert_outputs), dim=0))
return torch.stack(expert_outputs).squeeze(1)
# Example Usage
input_dim = 128
num_experts = 16
num_selected_experts = 4
batch_size = 32
moe_layer = MoE(input_dim, num_experts, num_selected_experts)
input_tensor = torch.randn(batch_size, input_dim)
output_tensor = moe_layer(input_tensor)
print(output_tensor.shape) # Output: torch.Size([32, 128])
这个简化的示例代码展示了DeepSeek v3 Transformer模型中MoE的实现。其中,Gate类实现了门控网络的功能,Expert类定义了每个专家的结构,MoE类将它们组合在一起。代码中使用了torch.topk选择top-k专家,并使用torch.bincount统计每个专家的激活次数,以进行负载均衡。
混合专家网络(MoE)与传统密集型网络(Dense Model)的差异

三、如何系统学习掌握AI大模型?
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份
全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

4. 2024行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以
微信扫描下方优快云官方认证二维码,免费领取【保证100%免费】

591

被折叠的 条评论
为什么被折叠?



