mHC:把残差连接约束到双随机矩阵流形,DeepSeek V4 的隐架构创新

翻开 DeepSeek V4 公开技术文档,多数人直奔 MoE 与上下文长度,却容易漏掉一个不起眼的名词:流形约束超连接,简称 mHC。它改的是深度学习最基础的那根骨架——残差连接。 残差连接好好的,为什么需要加约束? 从 ResNet 以来,残差连接让深层网络可以训练,但层与层之间的信息流是自由生长的:每一层的输出随意叠加回主干。在超大 MoE 模型里,这种自由度会放大信号方差,个别层的输出可能主导整条残差流,训练后期出现不稳定。 mHC 的做法是把每层的残差映射约束到双随机矩阵构成的流形上,也就是数学上的 Birkhoff 多面体。直观理解:它要求各层对主干的贡献「既公平又归一」,既不让某一层喧宾夺主,又保证信息在深层网络里均匀流动。 mHC 这类底层改动为什么没人谈却很重要? 这类改动不像换 MoE 专家数那样有话题度,但它直接影响两件事:训练能不能稳定跑到极致规模,以及推理时输出会不会突然跑偏。对做大模型训练的团队,mHC 这类「把结构先验写进网络」的思路,比单纯堆参数更决定上限。 把 mHC 写进 model card 对社区意味着什么? DeepSeek 把 mHC 写进公开 model card,等于把一个原本只在内部实验室流传的训练技巧摆上桌面。开源社区可以复现、消融、改进——这也是 V4 技术文档开放的真正价值:比权重更值钱的,是设计权重时的那些约束。 这件事对自己训练模型的人有什么启发? 如果你在微调或预训练自己的模型,残差流的稳定性往往是被忽略的瓶颈。mHC 这类约束的思路可以借鉴:不必照搬双随机矩阵,但可以给各层输出加温和的归一化约束,避免某几层在训练后期主导梯度。观察手段也简单——画出各层残差贡献随训练步数的曲线,看是否出现个别层异常突出。如果出现,就说明你的网络在「押注少数层」,长期看会限制规模上限。这类底层改动平时看不见,一旦出问题就是训练崩在半路。把约束写进网络结构,比靠调学习曲线去救要可靠得多。 去论坛讨论 这篇文章里的观点,欢迎到硅基AGI论坛讨论。按标题搜索:mHC超连接

2026-10-09 · 1 min · 42 words · AI 实战派

原生多模态 vs 外挂视觉:V4.1-Flash 把视觉理解塞进主干之后

DeepSeek 更新日志在描述 V4.1-Flash 时特意点出「具备原生多模态视觉理解能力」。这个措辞值得多停一秒:它意味着视觉不再是事后挂上去的插件,而是和语言主干一起训练、一起推理。 外挂 CLIP 的老路线到底有什么历史包袱? 早期多模态做法是把一个预训练视觉编码器(类似 CLIP)抽出来,加一层投影,把图像特征塞进语言模型的词嵌入空间。这条路上手快,但有两个硬伤:视觉编码器与语言主干是两套训练目标,对齐靠薄薄一层投影;图像 token 与文本 token 在表示上始终有隔阂。 原生多模态到底在架构上改了什么? 原生多模态让图像 patch 直接作为输入序列的一部分进入主干,与文本共享同一套注意力与专家路由。好处是视觉与语言在联合训练中互相校准,文档理解、图表推理这类「图文绑定」任务更自然。代价是训练流水线更复杂,视觉编码器的改动会直接波及语言能力,需要小心平衡。 原生多模态对应用层意味着什么? 对开发者,原生多模态最直接的影响是「少一次模型切换」。过去要先调视觉模型再把结果喂给语言模型,现在一次调用同时拿到图文理解。在 OCR、截图排错、PDF 问答这类场景,链路变短、延迟变低、失败点变少。 怎么判断一个模型是真原生还是假原生? 2026 年下半年,原生多模态会从旗舰下放到 Flash 档。判断一个模型是不是真原生,看它的技术文档如何描述视觉 token 与主干的融合方式——只说「支持图片输入」的,多半仍是外挂。 这条自检清单能帮你认出真原生吗? 判断一家模型是不是原生多模态,可以问三个问题:技术文档是否说明视觉 token 与语言主干共享注意力;一次调用能否同时完成图文问答与推理,而非先识图再转文本;图表、截图这类含结构信息的输入,表现是否显著优于外挂模型。三个问题里中两个,才算真原生。对做文档智能、多模态 Agent 的团队,这直接决定了系统架构——原生模型让你能砍掉独立的视觉服务与结果中转,少一整层失败点和延迟。但也要留意,原生多模态对 OCR 这类纯文字任务未必更省,按场景搭配仍是常态。 去论坛讨论 这篇文章里的观点,欢迎到硅基AGI论坛讨论。按标题搜索:原生多模态

2026-10-09 · 1 min · 38 words · AI 实战派

DeepSeek-V4.1-Flash 架构拆解:552B MoE 背后的非对称激活与混合注意力

10 月 8 日多家媒体跟进 DeepSeek 新一轮融资传闻,同日其更新日志里的 V4.1-Flash 技术细节被再度翻出。这是 DeepSeek 全新结构系列中最小的模型,却把总参数做到 552B 的 MoE 规模,同时原生支持多模态视觉理解。本文不聊融资,只拆它的架构为什么能又快又便宜。 DeepSeek-V4.1-Flash 为什么要做输入 8B、输出 16B 的非对称激活? 主流 MoE 长期把每 token 的激活参数做成对称的一套专家路由,V4.1-Flash 改成了非对称:输入阶段激活约 8B 参数,输出阶段激活约 16B。直觉上,prefill 阶段要一口气吃掉整段上下文,算力吃紧,少激活一点专家;decode 阶段逐个吐 token,带宽吃紧却需要更强的生成能力,于是多激活一点。这种把「算得动」与「写得好」分开定价的做法,本质是把 MoE 的路由开销按前后台重新分配。 配合全新的 Causal-Encoder-Decoder 结构,它不再是 V4-Flash 的增量改版,而是一次结构换代,上下文给到 1M tokens,最大输出 384K tokens。 CSA 与 HCA 是怎么把百万上下文压下来的? V4 技术文档披露的另一组关键改动是混合注意力:Compressed Sparse Attention(CSA)负责压缩 KV,Heavily Compressed Attention(HCA)做更激进的压缩。二者叠加,让百万级上下文不再等于线性膨胀的显存账。保留自 V3 的多 Token 预测(MTP)继续在训练侧帮助收敛。 GPQA 90.9、HLE 36.8 这个坐标说明它在什么水平? 更新日志给出的参考点是 GPQA Diamond 90.9、HLE 36.8。前者说明理科推理已摸到第一梯队,后者提醒最难开放题仍远未解决。对工程团队而言,真正的信号是:这套结构被设计成「能力上限更高、速度更快、吞吐更大、可扩展到更大模型」——V4.1-Flash 是新结构的试金石,更大的型号已在路上。 这套架构折算到部署上意味着什么? 把这套架构折算成部署选择:552B 总参但只激活 8B 到 16B,意味着单 token 计算量远小于同规模稠密模型,吞吐天然占优;百万上下文叠加 CSA 与 HCA 压缩,又把 KV 膨胀控制在可接受范围。两者相乘,才是它敢把缓存命中价压到极低的工程底气。需要注意的是,非对称激活对并行策略有要求——输入与输出走不同专家集合,张量并行与专家并行的切分必须配套,否则容易出现负载不均。上线前务必压测不同并发下的尾延迟,别只看标称吞吐。 ...

2026-10-09 · 1 min · 83 words · AI 实战派
MoE混合专家模型详解:从Switch Transformer到DeepSeek-MoE

MoE混合专家模型详解:从Switch Transformer到DeepSeek-MoE

MoE架构的本质思想 混合专家模型(Mixture of Experts, MoE)的核心思想非常直观:不要让每个Token都经过所有参数的计算,而是为每个Token选择最合适的"专家"子网络来处理。这类似于医院分诊——患者不会被所有医生同时看诊,而是根据症状被分配给对应科室的专家。 MoE vs Dense模型对比 特性 Dense模型 MoE模型 参数利用率 100%(每个Token激活所有参数) 5-20%(仅激活部分专家) 总参数量 固定 可扩展至更大规模 训练成本 与参数量成正比 与激活参数量成正比 推理成本 与参数量成正比 与激活参数量成正比 模型容量 受限于计算预算 可用更大容量模型 MoE架构演进史 第一代:经典MoE(2017-2020) 最早的MoE思想可追溯到1991年Jacobs等人提出的自适应混合模型。在现代深度学习中,Google的GShard(2020)首次将MoE引入Transformer架构: # GShard MoE 的核心逻辑(简化版) import torch import torch.nn as nn import torch.nn.functional as F class MoELayer(nn.Module): def __init__(self, d_model, num_experts, top_k=2): super().__init__() self.num_experts = num_experts self.top_k = top_k # 门控网络 self.gate = nn.Linear(d_model, num_experts) # 专家网络(每个专家是一个FFN) self.experts = nn.ModuleList([ nn.Sequential( nn.Linear(d_model, d_model * 4), nn.GELU(), nn.Linear(d_model * 4, d_model) ) for _ in range(num_experts) ]) def forward(self, x): # x shape: (batch_size, seq_len, d_model) gate_logits = self.gate(x) # (batch, seq, num_experts) # 选择Top-K专家 gate_scores = F.softmax(gate_logits, dim=-1) topk_scores, topk_indices = torch.topk(gate_scores, self.top_k, dim=-1) # 归一化专家权重 topk_scores = topk_scores / topk_scores.sum(dim=-1, keepdim=True) # 计算加权输出 output = torch.zeros_like(x) for i in range(self.top_k): expert_idx = topk_indices[..., i] # (batch, seq) weight = topk_scores[..., i:i+1] # (batch, seq, 1) for e in range(self.num_experts): mask = (expert_idx == e) if mask.any(): expert_input = x[mask] expert_output = self.experts[e](expert_input) output[mask] += expert_output * weight[mask] return output 第二代:Switch Transformer(2021) Google在2021年提出的Switch Transformer将Top-2简化为Top-1路由,大幅降低了通信开销: ...

2026-07-29 · 4 min · 698 words · 硅基 AGI 探索者
Nous Hermes 4架构解析:开源对齐的新范式

Nous Hermes 4架构解析:开源对齐的新范式

Hermes 4:开源对齐的里程碑 Nous Research的Hermes系列一直是开源大模型对齐研究的标杆。2026年发布的Hermes 4不再仅仅是一个"经过微调的Llama"——它提出了一套完整的开源对齐方法论,挑战了以RLHF为主导的闭源对齐范式。 架构全景 基座选择 Hermes 4基于Llama 4 70B构建,但进行了多项架构级修改: ┌─────────────────────────────────────────────┐ │ Hermes 4 架构 │ ├─────────────────────────────────────────────┤ │ ┌─────────┐ ┌──────────┐ ┌────────────┐ │ │ │ MoE路由 │ │ 长上下文 │ │ 工具调用 │ │ │ │ (64专家) │ │ (256K) │ │ 原生层 │ │ │ └────┬────┘ └────┬─────┘ └─────┬──────┘ │ │ │ │ │ │ │ ┌────▼────────────▼──────────────▼──────┐ │ │ │ 统一注意力层 │ │ │ │ (GQA + 滑动窗口 + 全局token) │ │ │ └────────────────────────────────────────┘ │ │ ┌────────────────────────────────────────┐ │ │ │ 对齐适应层 │ │ │ │ (Neutral Training + DPO + Constitutional)│ │ │ └────────────────────────────────────────┘ │ └─────────────────────────────────────────────┘ 关键架构创新 1. 原生工具调用层 ...

2026-07-29 · 3 min · 436 words · 硅基 AGI 探索者
MoE架构深度解析:混合专家模型的训练与推理优化

MoE架构深度解析:混合专家模型的训练与推理优化

MoE:用稀疏激活突破密集模型的效率瓶颈 混合专家模型(Mixture of Experts)通过稀疏激活机制,让模型总参数量巨大但每次推理只激活一小部分。DeepSeek-V3的671B参数中每次只激活37B,Llama 4的500B+参数只激活30B——这就是MoE的效率魔法。 MoE的数学基础 标准MoE层 给定输入 $x$,MoE层的计算过程: $$y = \sum_{i=1}^{N} g_i(x) \cdot f_i(x)$$ 其中 $f_i$ 是第 $i$ 个专家(一个FFN),$g_i$ 是路由函数: $$g_i(x) = \text{softmax}(W_g \cdot x)_i$$ Top-K路由只保留 $K$ 个最大的 $g_i$,其余置零: $$g_i(x) = \begin{cases} \frac{\exp(W_g \cdot x)i}{\sum{j \in \text{TopK}} \exp(W_g \cdot x)_j} & i \in \text{TopK} \ 0 & \text{otherwise} \end{cases}$$ 专家容量因子 为防止所有token路由到同一专家(路由崩塌),每个专家有一个容量上限: $$\text{capacity} = \frac{T \cdot K}{N} \times \text{capacity_factor}$$ 其中 $T$ 是token数,$K$ 是Top-K,$N$ 是专家数。超出容量的token被丢弃或传递到下一层。 路由机制设计 标准Top-K路由 最简单的路由方式。每个token独立选择Top-K个专家: class TopKRouter(nn.Module): def __init__(self, dim, n_experts, top_k=2): self.gate = nn.Linear(dim, n_experts) self.top_k = top_k def forward(self, x): # x: [batch * seq_len, dim] logits = self.gate(x) scores = F.softmax(logits, dim=-1) # Top-K选择 topk_scores, topk_indices = scores.topk(self.top_k, dim=-1) topk_scores = topk_scores / topk_scores.sum(dim=-1, keepdim=True) return topk_scores, topk_indices 专家选择路由 DeepSeek-V3使用了一种"专家选择"的反向路由:每个专家选择Top-K个token,而非token选择专家。这平衡了专家负载: ...

2026-07-16 · 3 min · 445 words · 硅基 AGI 探索者

深度解析注意力机制的变体与演进

深度解析注意力机制的变体与演进 注意力机制是Transformer架构的灵魂。自2017年"Attention is All You Need"发表以来,围绕标准Self-Attention的改进工作从未停止。在2026年,这个领域已经发展出一棵枝繁叶茂的技术树。本文将系统梳理注意力机制的主要演进方向和关键变体。 标准Self-Attention回顾 标准注意力机制的核心公式 O = softmax(QK^T / √d_k) V,其计算复杂度为O(n²d),其中n是序列长度,d是特征维度。这个n²复杂度是所有注意力优化的核心敌人——当序列长度从2K增长到128K,计算量增长4000倍。 标准注意力还有两个特性值得注意:一是它是一种"全局注意力",每个位置都和所有位置交互;二是它是"内容相关"的,注意力权重完全由Q和K的内容决定。后续的许多变体正是从打破这两个特性入手的。 稀疏注意力:降低交互密度 Sparse Attention Sparse Attention的核心思想是:并非所有位置对之间都需要注意力交互。通过限制每个位置只关注局部窗口和少数"全局位置",计算复杂度可以从O(n²)降到O(n√n)或O(n log n)。 Longformer和BigBird是这个方向的代表。Longformer使用滑动窗口加少量全局token的策略,适合长文档处理。BigBird在滑动窗口基础上增加了随机连接,从理论上证明了随机性对表达能力的贡献。 Block Sparse Attention 将注意力矩阵分块,只计算部分块的注意力。GPT-4系列模型使用的便是这种策略——将序列分成固定大小的块,块内全注意力,块间稀疏注意力。这种方法在硬件实现上效率很高,因为矩阵分块运算天然适合GPU的Tensor Core。 线性注意力:打破二次方魔咒 线性注意力是数学上最优雅的改进方向。其核心思想是将softmax(QK^T)V改写为φ(Q)(φ(K)^T V)的形式,利用矩阵乘法结合律,将复杂度从O(n²d)降到O(nd²)。当d远小于n时(这在大模型中通常成立),这是一个巨大的加速。 Performer Performer使用随机特征映射(Random Features)来近似softmax函数。其优势是理论保证好——近似误差可以控制。但实践中,近似精度和下游任务性能之间存在权衡。 Linear Transformer Linear Transformer使用ELU+1作为核函数替代softmax,更加简洁。虽然近似程度不如Performer,但计算效率更高,且在某些任务上表现意外地好。 线性注意力的共同问题是:信息瓶颈。当序列长度远大于特征维度时,线性注意力的表达能力受限,因为所有信息需要压缩到d×d的矩阵中。这导致线性注意力在需要精确位置信息的任务上表现较差。 Flash Attention:硬件感知的优化 Flash Attention不是一个数学上的改进,而是一个系统工程的突破。它通过利用GPU的SRAM层次结构,将注意力计算分块进行,避免在HBM(高带宽内存)和SRAM之间反复搬运数据。 虽然理论上仍然是O(n²)复杂度,但实际运行速度快2-4倍,内存使用大幅降低。到2026年,Flash Attention 3已经支持Hopper架构的异步数据搬运,进一步利用了TMA(Tensor Memory Accelerator)和TMA-aware的并行策略。 Flash Attention的成功给我们的启示是:在大模型时代,算法优化不能只看渐近复杂度,必须考虑硬件特性。一个"理论复杂度更高但硬件友好"的算法,在实践中可能优于"理论复杂度更低但硬件不友好"的算法。 长上下文注意力 RoPE与位置外推 旋转位置编码(RoPE)本身不是注意力变体,但它极大影响了长上下文注意力的工作方式。RoPE的优势是可以通过插值实现位置外推——用32K位置训练的模型可以外推到128K甚至更长。 YaRN(Yet another RoPE extensioN)进一步改进了外推方法,通过分段插值和温度调整,在128K上下文上取得了更好的效果。到2026年,大多数支持长上下文的主流模型都采用了基于RoPE的外推方案。 Ring Attention Ring Attention解决了超长上下文的分布式计算问题。它将序列分布在多个GPU上,每个GPU计算局部的注意力,然后通过环形通信传递中间结果。这使得在有限显存下处理1M+长度序列成为可能。 注意力机制的效率-表达力权衡 回顾所有这些变体,我们能看到一个共同的权衡:计算效率 vs 表达能力。 标准注意力:表达力最强,效率最低 稀疏注意力:表达力中等,效率较好,适合超长序列 线性注意力:效率最高,表达力受限,适合中等长度但高吞吐场景 Flash Attention:表达力等同标准,效率提升2-4倍,是"免费午餐" 实践中,大多数2026年的大模型采用的是Flash Attention + 稀疏注意力的混合方案。在8K-32K的标准上下文窗口内使用Flash Attention,在32K+的扩展窗口上切换到稀疏模式。 ...

2026-07-13 · 1 min · 85 words · 硅基 AGI 探索者

深度解析MoE架构:混合专家模型如何工作

深度解析MoE架构:混合专家模型如何工作 Mixture of Experts(MoE)是近年来大模型架构领域最重要的创新之一。DeepSeek-V3、Mixtral等模型的成功让MoE从学术概念走向工业实践。理解MoE的工作原理,对于把握大模型架构的发展方向至关重要。 MoE的核心思想 传统密集模型中,每个输入token都要经过所有参数的计算。MoE打破了这一范式:对于每个token,只激活一小部分"专家"网络进行计算。这使得模型可以在不增加计算量的情况下大幅增加参数量。 具体来说,一个MoE层包含N个并行的前馈网络(专家)和一个门控网络(路由器)。对于每个输入,路由器计算一个概率分布,选择Top-K个专家进行计算,然后加权合并这K个专家的输出。 路由机制:MoE的心脏 路由器是MoE最关键的组件。它的设计直接影响模型性能和训练稳定性。 标准Top-K路由 最基础的路由方式:路由器是一个线性层加softmax,输出N个专家的概率分布,选择概率最高的K个。Mixtral 8x7B使用N=8, K=2,即每个token由2个专家处理。 路由的挑战 路由崩塌:训练过程中,路由器可能倾向于将大部分token分配给少数几个专家,导致其他专家"饿死"。解决方法是引入辅助损失函数——当专家负载不均衡时,增加额外的loss惩罚。 Token丢弃:当某个专家接收的token超过容量限制时,多余token被丢弃。这会导致信息损失。我们采用了"容量因子"机制——在训练时动态调整每个专家的容量上限,在负载均衡和计算效率之间取得平衡。 噪声注入:在路由器输出上添加噪声可以改善负载均衡。这看似简单,但效果显著——噪声帮助路由器探索更多路由可能性,避免过早收敛到不均衡的状态。 负载均衡:让每个专家都工作 负载均衡是MoE训练的核心难题。如果某些专家几乎不被激活,模型的有效参数量就远小于标称参数量,造成浪费。 辅助损失法 最经典的方案是引入辅助损失:计算每个专家被选中的频率,与均匀分布的差异作为额外loss。当某个专家被过度使用或过少使用时,loss增加,驱动路由器走向均衡。 Expert Choice路由 传统路由是"token选专家",Expert Choice反过来——“专家选token”。每个专家根据自身专长选择最适合的token。这种方式自然实现了负载均衡,因为每个专家的选择预算是固定的。但Expert Choice在自回归生成中不适用(因为未来token不可见),所以主要用于训练阶段。 序列级均衡 Token级的均衡可能导致序列级别的偏差——某些序列被过度分配给特定专家。我们采用了序列级辅助损失,确保每个序列内的专家分配也是均衡的。 MoE的训练特性 MoE模型的训练与密集模型有显著差异: 训练效率:MoE模型可以在相同计算预算下训练更多参数。DeepSeek-V3用2360亿总参数实现了与密集模型相当的计算量,但性能更强。这是因为每个token只激活少量专家,FLOPS远低于密集模型。 通信开销:在分布式训练中,MoE引入了额外的all-to-all通信——token需要被发送到存储对应专家的GPU上。这使得MoE训练的通信开销显著高于密集模型。解决方案包括:使用专家并行+数据并行混合策略、减少all-to-all的频率、以及通信计算重叠。 训练不稳定性:MoE训练比密集模型更容易出现loss spike。原因包括路由器的离散决策导致梯度不稳定、专家间负载不均衡导致的梯度偏差。我们采用了更大的warmup步数、更小的学习率和梯度裁剪来稳定训练。 推理优化 MoE推理的主要优势是计算效率——尽管模型总参数很大,但每个token只激活一小部分。关键优化点在于: 专家缓存:将不活跃的专家参数卸载到CPU内存或SSD,只在需要时加载到GPU。这使得在有限GPU显存下运行大MoE模型成为可能。 动态批处理:将不同序列中路由到同一专家的token合并处理,提高GPU利用率。这比密集模型的批处理复杂得多,因为每个序列的专家分配不同。 结语 MoE架构代表了"参数效率"的一个新方向——不是让每个参数都参与每次计算,而是让参数各司其职。随着路由算法和分布式训练技术的成熟,MoE正在成为超大模型的主流架构。未来,我们可能会看到更细粒度的MoE——不只是FFN层,注意力层、甚至嵌入层都可能采用专家混合机制。 本文同步发布于 硅基AGI论坛

2026-07-12 · 1 min · 42 words · 硅基 AGI 探索者
深度解析MoE架构:混合专家模型如何工作

深度解析MoE架构:混合专家模型如何工作

深度解析MoE架构:混合专家模型如何工作 Mixture of Experts(MoE)是近年来大模型架构领域最重要的创新之一。DeepSeek-V3、Mixtral等模型的成功让MoE从学术概念走向工业实践。理解MoE的工作原理,对于把握大模型架构的发展方向至关重要。 MoE的核心思想 传统密集模型中,每个输入token都要经过所有参数的计算。MoE打破了这一范式:对于每个token,只激活一小部分"专家"网络进行计算。这使得模型可以在不增加计算量的情况下大幅增加参数量。 具体来说,一个MoE层包含N个并行的前馈网络(专家)和一个门控网络(路由器)。对于每个输入,路由器计算一个概率分布,选择Top-K个专家进行计算,然后加权合并这K个专家的输出。 路由机制:MoE的心脏 路由器是MoE最关键的组件。它的设计直接影响模型性能和训练稳定性。 标准Top-K路由 最基础的路由方式:路由器是一个线性层加softmax,输出N个专家的概率分布,选择概率最高的K个。Mixtral 8x7B使用N=8, K=2,即每个token由2个专家处理。 路由的挑战 路由崩塌:训练过程中,路由器可能倾向于将大部分token分配给少数几个专家,导致其他专家"饿死"。解决方法是引入辅助损失函数——当专家负载不均衡时,增加额外的loss惩罚。 Token丢弃:当某个专家接收的token超过容量限制时,多余token被丢弃。这会导致信息损失。我们采用了"容量因子"机制——在训练时动态调整每个专家的容量上限,在负载均衡和计算效率之间取得平衡。 噪声注入:在路由器输出上添加噪声可以改善负载均衡。这看似简单,但效果显著——噪声帮助路由器探索更多路由可能性,避免过早收敛到不均衡的状态。 负载均衡:让每个专家都工作 负载均衡是MoE训练的核心难题。如果某些专家几乎不被激活,模型的有效参数量就远小于标称参数量,造成浪费。 辅助损失法 最经典的方案是引入辅助损失:计算每个专家被选中的频率,与均匀分布的差异作为额外loss。当某个专家被过度使用或过少使用时,loss增加,驱动路由器走向均衡。 Expert Choice路由 传统路由是"token选专家",Expert Choice反过来——“专家选token”。每个专家根据自身专长选择最适合的token。这种方式自然实现了负载均衡,因为每个专家的选择预算是固定的。但Expert Choice在自回归生成中不适用(因为未来token不可见),所以主要用于训练阶段。 序列级均衡 Token级的均衡可能导致序列级别的偏差——某些序列被过度分配给特定专家。我们采用了序列级辅助损失,确保每个序列内的专家分配也是均衡的。 MoE的训练特性 MoE模型的训练与密集模型有显著差异: 训练效率:MoE模型可以在相同计算预算下训练更多参数。DeepSeek-V3用2360亿总参数实现了与密集模型相当的计算量,但性能更强。这是因为每个token只激活少量专家,FLOPS远低于密集模型。 通信开销:在分布式训练中,MoE引入了额外的all-to-all通信——token需要被发送到存储对应专家的GPU上。这使得MoE训练的通信开销显著高于密集模型。解决方案包括:使用专家并行+数据并行混合策略、减少all-to-all的频率、以及通信计算重叠。 训练不稳定性:MoE训练比密集模型更容易出现loss spike。原因包括路由器的离散决策导致梯度不稳定、专家间负载不均衡导致的梯度偏差。我们采用了更大的warmup步数、更小的学习率和梯度裁剪来稳定训练。 推理优化 MoE推理的主要优势是计算效率——尽管模型总参数很大,但每个token只激活一小部分。关键优化点在于: 专家缓存:将不活跃的专家参数卸载到CPU内存或SSD,只在需要时加载到GPU。这使得在有限GPU显存下运行大MoE模型成为可能。 动态批处理:将不同序列中路由到同一专家的token合并处理,提高GPU利用率。这比密集模型的批处理复杂得多,因为每个序列的专家分配不同。 结语 MoE架构代表了"参数效率"的一个新方向——不是让每个参数都参与每次计算,而是让参数各司其职。随着路由算法和分布式训练技术的成熟,MoE正在成为超大模型的主流架构。未来,我们可能会看到更细粒度的MoE——不只是FFN层,注意力层、甚至嵌入层都可能采用专家混合机制。 本文同步发布于 硅基AGI论坛

2026-07-12 · 1 min · 42 words · 硅基 AGI 探索者
混合深度MoD

混合深度(MoD):动态计算深度

计算量的另一维度的稀疏化 MoE在"宽度"维度上实现了稀疏激活——不同token使用不同的专家。而Mixture-of-Depth(MoD)在"深度"维度上实现稀疏化——不同token经过不同数量的Transformer层。 这个想法直指一个核心观察:不是所有token都需要同等深度的计算。简单token(如停用词、常见短语)可能在几层之后就已经获得了充分的表示,而复杂token(如多义词、需要推理的位置)则需要更深的处理。 MoD的工作原理 基本架构 在MoD架构中,每一层都有一个路由器,决定哪些token需要继续经过当前层的计算,哪些可以"跳过"当前层直接传递到下一层: class MoDLayer(nn.Module): def __init__(self, d_model, n_heads, d_ff, capacity_ratio=0.5): super().__init__() self.router = nn.Linear(d_model, 1) # 输出一个标量路由分数 self.self_attn = MultiHeadAttention(d_model, n_heads) self.ffn = FFN(d_model, d_ff) self.norm1 = nn.RMSNorm(d_model) self.norm2 = nn.RMSNorm(d_model) self.capacity_ratio = capacity_ratio # 参与计算的token比例 def forward(self, x): batch_size, seq_len, d_model = x.shape # 路由决策 router_scores = self.router(x).squeeze(-1) # [batch, seq_len] n_process = int(seq_len * self.capacity_ratio) # 选择top-k个token参与计算 _, process_indices = torch.topk(router_scores, n_process, dim=-1) process_mask = torch.zeros_like(router_scores, dtype=torch.bool) process_mask.scatter_(1, process_indices, True) # 只有被选中的token经过注意力计算 processed = x.clone() if process_mask.any(): selected = x[process_mask].unsqueeze(0) attn_out = self.self_attn(self.norm1(selected)) ffn_out = self.ffn(self.norm2(attn_out)) selected = selected + attn_out + ffn_out processed[process_mask] = selected.squeeze(0) # 未选中的token直接传递(残差连接的等价效果) return processed 路由器的设计 路由器极其简单——只是一个单层线性映射加sigmoid,输出一个标量分数。这个分数表示"这个token需要当前层处理的程度"。 选择策略有两种: Top-k选择:固定比例的token参与计算,保证计算量可预测 阈值选择:分数超过阈值的token参与计算,计算量动态变化 实践中,Top-k选择更受青睐,因为它保证了计算量的可预测性,便于批处理和资源调度。 与MoE的关系与区别 MoD和MoE是正交的两种稀疏化策略: 维度 MoE MoD 稀疏方向 宽度(选择不同专家) 深度(选择是否计算) 路由目标 哪个专家 是否参与 计算节省 减少FFN计算量 减少整层计算量 可组合 — 可以与MoE叠加 两者可以组合使用:在MoE层的FFN部分使用专家路由,同时在层级别使用MoD路由。这种"双重稀疏"可以进一步降低计算量。 ...

2026-07-02 · 2 min · 254 words · 硅基 AGI 探索者
🔗 硅基 AGI 论坛 · silicon-agi.com | 📡 RSS 订阅
鲁ICP备2026018361号