点击下方卡片,关注“AI生成未来

如您有工作需要分享,欢迎联系:aigc_to_future

原始GPT架构已经发展了七年。乍看之下,回顾GPT-2(2019)并展望DeepSeek-V3和Llama 4(2024-2025),人们可能会惊讶于这些模型在结构上仍然如此相似。

诚然,位置嵌入已经从绝对位置发展为旋转位置(RoPE),多头注意力机制在很大程度上让位于分组查询注意力机制,更高效的SwiGLU已经取代了像GELU这样的激活函数。但在这些微小的改进之下,我们是否真正看到了突破性的变化,还是我们只是在完善同样的架构基础?

比较大型语言模型以确定哪些关键因素有助于它们的良好(或不那么良好的)性能是非常具有挑战性的:数据集、训练技术和超参数差异很大,而且通常没有很好的文档记录。

然而,我认为通过检查架构本身的结构变化来了解2025年大型语言模型开发者在做什么仍然很有价值。(其中一部分如下图1所示。)

资讯配图
Figure 1: A subset of the architectures covered in this article.

因此在本文中不会讨论基准性能或训练算法,而是将重点放在定义当今旗舰开源模型的架构发展上。

1. DeepSeek V3/R1

我们都知道DeepSeek R1[1]在2025年1月发布时产生了重大影响。DeepSeek R1是一个推理模型,构建在DeepSeek V3架构[2]之上,该架构于2024年12月推出。

虽然我在这里主要关注2025年发布的架构,但我认为包括DeepSeek V3是合理的,因为它在2025年DeepSeek R1发布后才获得广泛关注和采用。

如果您对DeepSeek R1的训练特别感兴趣,您可能会发现我今年早些时候的文章[3]很有用。

在本节中,我将重点关注DeepSeek V3引入的两种关键架构技术,这些技术提高了其计算效率并使其与许多其他大型语言模型区分开来:

  • 多头潜在注意力机制(MLA)
  • 专家混合(MoE)

1.1 多头潜在注意力机制(MLA)

在讨论多头潜在注意力机制(MLA)之前,让我们简要回顾一些背景,说明为什么要使用它。为此,让我们从分组查询注意力机制(GQA)开始,它近年来已成为多头注意力机制(MHA)的新标准替代品,提供了更高的计算和参数效率。

所以,这里是GQA的简要总结。与MHA不同,在MHA中每个头都有自己的键和值集,为了减少内存使用,GQA将多个头分组以共享相同的键和值投影。

例如,如下图2所示,如果有2个键值组和4个注意力头,那么头1和头2可能共享一组键和值,而头3和头4共享另一组。这减少了键和值计算的总数,从而降低了内存使用并提高了效率(根据消融研究,这不会明显影响建模性能)。

资讯配图

Figure 2: A comparison between MHA and GQA. Here, the group size is 2, where a key and value pair is shared among 2 queries.

所以,GQA背后的核心思想是通过在多个查询头之间共享键和值头来减少键和值头的数量。这(1)降低了模型的参数数量,以及(2)减少了推理过程中键和值张量的内存带宽使用,因为需要存储和从KV缓存中检索的键和值更少。

虽然GQA主要是MHA的计算效率变通方案,但消融研究(例如原始GQA论文[4]Llama 2论文[5]中的研究)表明,在LLM建模性能方面,它与标准MHA相当。

现在,多头潜在注意力机制(MLA)提供了一种不同的内存节省策略,它也特别适合与KV缓存配合使用。与GQA共享键和值头不同,MLA在将键和值张量存储到KV缓存之前,将它们压缩到较低维度的空间中。

在推理时,这些压缩的张量在使用前会被投影回原始大小,如下面的图3所示。这增加了一个额外的矩阵乘法但减少了内存使用。


资讯配图

Figure 3: Comparison between MLA (used in DeepSeek V3 and R1) and regular MHA.

(queries也会被压缩,但这只发生在训练期间,而非推理时)

顺便说一下,MLA在DeepSeek V3中并不是新的技术,因为其DeepSeek-V2前身[6]也使用了(甚至是引入了)它。此外,V2论文包含了一些有趣的消融研究,这可能解释了为什么DeepSeek团队选择MLA而非GQA(见下面的图4)。


资讯配图

Figure 4: Annotated tables from the DeepSeek-V2 paper, https://arxiv.org/abs/2405.04434

如图4所示,GQA的表现似乎比MHA差,而MLA则提供了比MHA更好的建模性能,这可能就是DeepSeek团队选择MLA而非GQA的原因。(如果能看到MLA和GQA之间的"每个Token的KV缓存"节省比较也会很有趣!)

总结这一部分,在我们转向下一个架构组件之前,MLA是一个巧妙的技巧,可以减少KV缓存内存使用,同时在建模性能方面甚至略微优于MHA。

1.2 Mixture-of-Experts (MoE)

DeepSeek值得强调的另一个主要架构组件是其使用的专家混合(MoE)层。虽然DeepSeek并非MoE的发明者,但它今年已经再次兴起,我们后面将介绍的许多架构也采用了它。

简单回顾下。

MoE的核心思想是用多个专家层替换transformer块中的每个前馈模块,其中每个专家层也是一个前馈模块。这意味着我们将单个前馈块替换为多个前馈块,如下面的图5所示。


资讯配图

Figure 5: An illustration of the Mixture-of-Experts (MoE) module in DeepSeek V3/R1 (right) compared to an LLM with a standard FeedForward block (left).

transformer块内的前馈网络块(如上图中的深灰色块所示)通常包含模型总参数的很大一部分。(请注意,transformer块,因此也包括前馈网络块,在LLM中会重复多次;在DeepSeek-V3的情况下,重复了61次。)

因此,用多个前馈网络块替换单个前馈网络块(如MoE设置中所做的)会大幅增加模型的总参数数量。然而,关键技巧在于我们不会为每个token使用("激活")所有专家。相反,路由器仅为每个token选择一小部分专家。(考虑到时间,或者更确切地说是文章篇幅,我将在另一时间更详细地介绍路由器。)

由于一次只有少数专家处于活跃状态,MoE模块通常被称为稀疏的,与始终使用全部参数集的密集模块形成对比。然而,通过MoE实现的大量总参数增加了LLM的容量,这意味着它在训练期间可以吸收更多知识。不过,稀疏性保持了推理的效率,因为我们不会同时使用所有参数。

例如,DeepSeek-V3每个MoE模块有256个专家,总共拥有6710亿参数。然而在推理过程中,一次只有9个专家处于活跃状态(1个共享专家加上路由器选择的8个)。这意味着每次推理步骤只使用370亿参数,而不是全部6710亿参数。

DeepSeek-V3的MoE设计的一个显著特点是使用共享专家。这是一个对每个token始终处于活跃状态的专家。这个想法并不新颖,在DeepSeek 2024 MoE[7]2022 DeepSpeedMoE论文[8]中已经引入。


资讯配图

Figure 6: An annotated figure from "DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models", https://arxiv.org/abs/2401.06066

拥有共享专家的好处最早在DeepSpeedMoE论文[9]中被提出,他们发现与没有共享专家相比,这提高了整体建模性能。这可能是因为常见或重复的模式不必由多个单独的专家学习,这让它们有更多空间学习更专业的模式。

总结来说,DeepSeek-V3是一个庞大的6710亿参数模型,在发布时性能超过了其他开放权重模型,包括4050亿参数的Llama 3。尽管规模更大,但由于其专家混合(MoE)架构,在推理时效率更高,每个token只激活很小一部分(仅370亿)参数。

DeepSeek-V3的另一个关键特点是使用多头潜在注意力机制(MLA)而非分组查询注意力机制(GQA)。MLA和GQA都是标准多头注意力机制(MHA)的推理效率替代方案,特别是在使用KV缓存时。虽然MLA实现更复杂,但DeepSeek-V2论文中的研究表明它比GQA提供更好的建模性能。

2. OLMo 2

非营利组织艾伦人工智能研究所的OLMo系列模型因其在训练数据和代码方面的透明度,以及相对详细的技术报告而值得注意。

虽然你可能不会在任何基准测试或排行榜的顶部找到OLMo模型,但它们相当简洁,更重要的是,由于其透明度,它们是开发大型语言模型的绝佳蓝图。

虽然OLMo模型因其透明度而受欢迎,但它们的表现也并不差。事实上,在1月份发布时(在Llama 4、Gemma 3和Qwen 3之前),OLMo 2[10]模型位于计算与性能的帕累托前沿,如下面的图7所示。


资讯配图

Figure 7: Modeling benchmark performance (higher is better) vs pre-training cost (FLOPs; lower is better) for different LLMs. This is an annotated figure from the OLMo 2 paper, https://arxiv.org/abs/2501.00656

如本文前面提到的,我的目标是只关注LLM架构细节(而非训练或数据),以保持文章长度适中。那么,OLMo2中有哪些有趣的架构设计选择呢?主要归结为规范化:RMSNorm层的位置以及QK-norm的添加,我将在下面讨论这些内容。

另一个值得一提的是,OLMo 2仍然使用传统的多头注意力机制(MHA),而非MLA或GQA。

2.1 Normalization Layer Placement

总体而言,OLMo 2在很大程度上遵循了原始GPT模型的架构,与其他当代LLM相似。然而,有一些值得注意的差异。让我们从标准化层开始。

与Llama、Gemma和大多数其他LLM类似,OLMo 2从LayerNorm切换到了RMSNorm。

但由于RMSNorm已是老生常谈(它基本上是LayerNorm的简化版本,具有更少的可训练参数),我将跳过RMSNorm与LayerNorm的讨论。(好奇的读者可以在我的GPT-2到Llama转换指南[11]中找到RMSNorm的代码实现。)

然而,值得讨论的是RMSNorm层的放置位置。原始transformer(来自"Attention is all you need[12]"论文)将transformer块中的两个标准化层分别放置在注意力模块和前馈模块之后

这也被称为Post-LN或Post-Norm。

GPT和之后的大多数其他LLM将标准化层放置在注意力和前馈模块之前,这被称为Pre-LN或Pre-Norm。Post-Norm和Pre-Norm之间的比较如下图所示。


资讯配图

Figure 8: A comparison of Post-Norm, Pre-Norm, and OLMo 2's flavor of Post-Norm.

2020年,Xiong等人[13]表明Pre-LN在初始化时产生更加稳定的梯度。此外,研究人员提到Pre-LN甚至在没有精心设计的学习率预热的情况下也能很好地工作,而学习率预热对Post-LN来说是一个至关重要的工具。

现在,我提到这一点的原因是OLMo 2采用了一种Post-LN形式(但使用RMSNorm代替LayerNorm,所以我称之为Post-Norm)。

在OLMo 2中,他们不是将标准化层放在注意力和前馈层之前,而是放在之后,如上图所示。然而,请注意,与原始transformer架构不同,标准化层仍然位于残差层(跳跃连接)内部。

那么,为什么他们要移动标准化层的位置呢?原因是这有助于提高训练稳定性,如下图所示。

资讯配图
Figure 9: A plot showing the training stability for Pre-Norm (like in GPT-2, Llama 3, and many others) versus OLMo 2's flavor of Post-Norm.

不幸的是,这个图表同时展示了重新排序和QK-Norm的结果,而QK-Norm是一个独立的概念。因此,很难判断仅仅是标准化层的重新排序本身贡献了多少。

2.2 QK-Norm

既然前面的部分已经提到了QK-norm,而我们稍后讨论的其他LLM,如Gemma 2和Gemma 3,也使用QK-norm,让我们简要讨论一下这是什么。

QK-Norm本质上是另一个RMSNorm层。它被放置在多头注意力(MHA)模块内部,并在应用RoPE之前应用于查询(q)和键(k)。为了说明这一点,下面是我为Qwen3从头实现[14]编写的分组查询注意力(GQA)层的摘录(GQA中的QK-norm应用类似于OLMo中的MHA):

class GroupedQueryAttention(nn.Module):
    def __init__(
        self, d_in, num_heads, num_kv_groups,
        head_dim=None, qk_norm=False, dtype=None
    )
:

        # ...

        if qk_norm:
            self.q_norm = RMSNorm(head_dim, eps=1e-6)
            self.k_norm = RMSNorm(head_dim, eps=1e-6)
        else:
            self.q_norm = self.k_norm = None

    def forward(self, x, mask, cos, sin):
        b, num_tokens, _ = x.shape

        # Apply projections
        queries = self.W_query(x)
        keys = self.W_key(x)
        values = self.W_value(x)

        # ...

        # Optional normalization
        if self.q_norm:
            queries = self.q_norm(queries)
        if self.k_norm:
            keys = self.k_norm(keys)

        # Apply RoPE
        queries = apply_rope(queries, cos, sin)
        keys = apply_rope(keys, cos, sin)

        # Expand K and V to match number of heads
        keys = keys.repeat_interleave(self.group_size, dim=1)
        values = values.repeat_interleave(self.group_size, dim=1)

        # Attention
        attn_scores = queries @ keys.transpose(23)
        # ...


如前所述,QK-Norm与Post-Norm一起可以稳定训练。请注意,QK-Norm并非由OLMo 2发明,而是可以追溯到2023年《缩放视觉Transformers》论文[15]

2.3 OLMo 2 总结

简而言之,OLMo 2 架构中值得注意的设计决策主要是 RMSNorm 的位置安排:在注意力和前馈模块之后而非之前应用 RMSNorm(一种 Post-Norm 形式),以及在注意力机制内部对查询和键添加 RMSNorm(QK-Norm),这两者共同有助于稳定训练损失。

下图进一步并排比较了 OLMo 2 和 Llama 3;可以看出,除了 OLMo 2 仍然使用传统的 MHA 而非 GQA 外,这两种架构在其他方面相对相似。(然而,OLMo 2 团队在 3 个月后发布了一个使用 GQA 的 32B 变体[16]。)


资讯配图

Figure 10: An architecture comparison between Llama 3 and OLMo 2.

3. Gemma 3

谷歌的Gemma模型一直都非常优秀,我认为与其他流行模型(如Llama系列)相比,它们一直被低估了。

Gemma的一个显著特点是相当大的词汇表大小(以更好地支持多种语言),以及对27B规模的更强关注(相比8B或70B)。但请注意,Gemma 2也有更小的规格:1B、4B和12B。

27B的规模达到了一个非常理想的平衡点:它比8B模型强大得多,但又不像70B模型那样资源密集,而且在我的Mac Mini上运行得很好。

那么,Gemma 3[17]还有什么有趣之处呢?正如前面讨论的,其他模型如Deepseek-V3/R1使用混合专家(MoE)架构来减少给定固定模型大小下的推理内存需求。(MoE方法也被我们稍后将讨论的其他几个模型所使用。)

Gemma 3使用了一个不同的"技巧"来降低计算成本,即滑动窗口注意力。

3.1 滑动窗口注意力

通过滑动窗口注意力(最初在2020年的LongFormer论文[18]中引入,并且已经被Gemma 2[19]使用),Gemma 3团队能够大幅减少KV缓存中的内存需求,如下图所示。

资讯配图
图11:来自Gemma 3论文(https://arxiv.org/abs/2503.19786)的注释图,展示了通过滑动窗口注意力实现的KV缓存内存节省。

图11:来自Gemma 3论文(https://arxiv.org/abs/2503.19786)的注释图,展示了通过滑动窗口注意力实现的KV缓存内存节省。

那么,什么是滑动窗口注意力呢?如果我们将常规自注意力视为全局注意力机制,因为每个序列元素都可以访问每个其他序列元素,那么我们可以将滑动窗口注意力视为局部注意力,因为在这里我们限制了当前查询位置周围的上下文大小。这在下图中有所说明。


资讯配图

Figure 12: A comparison between regular attention (left) and sliding window attention (right).

请注意,滑动窗口注意力可以与多头注意力和分组查询注意力一起使用;Gemma 3使用分组查询注意力。

如上所述,滑动窗口注意力也被称为局部注意力,因为局部窗口围绕当前查询位置并随之移动。相比之下,常规注意力是全局的,因为每个标记都可以访问所有其他标记。

如上简要提到的,Gemma 2前代架构之前也使用了滑动窗口注意力。Gemma 3的区别在于他们调整了全局(常规)和局部(滑动)注意力之间的比例。

例如,Gemma 2使用混合注意力机制,以1:1的比例结合滑动窗口(局部)和全局注意力。每个标记可以关注附近上下文的4k标记窗口。

Gemma 2在每隔一层使用滑动窗口注意力,而Gemma 3现在的比例为5:1,这意味着每5个滑动窗口(局部)注意力层只有1个完整注意力层;此外,滑动窗口大小从Gemma 2的4096减少到Gemma 3的仅1024。这使模型的重点转向更高效的局部计算。

根据他们的消融研究,滑动窗口注意力对建模性能的影响很小,如下图所示。


资讯配图

Figure 13: An annotated figure from Gemma 3 paper (https://arxiv.org/abs/2503.19786) showing that sliding window attention has little to no impact on the LLM-generated output perplexity.

虽然滑动窗口注意力是Gemma 3最显著的架构特点,但我也想简要介绍一下归一化层的放置位置,作为对前面OLMo 2部分的后续讨论。

3.2 Gemma 3中的归一化层放置(Normalization Layer Placement)

值得强调的一个小但有趣的细节是,Gemma 3在其分组查询注意力模块周围同时使用了Pre-Norm和Post-Norm设置的RMSNorm。这与Gemma 2类似,但仍然值得强调,因为它不同于(1)原始transformer("Attention is all you need")中使用的Post-Norm,(2)由GPT-2普及并在之后许多其他架构中使用的Pre-Norm,以及(3)我们之前看到的OLMo 2中的Post-Norm风格。


资讯配图

Figure 14: An architecture comparison between OLMo2 and Gemma 3; note the additional normalization layers in Gemma 3.

我认为这种归一化层的放置是一种相对直观的方法,因为它兼具两种优势:前置归一化和后置归一化。在我看来,额外的归一化不会有害。在最坏的情况下,如果额外的归一化是冗余的,这只会通过冗余增加一点效率损失。不过实际上,由于RMSNorm在整体框架中相对较为轻量,这应该不会产生任何明显的影响。

Gemma 3是一个表现良好的开放权重LLM,在我看来,它在开源圈子中有点被低估了。最有趣的部分是使用滑动窗口注意力来提高效率(未来将其与MoE结合将会很有意思)。

此外,Gemma 3具有独特的归一化层放置方式,在注意力和前馈模块的前后都放置了RMSNorm层。

3.4 附加:Gemma 3n

在Gemma 3发布几个月后,谷歌分享了Gemma 3n[20],这是一个为小型设备效率而优化的Gemma 3模型,目标是在手机上运行。

Gemma 3n为实现更好效率所做的变化之一是所谓的每层嵌入(PLE)参数层。这里的核心思想是只在GPU内存中保留模型参数的一个子集。然后根据需要从CPU或SSD流式传输特定于标记层的嵌入,例如用于文本、音频和视觉模态的嵌入。

下图说明了PLE的内存节省,列出了标准Gemma 3模型的54.4亿参数。这可能指的是Gemma 3的40亿变体。


资讯配图

Figure 15: An annotated figure from Google's Gemma 3n blog (https://developers.googleblog.com/en/introducing-gemma-3n/) illustrating the PLE memory savings.

54.4亿与40亿参数的差异是因为谷歌在报告LLM参数数量时有一种有趣的方式。他们通常会排除嵌入参数以使模型看起来更小,除非在像这样的情况下,包含这些参数更方便,可以使模型显得更大。这种做法并非谷歌独有,它已经成为该领域的一种常见做法。

另一个有趣的技巧是MatFormer[21]概念(Matryoshka Transformer的缩写)。例如,Gemma 3n使用单个共享的LLM(transformer)架构,可以切片成更小的、独立可用的模型。每个切片都经过训练能够独立运行,因此在推理时,我们可以只运行您需要的部分(而不是整个大模型)。

4. Mistral Small 3.1

Mistral Small 3.1 24B[22],于3月份在Gemma 3之后不久发布,值得注意的是它在几项基准测试中表现优于Gemma 3 27B(除了数学之外),同时速度更快。

Mistral Small 3.1比Gemma 3推理延迟更低的原因可能是由于其自定义分词器,以及缩小KV缓存和层数。否则,它是一个标准架构,如下图所示。


资讯配图

Figure 16: An architecture comparison between Gemma 3 27B and Mistral 3.1 Small 24B.

有趣的是,早期的Mistral模型曾使用滑动窗口注意力机制,但他们似乎在Mistral Small 3.1中放弃了这一技术。所以,由于Mistral使用常规分组查询注意力而不是像Gemma 3那样使用带滑动窗口的分组查询注意力,也许由于能够使用更优化的代码(例如FlashAttention)而获得了额外的推理计算节省。例如,我推测虽然滑动窗口注意力减少了内存使用,但它不一定会降低推理延迟,而这正是Mistral Small 3.1所关注的。

5. Llama 4

本文前面关于混合专家系统(MoE)的广泛介绍再次派上用场。Llama 4[23]也采用了MoE方法,并且在其他方面遵循相对标准的架构,与DeepSeek-V3非常相似,如下图所示。(Llama 4包含原生多模态支持,类似于Gemma和Mistral等模型。然而,由于本文专注于语言建模,我们只关注文本模型。)


资讯配图

Figure 17: An architecture comparison between DeepSeek V3 (671-billion parameters) and Llama 4 Maverick (400-billion parameters).

虽然Llama 4 Maverick架构整体上看起来与DeepSeek-V3非常相似,但有一些值得强调的有趣差异。

首先,Llama 4使用与其前代产品类似的分组查询注意力机制,而DeepSeek-V3使用的是我们在本文开头讨论过的多头潜在注意力机制。现在,DeepSeek-V3和Llama 4 Maverick都是非常大型的架构,DeepSeek-V3的总参数量大约比Llama 4大68%。然而,DeepSeek-V3拥有370亿活跃参数,是Llama 4 Maverick(17B)的两倍多。

Llama 4 Maverick采用了更经典的MoE设置,专家数量更少但规模更大(2个活跃专家,每个隐藏层大小为8,192),而DeepSeek-V3则使用9个活跃专家,每个隐藏层大小为2,048。此外,DeepSeek在每个transformer块中都使用MoE层(除了前3个之外),而Llama 4则在每隔一个transformer块中交替使用MoE和密集模块。

考虑到架构之间存在许多小差异,很难确定它们对最终模型性能的确切影响。然而,主要的结论是,MoE架构在2025年的流行度显著上升。

6. Qwen3

Qwen团队一直提供高质量的开放权重LLM。当我在2023年NeurIPS的LLM效率挑战赛中担任共同顾问时,我记得所有获胜解决方案都是基于Qwen2的。

现在,Qwen3是另一个在其规模类别的排行榜上名列前茅的模型系列。有7种密集模型:0.6B、1.7B、4B、8B、14B和32B。还有2种MoE模型:30B-A3B和235B-A22B。

(顺便说一下,请注意"Qwen3"中缺少空格不是拼写错误;我只是尝试保留Qwen开发者选择的原始拼写方式。)

6.1 Qwen3(密集型)

让我们先讨论密集模型架构。在撰写本文时,0.6B模型可能是目前最小的当前一代开放权重模型。根据我个人的经验,考虑到它的小尺寸,它表现得非常出色。如果您计划在本地运行它,它具有很高的每秒token吞吐量和较低的内存占用。更重要的是,由于其小尺寸,它也很容易在本地进行训练(用于教育目的)。

因此,对于大多数用途,Qwen3 0.6B已经取代了Llama 3 1B。这两种架构的比较如下所示。


资讯配图

Figure 18: An architecture comparison between Qwen3 0.6B and Llama 3 1B; notice that Qwen3 is a deeper architecture with more layers, whereas Llama 3 is a wider architecture with more attention heads.

如果你对不依赖外部第三方LLM库的可读性强的Qwen3实现感兴趣,我最近用纯PyTorchQwen3 from scratch (in pure PyTorch)[24]从头实现了Qwen3。

上图中的计算性能数据基于我在A100 GPU上运行的从头开始的PyTorch实现。可以看出,Qwen3的内存占用更小,因为它整体架构更小,同时使用更小的隐藏层和更少的注意力头。然而,它使用的transformer块比Llama 3更多,这导致运行时间更慢(生成速度的每秒token数更低)。

6.2 Qwen3 (MoE)

如前所述,Qwen3还有两种MoE版本:30B-A3B和235B-A22B。为什么像Qwen3这样的架构会同时提供常规(密集)和MoE(稀疏)变体?

正如本文开头提到的,MoE变体有助于降低大型基础模型的推理成本。提供密集和MoE两种版本使用户可以根据自己的目标和限制灵活选择。

密集模型通常更容易进行微调、部署和在各种硬件上优化。

另一方面,MoE模型针对推理扩展进行了优化。例如,在固定的推理预算下,它们可以实现更高的整体模型容量(即训练期间由于规模更大而获得的知识吸收能力),而不会成比例地增加推理成本。

通过发布这两种类型,Qwen3系列可以支持更广泛的使用场景:密集模型用于稳健性、简单性和微调,而MoE模型用于大规模高效服务。

总结这一部分,让我们将Qwen3 235B-A22B(请注意,A22B代表"220亿活跃参数")与DeepSeek-V3进行比较,后者拥有几乎两倍的活跃参数(370亿)。


资讯配图

Figure 19: An architecture comparison between DeepSeek-V3 and Qwen3 235B-A22B.

如上图所示,DeepSeek-V3和Qwen3 235B-A22B架构非常相似。值得注意的是,Qwen3模型不再使用共享专家(早期的Qwen模型,如Qwen2.5-MoE[25]确实使用了共享专家)。

遗憾的是,Qwen3团队并未披露他们为何放弃共享专家的原因。如果我不得不猜测,或许是因为当他们将专家数量从Qwen2.5-MoE的2个增加到Qwen3的8个时,对于他们的设置而言,共享专家对训练稳定性已不再必要。这样他们就能够通过仅使用8个而非8+1个专家来节省额外的计算/内存成本。(然而,这并不能解释为什么DeepSeek-V3仍然保留其共享专家。)

7. SmolLM3

SmolLM3[26]也许并不像本文中涉及的其他LLM那样受欢迎,但我认为它仍然是一个值得包含的有趣模型,因为它在相对较小且便捷的30亿参数模型规模上提供了非常好的建模性能,这个规模正好介于Qwen3的1.7B和4B模型之间,如下图所示。

此外,它还分享了很多训练细节,类似于OLMo,这种做法很少见,因此总是值得赞赏!

资讯配图
Figure 20: An annotated figure from the SmolLM3 announcement post, https://huggingface.co/blog/smollm3, comparing the SmolLM3 win rate to Qwen3 1.7B and 4B as well as Llama 3 3B and Gemma 3 4B.

如下面的架构比较图所示,SmolLM3架构看起来相当标准。不过,也许最有趣的方面是它使用了NoPE(无位置嵌入)。


资讯配图

Figure 21: A side-by-side architecture comparison between Qwen3 4B and SmolLM3 3B.

7.1 No Positional Embeddings (NoPE)

NoPE在LLM上下文中是一个较早的想法,可以追溯到2023年的一篇论文(位置编码对Transformer长度泛化的影响[27]),目的是移除显式位置信息注入(如早期GPT架构中的经典绝对位置嵌入层或现今的RoPE)。

在基于transformer的LLM中,位置编码通常是必要的,因为自注意力机制独立于顺序处理token。绝对位置嵌入通过添加额外的嵌入层来解决这个问题,该层向token嵌入添加信息。

资讯配图
Figure 22: A modified figure from my Build A Large Language Model (From Scratch) book (https://www.amazon.com/Build-Large-Language-Model-Scratch/dp/1633437167) illustrating absolute positional embeddings.

另一方面,RoPE通过根据token位置旋转查询和键向量来解决这个问题。

然而,在NoPE层中,完全不添加这种位置信号:不固定的,不学习的,不相对的。什么都没有。

尽管没有位置嵌入,模型仍然知道哪些token在前面,这要归功于因果注意力掩码。这个掩码防止每个token关注未来的token。因此,位置t的token只能看到位置≤t的token,这保留了自回归排序。

所以虽然没有显式添加位置信息,但模型结构中仍然内置了隐含的方向感,LLM在常规基于梯度下降的训练中,如果发现对优化目标有益,可以学会利用它。(查看NoPE论文的定理获取更多信息。)

因此,总体而言,NoPE论文[28]不仅发现不需要位置信息注入,还发现NoPE具有更好的长度泛化能力,这意味着随着序列长度增加,LLM的回答性能下降较少,如下图所示。

资讯配图
图23:NoPE论文显示NoPE具有更好的长度泛化能力。

请注意,上述实验是使用一个约1亿参数的相对较小的GPT风格模型和相对较小的上下文大小进行的。这些发现如何推广到更大的现代LLM尚不清楚。

因此,SmolLM3团队可能只在每4层中"应用"了NoPE(或者更确切地说,省略了RoPE)。

8. Kimi 2

Kimi 2[29] 最近在人工智能社区引起了巨大轰动,因为它是一个性能极为出色的开放权重模型。根据基准测试,它与谷歌的Gemini、Anthropic的Claude和OpenAI的ChatGPT等最佳专有模型相当。

一个值得注意的方面是它使用了相对较新的Muon[30]优化器的变体来替代AdamW。据我所知,这是Muon首次替代AdamW用于这种规模的生产模型(此前[31],它仅被证明可扩展至16B)。这产生了非常好的训练损失曲线,这可能帮助该模型跃升至上述基准测试的顶端。

虽然人们评论说损失曲线异常平滑(因为没有尖峰),但我认为它并不特别平滑(例如,请参见下图中的OLMo 2损失曲线;此外,梯度的L2范数可能是跟踪训练稳定性的更好指标)。然而,真正令人瞩目的是损失曲线衰减得如此之好。

不过,正如本文引言中所提到的,训练方法是另一个时间要讨论的话题。

该模型本身拥有1万亿参数,这确实令人印象深刻。

截至撰写本文时,它可能是这一代中最大的LLM(考虑到Llama 4 Behemoth尚未发布,专有LLM不计入,而谷歌的1.6万亿Switch Transformer[32]是来自不同世代的编码器-解码器架构)。

它也形成了一个完整的循环,因为Kimi 2使用了我们在本文开头介绍的DeepSeek-V3架构,只是他们将其做得更大,如下图所示。

资讯配图
Figure 25: An architecture comparison between DeepSeek V3 and Kimi K2.

如上图所示,Kimi 2.5基本上与DeepSeek V3相同,只是它在MoE模块中使用了更多的专家,而在多头潜在注意力(MLA)模块中使用了更少的头。

Kimi 2并非凭空而来。在Kimi k1.5:使用LLM进行强化学习扩展[33]论文中讨论的早期Kimi 1.5模型同样令人印象深刻。然而,它的不幸之处在于DeepSeek R1模型论文恰好在1月22日同一天发布。此外,据我所知,Kimi 1.5的权重从未公开共享过。

因此,Kimi K2团队很可能汲取了这些教训,在DeepSeek R2发布之前将Kimi K2作为开放权重模型共享。截至撰写本文时,Kimi K2是最令人印象深刻的开放权重模型。

经过这些年,LLM的发布依然令人兴奋,我很好奇接下来会有什么!

参考资料
[1] 

DeepSeek R1: https://arxiv.org/abs/2501.12948

[2] 

DeepSeek V3架构: https://arxiv.org/abs/2412.19437

[3] 

我今年早些时候的文章: https://magazine.sebastianraschka.com/p/understanding-reasoning-llms

[4] 

原始GQA论文: https://arxiv.org/abs/2305.13245

[5] 

Llama 2论文: https://arxiv.org/abs/2307.09288

[6] 

DeepSeek-V2前身: https://arxiv.org/abs/2405.04434

[7] 

DeepSeek 2024 MoE: https://arxiv.org/abs/2401.06066

[8] 

2022 DeepSpeedMoE论文: https://arxiv.org/abs/2201.05596

[9] 

DeepSpeedMoE论文: https://arxiv.org/abs/2201.05596

[10] 

OLMo 2: https://arxiv.org/abs/2501.00656

[11] 

GPT-2到Llama转换指南: https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/07_gpt_to_llama/converting-gpt-to-llama2.ipynb

[12] 

Attention is all you need: https://arxiv.org/abs/1706.03762

[13] 

2020年,Xiong等人: https://arxiv.org/abs/2002.04745

[14] 

Qwen3从头实现: https://github.com/rasbt/LLMs-from-scratch/tree/main/ch05/11_qwen3

[15] 

2023年《缩放视觉Transformers》论文: https://arxiv.org/abs/2302.05442

[16] 

OLMo 2 团队在 3 个月后发布了一个使用 GQA 的 32B 变体: https://huggingface.co/allenai/OLMo-2-0325-32B-Instruct

[17] 

Gemma 3: https://arxiv.org/abs/2503.19786

[18] 

2020年的LongFormer论文: https://arxiv.org/abs/2004.05150

[19] 

Gemma 2: http://arxiv.org/abs/2408.00118

[20] 

Gemma 3n: https://developers.googleblog.com/en/introducing-gemma-3n/

[21] 

MatFormer: https://arxiv.org/abs/2310.07707

[22] 

Mistral Small 3.1 24B: https://mistral.ai/news/mistral-small-3-1

[23] 

Llama 4: https://ai.meta.com/blog/llama-4-multimodal-intelligence/

[24] 

Qwen3 from scratch (in pure PyTorch): https://github.com/rasbt/LLMs-from-scratch/tree/main/ch05/11_qwen3

[25] 

Qwen2.5-MoE: https://qwenlm.github.io/blog/qwen2.5-max/

[26] 

SmolLM3: https://huggingface.co/blog/smollm3

[27] 

位置编码对Transformer长度泛化的影响: https://arxiv.org/abs/2305.19466

[28] 

NoPE论文: https://arxiv.org/abs/2305.19466

[29] 

Kimi 2: https://moonshotai.github.io/Kimi-K2/

[30] 

Muon: https://github.com/KellerJordan/Muon

[31] 

此前: https://arxiv.org/abs/2502.16982

[32] 

Switch Transformer: https://arxiv.org/abs/2101.03961

[33] 

Kimi k1.5:使用LLM进行强化学习扩展: https://arxiv.org/abs/2501.12599


技术交流

加入「AI生成未来社区」群聊,一起交流讨论,涉及 图像生成、视频生成、3D生成、具身智能等多个不同方向,备注不同方向邀请入群!可添加小助手备注方向加群!

资讯配图