> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/llm_internals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/llm_internals/di-si-bu-fen-mo-xing-yu-qian-yan-pian/13_decoder_models/13.1_gpt_series.md).

# 13.1 GPT 系列：从语言模型到通用能力平台的扩展之路

同一种仅解码器架构，从 1.17 亿参数走到不再公开规模的产品平台。本节回答三个问题：每一代到底改了哪个部件，改动换来什么、付出什么；公开配置怎样一项项加成标称的参数量与训练算力；哪些数字从 GPT-4 起已经不可考。算例沿用 [3.7.7 节](/llm_internals/di-yi-bu-fen-ji-chu-pian/03_components/3.7_full_architecture.md)的 $12Ld^2$ 与 $6ND$ 两条速算，口径与 [3.8 节](/llm_internals/di-yi-bu-fen-ji-chu-pian/03_components/3.8_gpt_inference_flow.md)的 GPT-3 Small 一致。

## 13.1.1 三代配置：把公开数字读成参数量

GPT-1（Radford 等人，2018 年）是一个 12 层的仅解码器模型，在 BooksCorpus 上做自回归预训练，再对每个下游任务微调。它与 BERT 几乎同时出现，选了相反的方向：BERT 用双向编码器做理解，GPT 用因果解码器做生成。三代之间规模改了三个数量级，架构只改了几处。

**改了哪几处。** GPT-2 把 LayerNorm 从子层之后移到子层之前，并在最后一个块之后补一次归一化（Pre-Norm，见 [3.6 节](/llm_internals/di-yi-bu-fen-ji-chu-pian/03_components/3.6_layer_norm.md)）。论文的原话是归一化“was moved to the input of each sub-block”，另在最后一个自注意力块之后加一次。这一改让残差路径成为一条纯加法通道，深层梯度不再被逐层重新缩放，代价是残差流范数随深度增长、末端必须补那一次归一化。此后的 GPT 系与 Llama 系都沿用这一放置，它不是某一家的改动。同一代还把上下文从 512 扩到 1,024；词表从 40,478 扩到 50,257；残差路径上的权重按 $1/\sqrt{N}$ 缩放初始化，$N$ 是残差层数。GPT-3 沿用 GPT-2 的全部设定，只把注意力改成稠密与局部带状稀疏交替，上下文扩到 2,048。论文原话是与 GPT-2 用同样的模型和架构，“with the exception that we use alternating dense and locally banded sparse attention patterns”。也就是说，从 1 亿到 1750 亿，架构本身几乎没动。

**怎样把配置加成参数量。** 一个 GPT 块的权重分两部分：注意力的 Q、K、V、输出四个方阵共 $4d^2$，MLP 的两个矩阵共 $2d \cdot d\_{ff}$。三代都取 $d\_{ff} = 4d$，于是每层 $12d^2$，$L$ 层共 $12Ld^2$。再加词嵌入 $V \cdot d$ 与可学习位置嵌入 $n\_{ctx} \cdot d$；归一化与偏置项只有千分之一量级，估规模时可忽略，逐位对账时要补回来。

GPT-1 代入 $L = 12$、$d = 768$、$V = 40{,}478$、$n\_{ctx} = 512$：

$$
12 \times 12 \times 768^2 = 84{,}934{,}656
$$

$$
40{,}478 \times 768 = 31{,}087{,}104,\qquad 512 \times 768 = 393{,}216
$$

三项相加 116,414,976，再加 24 个 LayerNorm 各有权重与偏置的 $2 \times 24 \times 768 = 36{,}864$ 个数，与各线性层的 $12 \times 9 \times 768 = 82{,}944$ 个偏置（每层 `c_attn` 的 $3d$、`c_proj` 的 $d$、MLP 两个矩阵的 $4d$ 与 $d$，合计 $9d$），得 116,534,784，即常说的 1.17 亿。这个数可以逐项核对：Hugging Face 上 `openai-community/openai-gpt` 的张量总数是 119,680,512，差出来的 3,145,728 正好是 12 层各存一份 $512 \times 512$ 的因果掩码缓冲，不是参数。

GPT-3 代入 $L = 96$、$d = 12{,}288$：

$$
12 \times 96 \times 12{,}288^2 = 173{,}946{,}175{,}488
$$

$$
50{,}257 \times 12{,}288 = 617{,}558{,}016,\qquad 2{,}048 \times 12{,}288 = 25{,}165{,}824
$$

三项相加 174,588,899,328。GPT-3 的归一化与偏置按同样口径展开：193 个 LayerNorm（每层 2 个，末尾再 1 个）各有权重与偏置，$2 \times 193 \times 12{,}288 = 4{,}743{,}168$ 个数，各线性层的 $96 \times 9 \times 12{,}288 = 10{,}616{,}832$ 个偏置，合计 15,360,000。总计 174,604,259,328，与论文表 D.1 的 174,600M 相符。表 13-1 把三代并排。

| 项目             |  GPT-1 | GPT-2 XL |            GPT-3 175B |
| -------------- | -----: | -------: | --------------------: |
| 层数 $L$         |     12 |       48 |                    96 |
| $d\_{model}$   |    768 |    1,600 |                12,288 |
| Q 头数 $n\_h$    |     12 |       25 |                    96 |
| 每头宽度 $d\_h$    |     64 |       64 |                   128 |
| 上下文 $n\_{ctx}$ |    512 |    1,024 |                 2,048 |
| 词表 $V$         | 40,478 |   50,257 |                50,257 |
| 块参数 $12Ld^2$   |  84.9M | 1,474.6M |                173.9B |
| 嵌入（词 + 位置）     |  31.5M |    82.0M |                 0.64B |
| 参数量合计          | 116.5M | 1,557.6M |                174.6B |
| 嵌入占比           |  27.0% |     5.3% |                  0.4% |
| 训练词元 $D$       |    未公开 |      未公开 |                  300B |
| 训练算力 $6ND$     |      — |        — | $3.14 \times 10^{23}$ |
| 词元/参数 $D/N$    |      — |        — |                   1.7 |

表 13-1：GPT 三代的配置与参数量对账。GPT-1、GPT-2 的层数、宽度、词表、上下文取自两篇论文与 `openai-community` 的 `config.json`；GPT-3 取自 [GPT-3 论文](https://arxiv.org/abs/2005.14165)表 2.1，训练词元与算力取自该文表 D.1。参数量由本节的算式复算，GPT-1 与 GPT-2 XL 已与 Hugging Face 检查点的张量数逐位对上。

这张表里有三条可以直接带走的结论。

**嵌入从 27% 掉到 0.4%。** 小模型的参数有四分之一花在查表上，这正是 GPT-1、GPT-2 绑定输入嵌入与输出投影的收益所在（权重绑定见 [3.7.6 节](/llm_internals/di-yi-bu-fen-ji-chu-pian/03_components/3.7_full_architecture.md)）；到 GPT-3 这一项已无足轻重，绑不绑都只影响千分之几。

**宽度比深度涨得快。** 层数从 12 到 96 涨 8 倍，宽度从 768 到 12,288 涨 16 倍，而参数量随 $d^2$ 走，所以规模主要来自加宽。

**GPT-3 的训练词元远低于后来的共识。** $6ND$ 代入 $N = 1.746 \times 10^{11}$、$D = 3 \times 10^{11}$ 得 $3.14 \times 10^{23}$ FLOPs；除以 1 PF-day 的 $8.64 \times 10^{19}$ 得约 3,640 PF-days，与论文表 D.1 的 3.64E+03 一致。每个参数只分到 $300/175 = 1.7$ 个词元，而 Chinchilla 的算力最优配比约是 20。GPT-3 按今天的标准属于严重欠训练，这正是 13.2 节 Llama 路线的出发点。

## 13.1.2 零样本：GPT-2 的发现与它的限度

GPT-2 的发现是：足够大的语言模型不微调也能做多种任务。这句话常被读过头。论文自己报告的零样本翻译成绩是 WMT-14 英译法 5 BLEU，“slightly worse than a word-by-word substitution with a bilingual lexicon”；法译英 11.5 BLEU，仍远低于当时最好的无监督翻译系统的 33.5 BLEU。准确的说法是零样本能力初现且随规模上升，不是能正确完成任务。

## 13.1.3 少样本与上下文学习：示例在哪一步起作用

GPT-3 把这条线索做成了主张：只在提示里给几个示例，不改一个权重，模型就能完成任务。三种设置的区别只在提示里放什么。

* **零样本**（zero-shot）：任务描述加输入。
* **单样本**（one-shot）：任务描述加 1 个“输入 → 输出”示例，再加待解的输入。
* **少样本**（few-shot）：同上，示例增至 10 到 100 条，受上下文长度限制。

**机制上这三者没有区别，都是 Prefill。** 按 3.8.3 的轨迹，示例被拼进 Prompt，一次前向为每个位置算出 K 与 V 并写入缓存；随后生成答案的每一步，新位置的 Query 都能读到示例那些行。示例对模型的作用，就是让答案位置的注意力权重落在这些 K 上，进而改变读出的上下文向量。权重自始至终没有梯度，也没有更新，所以**上下文学习**（in-context learning）不是学习的一种，而是一次推理内部的条件化。

代价随之确定。示例占上下文，$K$ 条示例各长 $\ell$ 个词元，Prefill 的计算量按 $K\ell$ 线性增长，KV 缓存也按 $K\ell$ 占显存；同一批示例反复用时，前缀缓存可以把这笔 Prefill 省掉（见 [11.5 节](/llm_internals/di-san-bu-fen-tui-li-yu-bu-shu-pian/11_serving/11.5_prefix_reuse.md)）。相对微调，上下文学习省掉训练，却要在每次请求里重付一遍示例的账。

> \[!NOTE] “涌现”是否真实存在仍有争议。[一项对涌现能力的再分析](https://arxiv.org/abs/2304.15004)指出，许多被报告的涌现能力可能是评测指标选择的产物：用准确率、精确匹配这类非线性、不连续的指标衡量时，能力看似在某个规模“突然”出现；改用每词元交叉熵这类平滑连续的指标，模型表现其实随规模平滑、可预测地提升。谈“涌现”时应说清是在哪种指标下观察到的。

## 13.1.4 从 GPT-3 到 ChatGPT：补上的是后训练

GPT-3 是一个续写模型，给它一条指令，它可能续写出更多同类指令。从续写到助手，靠的不是加大规模，而是一条后训练流水线。[InstructGPT](https://arxiv.org/abs/2203.02155) 把它写成三步：用人工示范数据做监督微调（SFT）；收集同一提示下多个输出的人工排序，训练一个奖励模型（RM）；再以该奖励模型为奖励函数，用 PPO 微调 SFT 模型。

这条链路的说服力在一个对照：该文报告 1.3B 的 InstructGPT 在人工评测中优于 175B 的 GPT-3，参数量差 100 倍。也就是说，把预训练模型对齐到指令分布，其收益可以抵过两个数量级的规模。机制与实现见 [8.1 节](/llm_internals/di-er-bu-fen-xun-lian-pian/08_alignment/8.1_sft.md)与 [8.2 节](/llm_internals/di-er-bu-fen-xun-lian-pian/08_alignment/8.2_rlhf.md)，本节只需记住顺序：预训练决定能力上限，后训练决定这份能力以什么形式被取用。ChatGPT 是这条流水线加上对话格式与产品化的结果。

## 13.1.5 GPT-4 之后：哪些是公开事实，哪些不是

GPT-4（2023 年）支持文本与图像输入，在多项专业考试上接近人类水平。它同时是一条分界线：从这一代起，OpenAI 不再披露架构。[GPT-4 技术报告](https://arxiv.org/abs/2303.08774)第 2 节的原话是，鉴于竞争格局与安全考虑，“this report contains no further details about the architecture (including model size), hardware, training compute, dataset construction, training method, or similar”。

这句话给出了一条判据，读二手资料时可以直接套用：GPT-4 及以后的参数量、层数、是否 MoE、专家数、训练词元数，均**无一手来源**。网络上流传的具体数字来自推测或转述，本书不采信，也不据此计算。能够核实的只有接口侧的事实：模型支持哪些模态的输入输出、上下文与最大输出长度、有哪些工具能力，这些由官方模型页给出，属于快变事实，登记在 [A.5 快变事实核验表](/llm_internals/di-si-bu-fen-mo-xing-yu-qian-yan-pian/appendix/a5_volatile_facts.md)。

同一条判据也适用于成本方向的叙述。小模型以远低于旗舰的价格提供接近的能力，这是 API 定价的可观察事实；但“它是用知识蒸馏加架构优化做出来的”属于对未披露训练方法的归因，没有来源。真正可核实的替代表述是：同一家厂商同期提供多个能力与价格档位，选型应按任务实测，而不是按档位名推断内部做法。

## 13.1.6 推理模型：收益怎么算，账单怎么算

**收益一侧。** o1 系列（2024 年）把计算从预训练挪到推理：回答之前先生成一段不对用户展示的推理过程。[o1 发布文](https://openai.com/index/learning-to-reason-with-llms/)给出的规模效应是，性能随强化学习（训练时计算）与思考时间（推理时计算）一起提升。AIME 2024 的成绩必须连口径一起引用，否则会夸大一倍：GPT-4o 平均解出 12%（1.8/15）；o1 单样本 74%（11.1/15），64 样本多数表决 83%（12.5/15），用学到的打分函数对 1,000 个样本重排序 93%（13.9/15）。把 83% 写成“正确率”会把多数表决的收益记到单次作答上。多采样与重排序本身的算式见 [9.5 节](/llm_internals/di-san-bu-fen-tui-li-yu-bu-shu-pian/09_decoding/9.5_test_time_scaling.md)。

**账单一侧。** 推理词元在接口上的语义有三条，都能在 [OpenAI 推理指南](https://developers.openai.com/api/docs/guides/reasoning)里查到：它们对 API 不可见；它们占用上下文窗口；它们按输出词元计费。用量对象里 `output_tokens_details.reasoning_tokens` 给出这一次用了多少。三条合起来决定了成本结构。

算一例。设一次请求输入 2,000 个词元，模型产生 8,000 个推理词元与 500 个可见词元。计费按 8,500 个输出词元，而不是 500；上下文占用是 $2{,}000 + 8{,}500 = 10{,}500$ 个词元；延迟由 8,500 轮解码决定，与可见输出只有 500 个词元无关。闭源模型的每轮耗时无从查证，只能借同量级的口径估：[9.5.3 节](/llm_internals/di-san-bu-fen-tui-li-yu-bu-shu-pian/09_decoding/9.5_test_time_scaling.md)按显存带宽算出 Llama 3 8B 每轮约 5 毫秒，8,500 轮即约 43 秒。换了模型这个数就不成立，能带走的是“延迟随推理词元数走”这条关系。推理词元是串行生成的，无法像并行采样那样靠批处理摊薄（见 [10.1 节](/llm_internals/di-san-bu-fen-tui-li-yu-bu-shu-pian/10_inference_optimization/10.1_bottleneck.md)的访存瓶颈）。

**边界。** 该指南点明了两种失效情形。其一，生成的词元撞上上下文上限或 `max_output_tokens` 时，响应状态为 `incomplete`，此时可能一个可见词元都没产出，而输入与推理词元照样计费；指南建议起步时为推理和输出预留至少 25,000 个词元。其二，简单问题上的过度思考：`reasoning.effort` 提供 `none` 到 `max` 的若干档，调的是思考预算，不是策略类型；支持哪几档随模型而定，默认值也随模型而定。延迟敏感的路径应显式调低这一档并设上限，而不是依赖默认值。解码期强制预算的做法见 [9.5.4 节](/llm_internals/di-san-bu-fen-tui-li-yu-bu-shu-pian/09_decoding/9.5_test_time_scaling.md)，长思维链 RL 的训练侧见 [14.6 节](/llm_internals/di-si-bu-fen-mo-xing-yu-qian-yan-pian/14_future_trends/14.6_test_time_scaling.md)。

## 13.1.7 gpt-oss：一份可逐项复算的 OpenAI 配置

GPT-2 之后，OpenAI 主线模型的权重与配置不再公开，13.1.5 那条判据因此一直生效。gpt-oss（2025 年，120b 与 20b 两档）是主线之外的一个例外：权重与完整 `config.json` 都放了出来。它的价值不在能力排名，而在于让前面几节的“不可考”换回“可逐项复算”。

**架构六条，每条都有对应的取舍。** 残差流宽度 2,880，注意力与 MoE 块之前各做一次 RMSNorm，模型卡称这一放置沿用 GPT-2 的 Pre-LN。MoE 层每块 128 个专家（20b 为 32 个），每词元选 4 个，激活函数是 SwiGLU。注意力按 GPT-3 的做法在带状窗口与全稠密之间逐层交替，窗口宽 128；每层 64 个 Query 头、每头 64 维，配 8 个 K/V 头的 GQA；位置用 RoPE，稠密层再用 YaRN 把上下文扩到 131,072。每个注意力头在 softmax 分母上多一个可学习的偏置，即**注意力汇**（attention sink），作用是允许某个位置“谁也不看”。分词器是 `o200k_harmony`，201,088 个词元。MoE 权重量化为 MXFP4，每个参数 4.25 比特，这让 120b 能装进单张 80GB 显卡。

**复算模型卡的参数表。** 取 $d = 2{,}880$、专家中间宽度也是 2,880、$L = 36$。每层注意力的四个投影是

$$
2{,}880 \times 4{,}096 + 2 \times 2{,}880 \times 512 + 4{,}096 \times 2{,}880 = 26{,}542{,}080
$$

其中 4,096 是 $64 \times 64$ 的 Query 总宽，512 是 $8 \times 64$ 的 K/V 总宽；再加 8,000 个偏置与 64 个汇偏置，乘 36 层得 0.96B。每个专家是 SwiGLU 的三个矩阵 $3 \times 2{,}880^2 = 24{,}883{,}200$，128 个专家加路由器与各自的偏置，乘 36 层得 114.71B。嵌入与反嵌入 $2 \times 201{,}088 \times 2{,}880 = 1.16\text{B}$。三项相加 116.83B，与模型卡表 1 逐项相符。两档模型的分项、激活参数与每词元 KV 列在表 13-2。

| 部件                 | gpt-oss-120b | gpt-oss-20b |
| ------------------ | -----------: | ----------: |
| MLP（专家）            |      114.71B |      19.12B |
| 注意力                |        0.96B |       0.64B |
| 嵌入 + 反嵌入           |        1.16B |       1.16B |
| 总参数                |      116.83B |      20.91B |
| 每词元激活参数            |        5.13B |       3.61B |
| 激活比                |         4.4% |       17.3% |
| 每词元 KV（BF16，全稠密口径） |       72 KiB |      48 KiB |

表 13-2：gpt-oss 两档模型的参数分解。前五行与 [gpt-oss 模型卡](https://arxiv.org/abs/2508.10925)表 1 一致，由本节算式复算；激活比与 KV 一行由前几行算出。激活参数按模型卡口径计入反嵌入、不计入嵌入。

**交替注意力省的是什么。** 36 层若全部稠密，每词元 $2 \times 36 \times 8 \times 64 \times 2 = 73{,}728$ 字节，131,072 个词元的单序列要 9.66 GB。实际只有 18 个稠密层按全长缓存，另外 18 个带状层每层只需留 128 行，合计 $4.83\text{ GB} + 4.72\text{ MB} \approx 4.84$ GB，正好减半。稀疏与滑动窗口的代价是带状层看不到远处的词元，只能靠稠密层传递全局信息；相关取舍见 [14.7 节](/llm_internals/di-si-bu-fen-mo-xing-yu-qian-yan-pian/14_future_trends/14.7_long_context.md)。

## 13.1.8 GPT-5 一代与版本细节的去处

GPT-5 之后，OpenAI 的迭代周期缩短到以月计，产品线按能力与成本分档，推理与非推理合流到同一主线模型族。对读者有长期价值的只有三件事：接口从 Chat Completions 迁向 Responses；推理预算成为一个显式参数；上下文与最大输出由模型页逐型号给出，不能跨型号套用。

具体的型号、发布日期、上下文长度、价格与退役公告都是快变事实，一律以 [A.3 模型速查](/llm_internals/di-si-bu-fen-mo-xing-yu-qian-yan-pian/appendix/a3_model_reference.md)与 [A.5 快变事实核验表](/llm_internals/di-si-bu-fen-mo-xing-yu-qian-yan-pian/appendix/a5_volatile_facts.md)为准。台账同时记录了一条易错的区分：ChatGPT 产品侧下线某个型号，不等于该型号的 API 已经退役，两者要分开写。
