众所周知,OpenAI 并不够 Open,不仅研究论文发得越来越少,开源模型也是千呼万唤始出来。其近日发布的两个 gpt-oss 开源模型已经吸引了无数关注,网上也已经出现了不少解读文章或视频。 近日,我们熟悉的 Sebastian Raschka 也发布了一篇深度技术博客,对 gpt-oss 进行了详细分析,并回顾了自 GPT-2 以来 AI 社区取得的进步;此外,他还将其与 Qwen 3 进行了比较。 这并不奇怪,因为领先的 LLM 开发商倾向于使用相同的基础架构,然后进行一些较小的调整。这纯粹是我的猜测,但我认为这是因为: 这些实验室之间存在大量的人员流动。我们仍然没有找到比 Transformer 架构更好的架构。尽管现在已经有了状态空间模型(SSM)和文本扩散模型,但据我所知,还没有人证明它们在这种规模下的性能可媲美 Transformer。大部分改进可能来自数据和算法的调整,而非重大的架构变更。 话虽如此,它们的设计选择仍然有很多有趣的方面。其中一些在上图中有所展示(也有一些没有,但我们稍后也会讨论)。在本文的其余部分,我将重点介绍这些特性,并逐一将它们与其他架构进行比较。 这里简单说明一下,gpt-oss-20b 模型可以在配备了 16 GB RAM 的消费级 GPU 上运行。gpt-oss-120b 模型可在配备 80 GB RAM 或更高配置的单块 H100 处理器上运行。但后面还会提到一些重要的注意事项。 2012 年提出的 Dropout 是一种传统的防止过拟合的技术,其实现方式是在训练过程中随机「丢弃」(即将其设置为零)一部分层激活值或注意力分数(图 3)。然而,Dropout 在现代 LLM 中很少使用,GPT-2 之后的大多数模型都已放弃这种技术。 我推测,GPT-2 之所以使用 Dropout,是因为它继承自原始的 Transformer 架构。研究者可能后面注意到,它并没有真正提升 LLM 的性能(我在小规模的 GPT-2 复现运行中也观察到了同样的情况)。这可能是因为 LLM 通常只在海量数据集上进行单轮训练,这明显不同于 Dropout 最初引入时针对的数百轮训练方案。因此,由于 LLM 在训练过程中每个 token 只被识别一次,因此过拟合的风险很小。 有趣的是,虽然 Dropout 在 LLM 架构设计中多年来一直被忽略,但我找到了一篇 2025 年的研究论文《Drop Dropout on Single-Epoch Language Model Pretraining》—— 其中包含小规模的 LLM 实验 (Pythia 1.4B),证实了 Dropout 在这些单轮训练方案中会导致下游性能下降。 在基于 Transformer 的 LLM 中,由于注意力机制的存在,位置编码是必需的。默认情况下,注意力机制会将输入 token 视为无序的。在原始 GPT 架构中,绝对位置嵌入会通过为序列中的每个位置添加一个学习到的嵌入向量(图 4)来解决这个问题,然后将其添加到 token 嵌入中。 RoPE(旋转位置嵌入)则是一种不同的方法:它不是将位置信息添加为单独的嵌入,而是通过根据每个 token 的位置对查询和键向量执行旋转来编码位置。 在我看来,Swish 的计算成本略低,这就是它的全部优势。在不同的论文中,两者的建模性能都可能更优。在我看来,这些细微的差异可能在标准误差范围内,实际结果会根据超参数敏感度而有所不同。 激活函数曾经是一个热门的争论话题,直到十多年前深度学习社区基本确定采用 ReLU 函数。此后,研究者提出并尝试了许多类似 ReLU 的变体,这些变体具有更平滑的曲线,而 GELU 和 Swish(图 5)是其中最受青睐的变体。 早期的 GPT 架构使用 GELU,其定义为 0.5x * [1 + erf (x /sqrt (2))]。其中,erf(误差函数的缩写)是高斯积分,它使用高斯积分的多项式近似来计算,这使得它的计算成本比 Swish 中使用的 S 型函数(其中 Swish 只是 x * sigmoid (x))等更简单的函数更高。 然而,更值得注意的是,前向模块(一个小型多层感知器)已被门控的「GLU」所取代,其中 GLU 代表门控线性单元,是在 2020 年的一篇论文中提出的。具体来说,2 个全连接层被 3 个全连接层所取代。 乍一看,GEGLU/SwiGLU 变体似乎比常规前向层更好,因为仅仅是因为增加了一层,参数就更多了。但这并非易事,因为在实践中,SwiGLU/GEGLU 中的 W 和 V 权重层通常被选择为传统前向层中 W_1 层大小的一半。 因此,总体而言,使用 GLU 变体可以减少参数数量,并且性能也更好。性能更佳的原因是这些 GLU 变体提供了额外的乘法交互,从而提高了表示能力(这与深度细长的神经网络比浅层宽广的神经网络表现更好的原因相同,前提是它们训练得当)。 除了将前向模块升级为 SwiGLU 之外,gpt-oss 还将单个前向模块替换为了多个前向模块,每个 token 生成步骤仅使用一个子集。这种方法被称为混合专家模型 (MoE),如下图 8 所示。 因此,用多个前向模块替换单个前向模块(就像在 MoE 设置中所做的那样)会显著增加模型的总参数数量。然而,关键在于我们不会为每个 token 使用(「激活」)所有专家模型。相反,路由器只会为每个 token 选择一小部分专家模型。 由于每次只有少数专家模型处于活动状态,因此 MoE 通常被描述为稀疏模块,而密集模块则始终使用完整的参数集。然而,通过 MoE 形式积累的大量参数会增加 LLM 的容量,这意味着它在训练过程中会积累更多知识。同时,稀疏性可保证推理的高效性,因为我们不会同时使用所有参数。 例如,如图 9 所示,如果有 2 个键值组和 4 个注意力头,则注意力头 1 和 2 可能共享一组键和值,而注意力 3 和 4 则共享另一组键和值。这种分组会减少键和值的计算总量,从而降低内存占用并提高效率,而且根据消融研究,这不会显著影响建模性能。 因此,GQA 的核心思想是通过在多个查询头之间共享键和值头来减少键和值头的数量。这可 (1) 降低模型的参数数量,(2) 减少推理过程中键和值张量的内存带宽占用,因为需要从键值缓存中存储和检索的键和值更少。 滑动窗口注意力(下图 10)最早在 LongFormer 论文(2020 年)中提出,后来由 Mistral 推广。有趣的是,gpt-oss 每隔一层就应用一次它。你可以将其视为多头注意力(在本例中为分组查询注意力 (GQA))的一种变体,其中注意力上下文被限制在较小的窗口中,从而可同时降低内存使用量和计算成本。 实际上,Gemma 2 (2024) 也使用了类似的 1:1 比例。今年早些时候发布的 Gemma 3 则更进一步,改为 5:1 的比例,这意味着每五个滑动窗口(局部)注意力层只有一个完整的注意力层。 根据 Gemma 的消融研究,滑动窗口注意力对建模性能的影响微乎其微,如下图所示。需要注意的是,Gemma 2 中的窗口大小为 4096 个 token,而 Gemma 3 将其减少到 1024 个 token。在 gpt-oss 中,窗口只有 128 个 token,非常小。 另外,有趣的是,OpenAI 的官方文章指出,滑动窗口注意力显然已在 GPT-3 中使用:「这些模型使用了交替的密集和局部带状稀疏注意力模式,类似于 GPT-3」 我回顾了 GPT-3 的原始论文,那里确实提到了这一点:「我们使用了与 GPT-2 相同的模型和架构,包括其中描述的修改后的初始化、预归一化和可逆 token 化,不同之处在于,我们在 Transformer 的各层中使用交替的密集和局部带状稀疏注意力模式,类似于 Sparse Transformer。」 你可能还记得,不久前,BatchNorm 还是这项任务的首选。但后来它逐渐失宠,主要是因为它难以高效并行化(由于均值和方差的批次统计数据),并且在小批量下表现不佳。 RMSNorm 则是将输入除以均方根。这不会强制要求均值和方差为零,但均值和方差应处于合理范围内:均值在 -1 到 1 之间,方差在 0 到 1 之间。在图 11 所示的特定示例中,均值为 0.77,方差为 0.41。 LayerNorm 和 RMNSorm 都能稳定激活尺度并改善优化效果,但 RMNSorm 通常更适合大规模 LLM,因为它的计算成本更低。与 LayerNorm 不同,RMNSorm 没有偏差(平移)项,并将昂贵的均值和方差计算简化为一次均方根运算。这将跨特征约简的次数从两次减少到一次,从而降低 GPU 的通信开销并提高训练效率。 我仍然认为,在学习 LLM 时,GPT-2 是一个优秀的入门架构。它足够简单易懂,不会迷失在层层优化技巧中,但又足够复杂,能够让你扎实掌握现代 Transformer 模型的工作原理。 事实上,我认为在尝试叠加新的变化之前,先花时间了解甚至实现 GPT-2 是值得的。你不仅能更容易地理解这些变化,而且你可能会更加欣赏它们,因为你将更好地理解它们试图解决的局限性或问题。 我之所以选择 Qwen3,是因为截至撰写本文时,它是顶级的开放权重模型之一。此外,Qwen3 也是 MoE 模型,由于其可训练参数的总体规模相对相似,几乎可以直接与 gpt-oss 相比。 在参数数量固定的情况下,哪种方法更有优势?根据经验,更深的模型更灵活,但由于梯度爆炸和梯度消失(RMSNorm 和 shortcut 连接旨在缓解这些问题)导致的不稳定性问题,训练起来可能更困难。 就建模性能而言,遗憾的是,据我所知,除了 Gemma 2 论文(表 9)中的一项消融研究(ablation study)之外,目前尚无很好的同类比较(在参数大小和数据集保持不变的情况下)。该研究发现,对于 9B 参数架构,较宽的设置略优于较深的设置。在 4 个基准测试中,较宽的模型平均得分为 52.0,而较深的模型平均得分为 50.8。 如上图 14 所示,值得注意的是,gpt-oss 的专家数量出奇地少(32 个而不是 128 个),并且每个 token 仅使用 4 个而不是 8 个活跃专家。然而,每个专家的数量都比 Qwen3 中的专家数量要多得多。 这很有意思,因为最近的趋势和发展表明,更多、更小的模型是有益的。在总参数大小不变的情况下,这种变化在来自 DeepSeekMoE 论文的下图中得到了很好的展示。 公平地说,gpt-oss 中专家数量较少可能是 20B 规模的副作用。查看下面的 120B 模式,它们确实增加了专家(和 Transformer 模块)的数量,同时保持其他所有参数不变,如下图所示。 20B 和 120B 模型如此相似的一个无聊解释可能是因为 120B 模型是主要关注点。而创建较小模型最简单的方法是使其更短一些(减少 Transformer 模块)并减少专家数量,因为大多数参数都存储在专家数量中。然而,有人可能会猜测他们是否先训练 120B 模型,然后砍掉一些 Transformer 模块和专家数量用于继续预训练(而不是从随机权重开始)。 无论如何,这是因为只缩放这两者(Transformer 模块和专家数量)的情况并不常见。例如,在查看多种尺寸的 Qwen3 MoE 模型(下图 17)时,它们在更多方面彼此之间进行了更均衡的缩放。 自 GPT-2 时代以来,我就没见过这些偏差单元被使用,它们通常被认为是多余的。事实上,我发现了一篇最近的论文,从数学上证明了至少对于键变换 (k_proj) 来说,情况确实如此。此外,实证结果表明,使用和不使用偏差单元之间几乎没有差异(见下图 19)。 你可能注意到的另一个细节是图 18 代码截图中 sinks(sinks)的定义。在一般模型中,注意力 sinks 是放置在序列开头的特殊「始终关注」token,用于稳定注意力,这在长上下文场景中尤其有用。也就是说,如果上下文变得很长,开头这个特殊的、被关注的 token 仍然会被关注,并且它可以学习存储一些对于整个序列的普遍有用的信息。 在 gpt-oss 实现中,注意力 sinks 并非输入序列中的实际 token。相反,它们是学习到的每人偏差逻辑单元 (per-headbias logits),并附加到注意力分数中(图 20)。其目标与上述注意力 sinks 相同,但不修改 token 化的输入。 最后,与 Qwen3 类似,gpt-oss 模型采用了 Apache 2.0 开源许可证,这非常棒(这也是我自己的开源项目所偏好的许可证)。这意味着这些模型可以不受限制地蒸馏成其他模型或用于商业产物。 开放权重 LLM vs 开源 LLM:这种区别多年来一直存在争议,但值得澄清以避免混淆。一些模型开发者只发布模型权重和推理代码(例如 Llama、Gemma 和 gpt-oss),而另一些模型开发商则会将所有东西都开源,包括训练代码、数据集和权重。(例如 OLMo) 按照更严格的定义,gpt-oss 是一个开放权重模型(就像 Qwen3 一样),因为它包含权重和推理代码,但不包含训练代码或数据集。然而,业界对这一术语的使用并不一致。 虽然前面几节描述了该架构自 GPT-2 以来的演变,并讨论了它与 Qwen3(以及大多数其他近期模型)的相似之处,但还有一些值得注意的细节尚未提及。 由此,我们知道 gpt-oss 模型是推理模型。训练计算量是 210 万个 H100 GPU 小时数,与规模约 5.6 倍的 DeepSeek V3 模型所需的 278.8 万个 H800 GPU 小时数的训练计算量大致相当。遗憾的是,目前尚无对于 Qwen3 训练时间的信息。 有趣的是,gpt-oss 的训练时间估算包含了用于指令遵循的监督学习和用于推理的强化学习,而 DeepSeek V3 只是一个预训练的基础模型,DeepSeek R1 是在此基础上单独训练的。 如上一节所述,gpt-oss 模型是推理模型。然而,特别有趣的是,它们的训练方式使得用户可以通过推理时间缩放轻松控制推理程度。 具体来说,gpt-oss 模型可以接收「推理工作量:低 / 中 / 高」指令作为其系统提示词的一部分,这可直接影响响应长度和准确率,如图 21 所示。 这种可调整性非常有用,因为它使我们能够平衡成本、计算量和准确率。例如,如果任务很简单,例如回答一个简单的知识问题或修复一个小拼写错误,我们可以跳过扩展推理。这能节省时间和资源,同时避免不必要的冗长响应和冗长的推理痕迹。 与 Qwen3 或 OLMo 不同,OpenAI 没有发布强化学习训练之前的基础模型,这多少有些遗憾。基础模型对于研究推理方法的研究者来说是极其宝贵的起点(这也是我目前喜欢使用 Qwen3 Base 的原因之一)。我猜测,OpenAI 的决定更多是出于行业和生产用例的考虑,而非研究方面的考虑。 请注意,原始 Qwen3 模型也有一个用于启用 / 禁用思考(推理)模式的开关(通过在 tokenizer 中设置 enable_thinking=True/False 来启用 / 禁用推理行为)。然而,Qwen3 团队在过去几周更新了他们的模型,并从混合模型转向了专用的 Instruct/Thinking/Coder 变体。 原因是混合模式下的模型性能低于单个模型:「在与社区讨论并反思此事后,我们决定放弃混合思考模式。现在我们将分别训练 Instruct 和 Thinking 模型,以实现最佳质量。」 量化格式曾经是一个小众话题,主要与移动或嵌入式 AI 相关,但随着模型规模的扩大,这种情况发生了变化。在这种情况下,MXFP4 优化能让模型在单台 GPU 设备上运行。 大型模型(例如 120B)可安装在单台 80GB H100 或更新的 GPU 上。虽然不是消费级硬件,但租用一台单 H100 的机器比租用多台 H100 的机器便宜得多。此外,我们不必担心在 GPU 之间分配模型并增加通信开销。 AMD MI300X 显卡从第一天起就支持,真是太好了!较小的 20B 模型甚至可以使用 16 GB 显存;需要注意的是,它必须是 RTX 50 系列或更新的 GPU 才能支持 MXFP4。 请注意,这些模型也可以在较旧的硬件上运行,但不支持 MXFP4,因此会消耗更多内存。如果没有 MXFP4 优化,bfloat16 模型将消耗更多内存,例如 48 GB(gpt-oss-20b)和 240 GB(gpt-oss-120b)。 这些模型还比较新,还没有多少可靠的独立基准测试结果。比如 LM Arena 排行榜上,gpt-oss 尚未上榜。因此,根据 LM Arena 用户的数据,Qwen3-Instruct 目前仍然引领开放权重模型(图 22)。 然而,基准测试性能并不总是反映实际可用性。在过去几天有限的使用中,我发现 gpt-oss 相当强大。不过,正如其他人所观察到的,它似乎确实有相对较高的幻觉倾向(这一点在其模型卡中也有提到)。 这可能源于它在训练过程中过于注重数学、谜题和代码等推理任务,这可能导致它「遗忘了一些常识」。不过,由于 gpt-oss 在设计时就考虑到了工具的使用,因此随着时间的推移,这一限制可能会逐渐减弱。开源 LLM 中的工具集成仍处于早期阶段,但随着它的成熟,我预计我们会越来越多地让模型在回答事实或基于知识的查询时参考外部资源(例如搜索引擎)。 届时,更明智的做法是优先考虑推理能力而不是记忆能力。这很像人类在学校(或生活中)的学习,解决问题的能力往往比记忆事实更重要。 OpenAI 度过了忙碌的一周,在 gpt-oss 发布后不久就发布了备受期待的 GPT-5 模型。GPT-5 的发布非常有趣。如果说有什么要说的,那就是我真的很惊讶,他们的开源模型在基准性能方面与他们最好的产物相比竟也如此出色(图 24)。 总而言之,尽管有些人认为该版本被过度炒作,但我很高兴我们拥有了一套真正强大的开放权重模型,它们与最好的专有模型并无太大差距。 当然,基准测试通常不能准确反映实际使用情况,而且由于使用情况有限,现在下结论还为时过早。但我认为,对于喜欢使用开放权重和本地(或私有托管)模型的人来说,这是件好事。


