本文深入分析了 2025 年主流开源大语言模型(LLM)的架构演进。作者指出,尽管这些新模型在宏观结构上与七年前的 GPT
架构相似,但在关键组件上进行了诸多重要改进。文章的核心目的在于剖析这些定义了当前旗舰模型的架构设计,而非关注基准测试性能或训练算法。
主要观点
文章的核心观点是,当前的大语言模型架构发展主要围绕着提升计算效率、增强模型容量和确保训练稳定性这三大主题进行。尽管没有颠覆性的结构变革,但通过对现有 Transformer
基础的精细打磨,研究者们实现了显著的性能与效率平衡。
- 混合专家模型(
MoE
)成为主流:为了在不显著增加推理成本的前提下大幅提升模型参数量(即模型容量),DeepSeek
、Llama 4
和Qwen3
等多个模型广泛采用了Mixture-of-Experts (MoE)
稀疏架构。 - 注意力机制持续创新:为降低推理过程中的内存占用和计算量,各种高效的注意力机制被采用。
Grouped-Query Attention (GQA)
已成为标准,DeepSeek
更是引入了Multi-Head Latent Attention (MLA)
来压缩键值缓存(KV cache),而Gemma 3
则通过Sliding Window Attention
限制注意力范围以提升效率。 - 归一化策略的精细调整:为了提升训练过程的稳定性,模型开发者对归一化层(Normalization Layer)的位置和方式进行了新的探索。
OLMo 2
采用了特定形式的Post-Norm
布局,并引入QK-Norm
,Gemma 3
则同时使用Pre-Norm
和Post-Norm
。 - 对位置编码的实验性探索:部分模型开始挑战传统的位置编码方案。例如,
SmolLM3
实验性地采用了No Positional Embeddings (NoPE)
,旨在改善模型对不同序列长度的泛化能力。
关键细节
以下是支持上述观点的具体模型架构细节:
DeepSeek V3
/R1
Multi-Head Latent Attention (MLA)
:通过在存入KV cache
前压缩键(key)和值(value)张量来节省内存,实验表明其性能优于GQA
和MHA
。Mixture-of-Experts (MoE)
:模型总参数量高达 6710 亿(671B
),但推理时每个 token 仅激活 9 个专家(1 个共享专家 + 8 个路由选择的专家),活跃参数仅为 370 亿(37B
)。共享专家的设计有助于学习通用模式,提升了模型性能。
Kimi 2
- 该模型被誉为当前性能最强的开源模型之一,其架构基本沿用了
DeepSeek-V3
的设计(MLA
+MoE
),但规模更大,总参数量达到了惊人的 1 万亿(1 trillion
)。 - 训练上的一大亮点是使用了
Muon
优化器替代了常见的AdamW
。
- 该模型被誉为当前性能最强的开源模型之一,其架构基本沿用了
Llama 4
- 同样采用了
MoE
架构,总参数量为 4000 亿(400B
),活跃参数为 170 亿(17B
)。 - 与
DeepSeek
不同,它使用GQA
注意力机制,并且在MoE
层和密集层之间交替排布。
- 同样采用了
Qwen3
- 同时提供密集体积(Dense)和
MoE
两种版本,以适应不同应用场景。 - 其
MoE
版本(例如235B-A22B
)架构与DeepSeek-V3
非常相似,但一个显著区别是它没有采用共享专家的设计。
- 同时提供密集体积(Dense)和
Gemma 3
Sliding Window Attention
:通过让大部分注意力层只关注一个局部窗口(例如 1024 个 token),显著减少了KV cache
的内存需求。其局部注意力和全局注意力的层级比例为 5:1。- 双重归一化:在注意力模块和前馈网络模块前后均放置了
RMSNorm
层,结合了Pre-Norm
和Post-Norm
的优点。
OLMo 2
- 以其训练过程的完全透明而著称。
- 归一化策略:采用了
Post-Norm
的一种变体(归一化层在残差连接内部),并引入了QK-Norm
(在计算注意力分数前对 query 和 key 进行归一化),共同提升了训练稳定性。
SmolLM3
No Positional Embeddings (NoPE)
:该模型在部分层中移除了如RoPE
这样的显式位置编码。它依赖Transformer
的因果注意力掩码(causal attention mask)来隐式地保留序列顺序,旨在提升模型在处理长序列时的泛化能力。
原文
自最初的GPT架构被开发以来,已经过去了七年。乍一看,回顾GPT-2(2019年)再展望DeepSeek-V3和Llama 4(2024-2025年),人们可能会惊讶于这些模型的结构仍然如此相似。
诚然,位置嵌入已从绝对式演变为旋转式(RoPE),多头注意力(Multi-Head Attention)已在很大程度上让位于分组查询注意力(Grouped-Query Attention),而效率更高的SwiGLU也取代了GELU等激活函数。但在这些微小的改进之下,我们是否真的看到了突破性的变革,或者我们仅仅是在打磨相同的架构基础?
要比较不同的大语言模型(LLM)以确定其表现优异(或不佳)的关键因素,是出了名的困难:数据集、训练技术和超参数差异巨大,且往往没有详细的文档记录。
然而,我认为审视架构本身的结构性变化,看看LLM开发者在2025年都在做些什么,仍然很有价值。(下图1展示了本文涵盖的部分架构。)
图1:本文涵盖的部分架构。
因此,在本文中,我将专注于定义当今旗舰开源模型的架构发展,而不是撰写关于基准性能或训练算法的文章。
(你可能还记得,不久前我写过关于多模态LLM的文章;在本文中,我将专注于近期模型的文本能力,将多模态能力的讨论留到以后。)
目录
1. DeepSeek V3/R1
你现在可能已经不止一次听说过,DeepSeek R1在2025年1月发布时引起了巨大轰动。DeepSeek R1是一个基于DeepSeek V3架构构建的推理模型,该架构于2024年12月推出。
虽然我在这里的重点是2025年发布的架构,但我认为将DeepSeek V3包含进来是合理的,因为它是在2025年DeepSeek R1推出后才获得广泛关注和应用的。
如果你对DeepSeek R1的具体训练过程感兴趣,你可能也会觉得我今年早些时候写的文章很有用。
在本节中,我将重点介绍DeepSeek V3中引入的两个关键架构技术,它们提高了计算效率并使其区别于许多其他LLM:
- 多头潜在注意力(Multi-Head Latent Attention, MLA)
- 混合专家模型(Mixture-of-Experts, MoE)
1.1 多头潜在注意力(MLA)
在讨论多头潜在注意力(MLA)之前,让我们简要回顾一些背景知识,以说明其使用动机。为此,我们先从分组查询注意力(GQA)开始,近年来,它已成为多头注意力(MHA)的一种新的标准替代方案,计算和参数效率更高。
那么,这里是对GQA的简要总结。与MHA中每个头都有自己的一组键(key)和值(value)不同,为了减少内存使用,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的比较。
(顺便一提,查询(query)也会被压缩,但仅在训练期间,而非推理期间。)
另外,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块中的每个前馈网络(FeedForward)模块,其中每个专家层本身也是一个前馈网络模块。这意味着我们将一个单一的前馈网络块换成了多个前馈网络块,如下图5所示。
图5:DeepSeek V3/R1中的混合专家(MoE)模块(右)与带有标准前馈网络块的LLM(左)的图示比较。
Transformer块内部的前馈网络块(上图中深灰色块)通常包含模型总参数的很大一部分。(请注意,Transformer块,从而前馈网络块,在LLM中会重复多次;在DeepSeek-V3的情况下,重复61次。)
因此,用多个前馈网络块替换单个前馈网络块(如在MoE设置中所做)会大幅增加模型的总参数数量。然而,关键的技巧在于我们并非对每个Token都使用(“激活”)所有专家。相反,一个路由器(router)仅为每个Token选择一小部分专家。(为节省时间,或者说文章篇幅,我将在另一篇文章中更详细地介绍路由器。)
因为一次只有少数专家被激活,MoE模块通常被称为*稀疏(sparse)模块,与总是使用全部参数集的密集(dense)*模块形成对比。然而,通过MoE带来的庞大总参数量增加了LLM的容量,这意味着它可以在训练期间吸收更多知识。而稀疏性则保持了推理的效率,因为我们不会同时使用所有参数。
例如,DeepSeek-V3每个MoE模块有256个专家,总参数量为6710亿。然而在推理过程中,一次只有9个专家被激活(1个共享专家加上路由器选择的8个专家)。这意味着每个推理步骤只使用370亿参数,而不是全部6710亿。
DeepSeek-V3的MoE设计中一个显著的特点是使用了共享专家。这是一个对每个Token都始终激活的专家。这个想法并不新鲜,早已在2024年的DeepSeek MoE和2022年的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
由非营利组织艾伦人工智能研究所(Allen Institute for AI)推出的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的架构细节(而非训练或数据)。那么,OLMo 2中有哪些有趣的架构设计选择呢?主要归结为归一化: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或后归一化。
GPT以及之后的大多数其他LLM则将归一化层放在注意力模块和前馈网络模块之前,这被称为Pre-LN或前归一化。下图比较了后归一化和前归一化。
图8:后归一化、前归一化以及OLMo 2的后归一化变体的比较。
在2020年,Xiong等人的研究表明,Pre-LN在初始化时能产生更稳定的梯度。此外,研究人员提到,即使没有仔细的学习率预热(warm-up),Pre-LN也能很好地工作,而学习率预热对Post-LN来说是一个至关重要的工具。
现在,我提到这一点的原因是,OLMo 2采用了一种Post-LN的形式(但使用RMSNorm而非LayerNorm,所以我称之为后归一化)。
在OLMo 2中,他们没有把归一化层放在注意力层和前馈网络层之前,而是把它们放在了之后,如上图所示。然而,请注意,与原始的Transformer架构不同,归一化层仍然在残差层(跳跃连接)内部。
那么,他们为什么要移动归一化层的位置呢?原因在于这有助于提高训练稳定性,如下图所示。
图9:展示了前归一化(如GPT-2、Llama 3和许多其他模型)与OLMo 2的后归一化变体在训练稳定性上的对比图。
不幸的是,这张图显示的是重新排序和QK-Norm共同作用的结果,而QK-Norm是一个独立的概念。因此,很难判断归一化层重新排序本身贡献了多少。
2.2 QK-Norm
由于上一节已经提到了QK-norm,并且我们稍后讨论的其他LLM,如Gemma 2和Gemma 3也使用了QK-norm, 让我们简要讨论一下这是什么。
QK-Norm本质上是又一个RMSNorm层。它被放置在多头注意力(MHA)模块内部,并应用于查询(q)和键(k)上,之后再应用RoPE。为了说明这一点,下面是我为我的从零实现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
# 应用投影
queries = self.W_query(x)
keys = self.W_key(x)
values = self.W_value(x)
# ...
# 可选的归一化
if self.q_norm:
queries = self.q_norm(queries)
if self.k_norm:
keys = self.k_norm(keys)
# 应用RoPE
queries = apply_rope(queries, cos, sin)
keys = apply_rope(keys, cos, sin)
# 扩展K和V以匹配头的数量
keys = keys.repeat_interleave(self.group_size, dim=1)
values = values.repeat_interleave(self.group_size, dim=1)
# 注意力计算
attn_scores = queries @ keys.transpose(2, 3)
# ...
如前所述,QK-Norm与后归一化一起可以稳定训练。请注意,QK-Norm并非由OLMo 2首创,而是可以追溯到2023年的Scaling Vision Transformers论文。
2.3 OLMo 2 总结
简而言之,OLMo 2架构中值得注意的设计决策主要在于RMSNorm的放置:在注意力和前馈模块之后而非之前使用RMSNorm(一种后归一化的变体),以及在注意力机制内部为查询和键添加RMSNorm(QK-Norm),这两者共同帮助稳定了训练损失。
下图进一步并排比较了OLMo 2和Llama 3;可以看出,除了OLMo 2仍然使用传统的MHA而非GQA之外,两者的架构相对相似。(不过,OLMo 2团队在3个月后发布了一个使用GQA的32B变体。)
图10:Llama 3与OLMo 2的架构比较。
3. Gemma 3
谷歌的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-token窗口的附近上下文。
Gemma 2在每隔一层使用滑动窗口注意力,而Gemma 3现在则变成了5:1的比例,意味着每5个滑动窗口(局部)注意力层才有一个全注意力层;此外,滑动窗口大小从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在其分组查询注意力模块周围同时使用了前归一化和后归一化设置的RMSNorm。
这与Gemma 2类似,但仍然值得一提,因为它不同于(1)原始Transformer(“Attention is all you need”)中使用的后归一化,(2)由GPT-2普及并在其后许多架构中使用的前归一化,以及(3)我们之前在OLMo 2中看到的后归一化变体。
图14:OLMo2与Gemma 3的架构比较;请注意Gemma 3中额外的归一化层。
我认为这种归一化层放置是一种相对直观的方法,因为它兼具了前归一化和后归一化的优点。在我看来,多一点归一化无伤大雅。在最坏的情况下,如果额外的归一化是多余的,这会通过冗余增加一点效率低下。但在实践中,由于RMSNorm在整体计算中相对廉价,这应该不会有任何明显的影响。
3.3 Gemma 3 总结
Gemma 3是一款性能优异的开源权重LLM,在我看来,在开源社区中有些被低估了。最有趣的部分是使用滑动窗口注意力来提高效率(未来将其与MoE结合会很有趣)。
此外,Gemma 3具有独特的归一化层放置方式,在注意力和前馈模块前后都放置了RMSNorm层。
3.4 附加内容:Gemma 3n
在Gemma 3发布几个月后,谷歌分享了Gemma 3n,这是一个为小型设备效率而优化的Gemma 3模型,旨在手机上运行。
Gemma 3n为实现更高效率所做的改变之一是所谓的逐层嵌入(Per-Layer Embedding, PLE)参数层。这里的关键思想是仅将模型参数的一个子集保留在GPU内存中。然后,特定于Token层的嵌入,例如文本、音频和视觉模态的嵌入,会按需从CPU或SSD流式传输。
下图说明了PLE的内存节省,列出了标准Gemma 3模型的54.4亿参数。这可能指的是Gemma 3的40亿参数变体。
图15:来自谷歌Gemma 3n博客 (https://developers.googleblog.com/en/introducing-gemma-3n/) 的标注图,说明了PLE的内存节省。
54.4亿与40亿参数的差异是因为谷歌在报告LLM参数数量时有一种有趣的方式。他们通常会排除嵌入参数以使模型看起来更小,除非在像这样的情况下,为了让模型显得更大而包含它们会更方便。这并非谷歌独有,因为这种方法已成为整个领域的普遍做法。
另一个有趣的技巧是MatFormer概念(Matryoshka Transformer的缩写,即套娃Transformer)。例如,Gemma 3n使用一个单一的共享LLM(Transformer)架构,可以被切片成更小的、可独立使用的模型。每个切片都被训练成可以独立运行,因此在推理时,我们可以只运行你需要的部分(而不是整个大模型)。
4. Mistral Small 3.1
Mistral Small 3.1 24B在Gemma 3发布后不久的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的总参数量大约要大68%。然而,DeepSeek-V3拥有370亿激活参数,是Llama 4 Maverick(170亿)的两倍多。
Llama 4 Maverick使用了更经典的MoE设置,专家数量更少但规模更大(2个激活专家,每个隐藏层大小为8192),而DeepSeek-V3则是(9个激活专家,每个隐藏层大小为2048)。此外,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)。
上图中的计算性能数据是基于我的从零开始的PyTorch实现在A100 GPU上运行时得出的。可以看出,Qwen3的内存占用更小,因为它整体上是一个更小的架构,并且使用了更小的隐藏层和更少的注意力头。然而,它比Llama 3使用了更多的Transformer块,这导致了更慢的运行时间(更低的token/秒生成速度)。
6.2 Qwen3(MoE模型)
如前所述,Qwen3也有两种MoE版本:30B-A3B和235B-A22B。为什么像Qwen3这样的一些架构会同时提供常规(密集)和MoE(稀疏)变体?
正如本文开头提到的,MoE变体有助于降低大型基础模型的推理成本。提供密集和MoE两种版本,可以根据用户的目标和限制为他们提供灵活性。
密集模型通常更容易在各种硬件上进行微调、部署和优化。
另一方面,MoE模型则为规模化推理进行了优化。例如,在固定的推理预算下,它们可以实现更高的整体模型容量(即因模型更大而在训练期间吸收更多知识),而不会按比例增加推理成本。
通过发布这两种类型,Qwen3系列可以支持更广泛的用例:密集模型用于稳健性、简单性和微调,而MoE模型用于规模化的高效服务。
为了结束本节,让我们来看看Qwen3 235B-A22B(请注意A22B代表“22B激活参数”)与DeepSeek-V3的比较,后者的激活参数几乎是前者的两倍(37B)。
图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仍然保留他们的共享专家。)
7. SmolLM3
SmolLM3的知名度或许远不及本文所涵盖的其他LLM,但我认为它仍然是一个值得包含的有趣模型,因为它在一个相对小巧方便的30亿参数模型大小上提供了非常好的建模性能,介于1.7B和4B的Qwen3模型之间,如下图所示。
此外,它还像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层中,根本没有添加任何这样的位置信号:没有固定的,没有学习的,没有相对的。什么都没有。
尽管没有位置嵌入,但由于因果注意力掩码(causal attention mask),模型仍然知道哪些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团队可能只是在每4层中“应用”了NoPE(或者说省略了RoPE)。
8. Kimi 2
Kimi 2最近在AI社区引起了巨大轰动,因为它是一个性能极佳的开源权重模型。根据基准测试,它的性能与谷歌的Gemini、Anthropic的Claude和OpenAI的ChatGPT等顶级专有模型相当。
一个显著的方面是它使用了一种相对较新的Muon优化器的变体,而不是AdamW。据我所知,这是首次在如此大规模的生产模型上使用Muon而非AdamW(之前它只被证明能扩展到16B)。这带来了非常漂亮的训练损失曲线,可能帮助这个模型登上了前面提到的基准测试的榜首。
虽然有人评论说损失曲线异常平滑(因为没有尖峰),但我认为它并非异常平滑(例如,看下面图中的OLMo 2损失曲线;此外,梯度的L2范数可能是追踪训练稳定性的更好指标)。然而,值得注意的是这条损失曲线衰减得有多好。
不过,正如本文引言中提到的,训练方法是另一个话题,留待以后讨论。
该模型本身有1万亿个参数,这确实令人印象深刻。
在撰写本文时,它可能是这一代最大的LLM(考虑到Llama 4 Behemoth尚未发布、专有LLM不计算在内,以及谷歌的1.6万亿Switch Transformer是来自不同代的编码器-解码器架构)。
这也算是回到了原点,因为Kimi 2使用了我们本文开头介绍的DeepSeek-V3架构,只是他们把它做得更大了,如下图所示。
图25:DeepSeek V3与Kimi K2的架构比较。
如上图所示,Kimi 2.5基本上与DeepSeek V3相同,只是它在MoE模块中使用了更多的专家,并在多头潜在注意力(MLA)模块中使用了更少的头。
Kimi 2并非凭空出现。在《Kimi k1.5:用LLM扩展强化学习》论文中讨论的早期Kimi 1.5模型也同样令人印象深刻。然而,它的运气不好,DeepSeek R1模型论文在1月22日同一天发表了。此外,据我所知,Kimi 1.5的权重从未公开发布。
因此,Kimi K2团队很可能吸取了这些教训,在DeepSeek R2发布之前,将Kimi K2作为开源权重模型分享出来。在撰写本文时,Kimi K2是最令人印象深刻的开源权重模型。
这么多年过去了,LLM的发布依然激动人心,我很好奇接下来会发生什么!