大型LLM架构对比

从DeepSeek-V3到Kimi K2:现代LLM架构设计一览

塞巴斯蒂安·拉斯卡博士 | 2025年7月19日

GPT架构首次开发至今已有七年。乍一看,若回溯到GPT-2(2019年)并展望DeepSeek-V3和Llama 4(2024-2025年),人们可能会惊讶于这些模型在结构上的相似性。

当然,位置嵌入已经从绝对位置编码演变为旋转位置编码(RoPE),多头注意力(Multi-Head Attention, MHA)已在很大程度上被分组查询注意力(Grouped-Query Attention, GQA)取代,更高效的SwiGLU也替代了GELU等激活函数。但除了这些细微的改进,我们是否真的看到了开创性的变革,还是仅仅在修饰相同的架构基础?

“比较LLM以确定哪些关键要素有助于其良好(或不佳)性能是出了名的挑战:数据集、训练技术和超参数差异很大,而且往往没有详细记录。”

然而,我认为审查架构本身的结构变化,以了解LLM开发者在2025年都在忙些什么,仍然具有重要价值。(其中一部分如图1所示。)

图1:本文涵盖的架构子集。

因此,本文将不再讨论基准性能或训练算法,而是专注于定义当今旗舰开放模型的架构发展。

(您可能还记得,我曾写过关于多模态LLM的文章;在本文中,我将重点关注近期模型的文本能力,将多模态能力的讨论留待下次。)

1. DeepSeek V3/R1

正如您现在可能已经多次听到的那样,DeepSeek R1 在2025年1月发布时引起了巨大反响。DeepSeek R1是一个基于2024年12月推出的DeepSeek V3架构构建的推理模型。

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

如果您对DeepSeek R1的具体训练感兴趣,您可能还会发现我今年早些时候的文章有所帮助: 理解推理LLM - Sebastian Raschka博士

在本节中,我将重点介绍DeepSeek V3中引入的两个关键架构技术,它们提高了计算效率并使其与其他LLM区分开来:

  • 多头潜在注意力(Multi-head Latent Attention, MLA)
  • 专家混合(Mixture-of-Experts, MoE)

1.1 多头潜在注意力(MLA)

在讨论多头潜在注意力(MLA)之前,让我们先简要回顾一下其动机。为此,我们从分组查询注意力(GQA)开始,它近年来已成为替代多头注意力(MHA)的新标准,具有更高的计算和参数效率。

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

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

图2:MHA和GQA的比较。这里,组大小为2,其中一对键值在2个查询中共享。

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

(如果您好奇GQA在代码中如何实现,请参阅我的GPT-2到Llama 3转换指南,其中有不带KV缓存的版本,以及带KV缓存的变体此处。)

虽然GQA主要是为了提高MHA计算效率的权宜之计,但消融研究(例如原始GQA论文Llama 2论文中的研究)表明,它在LLM建模性能方面与标准MHA相当。

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

在推理时,这些压缩后的张量在使用前被重新投影回其原始大小,如图3所示。这增加了一次矩阵乘法,但减少了内存使用。

图3:MLA(用于DeepSeek V3和R1)与常规MHA的比较。

(顺便提一下,查询也会被压缩,但只在训练期间,而非推理期间。)

另外,MLA并非DeepSeek V3中的新概念,其DeepSeek-V2前身也使用了(甚至引入了)它。此外,V2论文中包含了一些有趣的消融研究,这可能解释了DeepSeek团队选择MLA而非GQA的原因(见图4)。

图4:DeepSeek-V2论文中的标注表格,https://arxiv.org/abs/2405.04434

如图4所示,GQA的性能似乎比MHA差,而MLA在建模性能方面优于MHA,这很可能是DeepSeek团队选择MLA而非GQA的原因。(如果能看到MLA和GQA之间“每token KV缓存”的节省比较也会很有趣!)

在进入下一个架构组件之前,总结一下本节:MLA是一个巧妙的技巧,可以在减少KV缓存内存使用的同时,在建模性能方面甚至略优于MHA。

1.2 专家混合(MoE)

DeepSeek中另一个值得强调的主要架构组件是其对专家混合(MoE)层的应用。虽然MoE并非DeepSeek发明,但它在今年卷土重来,我们稍后将介绍的许多架构也采用了它。

您可能已经熟悉MoE,但快速回顾一下可能会有所帮助。

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

图5:DeepSeek V3/R1中专家混合(MoE)模块(右)与带有标准前馈块的LLM(左)的示意图。

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 MoE2022 DeepSpeedMoE论文中就已经引入了。

图6:来自“DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models”,https://arxiv.org/abs/2401.06066的标注图。

DeepSpeedMoE论文中首次指出,拥有共享专家有助于提升整体建模性能,相比没有共享专家的情况。这可能是因为常见或重复的模式不必被多个独立专家学习,从而为它们留出更多的空间来学习更专业的模式。

1.3 DeepSeek 总结

总而言之,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模型名列前茅,但它们非常简洁,更重要的是,由于其透明度,它们是开发LLM的绝佳蓝图。

而且,虽然OLMo模型因其透明度而受欢迎,但它们也并非一无是处。事实上,在1月份发布时(在Llama 4、Gemma 3和Qwen 3之前),OLMo 2模型位于计算性能的帕累托前沿,如图7所示。

图7:不同LLM的建模基准性能(越高越好)与预训练成本(FLOPs;越低越好)。这是OLMo 2论文中的标注图,https://arxiv.org/abs/2501.00656

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

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

2.1 归一化层放置

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

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

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

然而,值得讨论的是RMSNorm层的放置。原始Transformer(来自“ Attention is all you need ”论文)将Transformer块中的两个归一化层分别放置在注意力模块和前馈模块之

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

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

图8:Post-Norm、Pre-Norm和OLMo 2的Post-Norm变体比较。

2020年,Xiong等人表明Pre-LN在初始化时能够产生更良好的梯度。此外,研究人员提到Pre-LN即使在没有仔细学习率预热的情况下也能很好地工作,而学习率预热对Post-LN来说是至关重要的工具。

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

在OLMo 2中,归一化层不是放置在注意力层和前馈层之前,而是放置在之后,如图所示。然而,请注意,与原始的Transformer架构不同,归一化层仍然在残差连接(跳跃连接)内部。

那么,他们为什么要改变归一化层的位置呢?原因是它有助于训练稳定性,如下图所示。

图9:展示了Pre-Norm(如GPT-2、Llama 3和许多其他模型)与OLMo 2的Post-Norm变体训练稳定性的图表。这是OLMo 2论文中的标注图,https://arxiv.org/abs/2501.00656

不幸的是,这张图显示了重排序与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从头实现编写的分组查询注意力(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(2, 3)
        # ...

如前所述,QK-Norm与Post-Norm一起稳定了训练。值得注意的是,QK-Norm并非OLMo 2发明,它起源于2023年Scaling Vision Transformers论文

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变体)。

图10:Llama 3和OLMo 2之间的架构比较。


3. Gemma 3

Google的Gemma模型一直表现出色,我认为与其他热门模型(如Llama系列)相比,它们有点被低估了。

Gemma的一个显著特点是其较大的词汇量(以便更好地支持多种语言),以及更侧重于27B大小(而不是8B或70B)。但请注意,Gemma 2也有较小尺寸:1B、4B和12B。

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

那么,Gemma 3还有哪些有趣之处呢?如前所述,Deepseek-V3/R1等其他模型采用专家混合(MoE)架构,以在给定模型大小下减少推理时的内存需求。(MoE方法也被我们稍后将讨论的几个其他模型使用。)

Gemma 3采用了一种不同的“技巧”来降低计算成本,即滑动窗口注意力。

3.1 滑动窗口注意力

通过滑动窗口注意力(最初在2020年的LongFormer论文中引入,并且Gemma 2也已使用),Gemma 3团队成功地大幅减少了KV缓存中的内存需求,如下图所示。

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

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

图12:常规注意力(左)与滑动窗口注意力(右)的比较。

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

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

现在,如上简要提及,Gemma 2的前身架构也曾使用过滑动窗口注意力。Gemma 3的不同之处在于它们调整了全局(常规)注意力与局部(滑动)注意力之间的比例。

例如,Gemma 2使用混合注意力机制,以1:1的比例结合了滑动窗口(局部)和全局注意力。每个token可以关注周围的4k tokens窗口。

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

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

图13:来自Gemma 3论文(https://arxiv.org/abs/2503.19786)的标注图,显示滑动窗口注意力对LLM生成的输出困惑度影响甚微。

虽然滑动窗口注意力是Gemma 3最显著的架构特征,但我还想简要回顾一下归一化层的放置,作为前面OLMo 2部分的后续。

3.2 Gemma 3中的归一化层放置

一个小的但有趣的细节是,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风格。

图14:OLMo2和Gemma 3之间的架构比较;请注意Gemma 3中额外的归一化层。

我认为这种归一化层放置是一种相对直观的方法,因为它兼顾了Pre-Norm和Post-Norm的优点。在我看来,额外的归一化总归是好的。在最坏的情况下,如果额外的归一化是多余的,这会通过冗余增加一些效率低下。不过,在实践中,由于RMSNorm在大局中相对廉价,这应该不会产生任何明显影响。

3.3 Gemma 3 总结

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

此外,Gemma 3的归一化层放置方式也很独特,将RMSNorm层放置在注意力和前馈模块之前和之后。

3.4 额外:Gemma 3n

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

Gemma 3n为了实现更高效率的改变之一是所谓的“逐层嵌入(Per-Layer Embedding, PLE)参数层”。其核心思想是只在GPU内存中保留模型参数的一个子集。然后,文本、音频和视觉模态等token层特定的嵌入会按需从CPU或SSD流式传输。

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

图15:来自Google Gemma 3n博客(https://developers.googleblog.com/en/introducing-gemma-3n/)的标注图,说明了PLE内存节省。

54.4亿和40亿参数的差异是因为Google在报告LLM参数数量时有一种有趣的方式。他们经常排除嵌入参数以使模型看起来更小,除非在这种情况下,为了让模型看起来更大而包含它们是很方便的。这并非Google独有,这种方法已成为该领域的常见做法。

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

4. Mistral Small 3.1

Mistral Small 3.1 24B于3月发布,紧随Gemma 3之后,值得注意的是,它在多个基准测试(数学除外)中超越了Gemma 3 27B,同时速度更快。

Mistral Small 3.1 推理延迟低于 Gemma 3 的原因可能在于其定制的tokenizer,以及KV缓存和层数的缩减。否则,它是一个标准架构,如下图所示。

图16:Gemma 3 27B和Mistral 3.1 Small 24B的架构比较。

有趣的是,早期的Mistral模型采用了滑动窗口注意力,但似乎在Mistral Small 3.1 中放弃了它。因此,由于Mistral使用常规的分组查询注意力而不是Gemma 3 中带滑动窗口的分组查询注意力,也许通过使用更多优化的代码(例如 FlashAttention)可以进一步节省推理计算。例如,我推测滑动窗口注意力虽然减少了内存使用,但不一定减少推理延迟,而这正是Mistral Small 3.1 所关注的。


5. Llama 4

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

图17:DeepSeek V3 (6710亿参数) 和 Llama 4 Maverick (4000亿参数) 的架构比较。

虽然Llama 4 Maverick架构整体上与DeepSeek-V3非常相似,但仍有一些值得强调的有趣区别。

首先,Llama 4像其前辈一样使用了分组查询注意力,而DeepSeek-V3使用了我们在本文开头讨论的多头潜在注意力。DeepSeek-V3和Llama 4 Maverick都是非常大的架构,DeepSeek-V3的总参数量大约比Llama 4 Maverick大68%。然而,DeepSeek-V3拥有370亿活跃参数,是Llama 4 Maverick(170亿)活跃参数的两倍多。

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。我曾共同指导 NeurIPS 2023 上的 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。这两种架构的比较如下图所示。

图18:Qwen3 0.6B与Llama 3 1B的架构比较;请注意Qwen3是层数更多的深层架构,而Llama 3是注意力头数更多的宽层架构。

如果您对没有人为LLM库依赖的人类可读的Qwen3实现感兴趣,我最近从零开始实现了Qwen3(纯PyTorch)

上图中显示的计算性能数据基于我在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亿)。

图19:DeepSeek-V3和Qwen3 235B-A22B之间的架构比较。

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

不幸的是,Qwen3团队没有透露他们放弃共享专家的任何原因。如果我不得不猜测,也许在他们将专家数量从2个(在Qwen2.5-MoE中)增加到8个(在Qwen3中)时,这对于他们的设置来说并不是训练稳定性的必要条件。然后他们能够通过只使用8个而不是8+1个专家来节省额外的计算/内存成本。(然而,这并不能解释为什么DeepSeek-V3仍然保留了共享专家。)

更新。 Junyang Lin,Qwen3的开发者之一,回应如下:

当时我们没有发现共享专家有足够显著的改进,并且担心共享专家会影响推理优化。老实说,这个问题没有直接的答案。


7. SmolLM3

SmolLM3或许不像本文涵盖的其他LLM那么受欢迎,但我认为它仍然是一个有趣的模型,因为它在相对较小且方便的30亿参数模型大小下提供了非常好的建模性能,介于Qwen3的1.7B和4B模型之间,如下图所示。

此外,它还分享了许多训练细节,类似于OLMo,这很少见且总是令人赞赏!

图20:SmolLM3发布公告(https://huggingface.co/blog/smollm3)中的标注图,比较了SmolLM3与Qwen3 1.7B和4B以及Llama 3 3B和Gemma 3 4B的胜率。

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

图21:Qwen3 4B和SmolLM3 3B的并排架构比较。

7.1 无位置嵌入 (NoPE)

在LLM语境中,NoPE是一个较旧的理念,可以追溯到2023年的一篇论文(位置编码对Transformer长度泛化的影响),旨在移除显式的位置信息注入(例如通过早期GPT架构中的经典绝对位置嵌入层或现今的RoPE)。

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

图22:修改自我的《从零开始构建大型语言模型》书籍(https://www.amazon.com/Build-Large-Language-Model-Scratch/dp/1633437167)的图示,说明了绝对位置嵌入。

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

然而,在NoPE层中,根本没有添加任何此类位置信号:不固定、不学习、不相对。什么都没有。

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

因此,虽然没有明确添加位置信息,但模型的结构中仍然隐含着方向感,并且LLM在常规的基于梯度下降的训练中,如果发现这对优化目标有利,就可以学习利用它。(更多信息请查阅NoPE论文中的定理。)

所以,总的来说,NoPE论文不仅发现不需要位置信息注入,而且还发现NoPE具有更好的长度泛化能力,这意味着LLM在序列长度增加时回答性能下降得更少,如下图所示。

图23:来自NoPE论文(https://arxiv.org/abs/2305.19466)的标注图,显示NoPE具有更好的长度泛化能力。

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

因此,SmolLM3团队可能只在每第四层“应用”了NoPE(或者更确切地说是省略了RoPE)。


8. Kimi 2

Kimi 2 最近在人工智能社区引起了巨大轰动,因为它是一个性能卓越的开源模型。根据基准测试,它的性能与Google的Gemini、Anthropic的Claude和OpenAI的ChatGPT等最优秀的专有模型不相上下。

一个值得注意的方面是它使用了一种相对较新的Muon优化器变体,而非AdamW。据我所知,这是Muon首次用于如此规模的生产模型(此前只展示了其扩展到16B的能力)。这带来了非常好的训练损失曲线,这可能有助于将该模型推向上述基准测试的榜首。

虽然人们评论损失异常平滑(因为没有突增),但我认为并不能说它“异常”平滑(例如,参见下图中OLMo 2的损失曲线;此外,梯度的L2范数可能是一个更好的衡量训练稳定性的指标)。然而,真正值得注意的是损失曲线的衰减程度。

然而,正如本文引言中提到的,训练方法是另一个值得讨论的话题。

图24:来自Kimi K2发布博客文章(https://moonshotai.github.io/Kimi-K2/)和OLMo 2论文(https://arxiv.org/abs/2305.19466)的标注图。

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

截至本文撰写之时,它可能是这一代最大的LLM(考虑到Llama 4 Behemoth尚未发布、专有LLM不计算在内,以及Google的1.6万亿Switch Transformer是来自不同一代的编码器-解码器架构)。

它也算是回到了原点,因为Kimi 2使用了我们本文开头介绍的DeepSeek-V3架构,只是他们将其做得更大了,如下图所示。

图25:DeepSeek V3和Kimi K2的架构比较。

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

Kimi 2并非横空出世。早期在“Kimi k1.5: Scaling Reinforcement Learning with LLMs”论文中讨论的Kimi 1.5模型也令人印象深刻。然而,它不幸的是,DeepSeek R1模型论文恰好在1月22日同一天发布。而且,据我所知,Kimi 1.5的权重从未公开分享过。

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


9. GPT-OSS

在撰写本文大约一周后,OpenAI 发布了gpt-oss-120b和gpt-oss-20b,这是他们自2019年GPT-2以来的首批开源模型。由于OpenAI的开源模型备受期待,我更新了这篇文章以包含它们。本节将保持简短,但我已撰写了另一篇更详细的文章专门介绍gpt-oss模型: 从GPT-2到gpt-oss:分析架构进步 - Sebastian Raschka博士

在总结有趣的细节之前,让我们先大致了解一下gpt-oss-20b和gpt-oss-120b这两个模型,如图26所示。

图26:两个gpt-oss模型的架构概览。

从图26可以看出,该架构包含了我们之前讨论过的其他架构中所有熟悉的组件。例如,图27将较小的gpt-oss架构与Qwen3 30B-A3B并列,后者也是一个MoE模型,活跃参数数量相似(gpt-oss有3.6B活跃参数,Qwen3 30B-A3B有3.3B)。

图27:gpt-oss和Qwen3的架构比较。

图27中未显示的一个方面是,gpt-oss使用滑动窗口注意力(类似于Gemma 3,但在每隔一层使用,而不是采用5:1的比例)。

9.1 宽度与深度

图27显示gpt-oss和Qwen3使用了相似的组件。但如果我们仔细观察这两个模型,我们会发现Qwen3是一个深得多的架构,拥有48个Transformer块而不是24个。

另一方面,gpt-oss是一个宽得多的架构:

  • 嵌入维度为2880而不是2048
  • 中间专家(前馈)投影维度也为2880而不是768

值得注意的是,gpt-oss使用的注意力头是两倍,但这并没有直接增加模型的宽度。宽度由嵌入维度决定。

在参数数量固定的情况下,哪种方法更有优势呢?根据经验法则,更深的模型具有更大的灵活性,但由于梯度爆炸和消失(RMSNorm和快捷连接旨在缓解这些问题)导致的稳定性问题,训练起来可能更困难。

更宽的架构的优势在于推理速度更快(每秒 token 吞吐量更高),因为并行化程度更高,但内存成本也更高。

在建模性能方面,不幸的是,我不知道有任何好的“同类比较”(其中参数大小和数据集保持不变),除了一项在Gemma 2论文(表9)中进行的消融研究,该研究发现对于9B参数架构,更宽的设置略优于更深的设置。在4个基准测试中,更宽的模型平均得分52.0,更深的模型平均得分50.8。

9.2 少数大型专家与众多小型专家

如上图27所示,gpt-oss的专家数量出人意料地少(32个而不是128个),并且每个token只使用4个而不是8个活跃专家。然而,每个专家都比Qwen3中的专家大得多。

这很有趣,因为最近的趋势和发展表明,更多、更小的专家(在总参数大小不变的情况下)是有益的。这种改变在DeepSeekMoE论文的图28中得到了很好的说明。

图28:来自“DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models”,https://arxiv.org/abs/2401.06066的标注图。

值得注意的是,与DeepSeek的模型不同,gpt-oss和Qwen3都没有使用共享专家。

9.3 注意力偏差和注意力汇(Attention Sinks)

gpt-oss和Qwen3都使用分组查询注意力。主要区别在于gpt-oss通过滑动窗口注意力在每第二层限制上下文大小,如前所述。

然而,有一个有趣的细节引起了我的注意。gpt-oss似乎使用了注意力权重中的偏差单元,如下图29所示。

图29:gpt-oss模型在注意力层使用偏差单元。代码示例见此。

我自从GPT-2时代以来就没见过这些偏差单元被使用,它们通常被认为是多余的。事实上,我发现一篇最近的论文从数学上表明,这至少对于键变换(k_proj)是成立的。此外,实验结果表明,无论有无偏差单元,差异都很小(见图30)。

图30:来自https://arxiv.org/pdf/2302.08626的表格,显示模型从头开始训练时使用和不使用偏差单元的平均测试损失。

您可能还注意到的另一个细节是图30代码截图中的sinks定义。在通用模型中,注意力汇是放置在序列开头以稳定注意力的特殊“始终被关注”的token,这在长上下文场景中特别有用。即,如果上下文变得非常长,开头这个特殊的被关注token仍然会被关注,并且它可以学习存储一些关于整个序列的普遍有用的信息。(我认为它最初是在“Attention Sinks:具有注意力汇的高效流式语言模型”这篇论文中提出的。)

在 gpt-oss 实现中,注意力汇并不是输入序列中实际的 token。相反,它们是学习到的每个头的偏差 logits,被附加到注意力分数中(图31)。目标与上述注意力汇相同,但无需修改 tokenized 输入。

图31:gpt-oss中注意力汇的使用;基于此处的Hugging Face代码。

有关gpt-oss以及它与GPT-2的比较的更多信息,请参阅我的另一篇gpt-oss文章: 从GPT-2到gpt-oss:分析架构进步 - Sebastian Raschka博士

这么多年过去了,LLM的发布依然令人兴奋,我很期待看到接下来会发生什么!