大语言模型(LLM)中的参数规模是衡量模型能力的重要指标,例如ChatGPT拥有175 Billion(175B)参数。对于从事硬件或系统优化的人员来说,理解参数的具体构成和计算方法十分关键。本文将基于ChatGPT论文中的参数设置,以清晰的步骤和公式,一步步推导出这一数字。
一、ChatGPT背景与结构
1. Transformer基础
ChatGPT基于Google提出的Transformer架构。完整的Transformer包含编码器(Encoder)和解码器(Decoder),用于序列到序列的任务(如翻译)。

2. ChatGPT的Decoder-only结构
与翻译任务不同,ChatGPT用于对话生成,因此只需使用Transformer的Decoder部分。它接收输入序列,通过自注意力机制和全连接层逐步生成下一个token。

3. 整体数据流(以Bert为例的等效理解)
虽然ChatGPT是decoder-only,但其内部计算流程与经典Bert类似,可用以下立体图直观理解:

- ① 输入序列经词嵌入(Input Embedding)和位置编码(Position Encoding)后,与Key、Value、Query矩阵做线性投影,再进行Attention计算。
- ② 多个Attention头的结果拼接(Concat),再次经过线性投影。
- ③ 结果输入前馈网络(Feed-Forward Network),经过两层线性变换后输出。
- ④ 重复第②、③步n_layer次。
二、参数符号说明
在计算之前,先明确以下核心参数的含义:
- n_head:Attention中头的数量
- d_model:瓶颈层(bottleneck)向量的维度
- n_vocabulary:词典大小(字典维度)
- n_context:上下文长度(输入序列最大长度)
- n_layer:网络层数(重复堆叠次数)
- d_head:每个Attention头的维度,通常 d_head = d_model / n_head
三、参数计算详细步骤
1. Input Embedding + Position Embedding

输入序列经过词嵌入矩阵 Wₑ 从维度 (n_context, n_vocabulary) 映射到 (n_context, d_model)。该矩阵大小为
同时,位置嵌入矩阵 Wₚ 大小为
因此,本部分总参数为:n_vocabulary × d_model + n_context × d_model
2. Attention & Multi-Head

- 每个Attention头包含三个投影矩阵:WᵢQ、WᵢK、WᵢV,大小均为 d_model × d_head。三个矩阵的总参数量 = 3 × d_model × d_head。
- 当有 n_head 个头时,Multi-Head部分的参数为:3 × d_model × d_head × n_head。
- 各头输出拼接后(维度 n_context × n_head·d_head),通过输出投影矩阵 Wₒ 映射回 d_model 维度。Wₒ 大小为 (n_head × d_head) × d_head,即 n_head × d_head × d_model(注意 n_head·d_head = d_model,所以此处的 d_head 是原 d_head,实际上 Wₒ 的参数量 = d_model × d_model,但保留公式一致性)。
将上述两部分相加,得到单层Attention的总参数:4 × d_model × d_head × n_head
注意:在ChatGPT中,d_head = 128,n_head = 96,d_model = 12288,符合 d_model = n_head × d_head。
3. Feed-Forward Network (FFN)

前馈网络由两层线性变换组成,中间隐藏层维度 d_ff 通常为 d_model 的4倍。即:d_ff = 4 × d_model。
- 第一层:W₁ (d_model × d_ff),偏置 b₁ (d_ff),参数量 = d_model × d_ff + d_ff
- 第二层:W₂ (d_ff × d_model),偏置 b₂ (d_model),参数量 = d_ff × d_model + d_model
- 代入 d_ff = 4 × d_model,合计 = 2 × d_model × 4×d_model + d_model + 4×d_model = 8 × d_model² + 5 × d_model
4. 层数重复
上述 Attention 和 FFN 组成一个 Transformer 层,共重复 n_layer 次。因此,所有层的总参数量为:
n_layer × ( 4 × d_model × d_head × n_head + 8 × d_model² + 5 × d_model )
5. 汇总公式
将输入嵌入、位置嵌入与所有层参数相加,得到模型总参数:
总参数 = n_vocabulary × d_model ← 词嵌入矩阵
+ n_context × d_model ← 位置矩阵
+ n_layer × (
4 × d_model × d_head × n_head ← Multi-Head Attention
+ 8 × d_model² + 5 × d_model ← Feed-Forward Network
)
四、验证:ChatGPT论文参数计算
根据GPT-3/InstructGPT论文公开的参数设置:
- n_vocabulary = 50257
- d_model = 12288
- n_context = 2048
- n_layer = 96
- d_head = 128
- n_head = 96
代入计算:
- 词嵌入 + 位置嵌入
50257 × 12288 + 2048 × 12288 = 642,723,840(约0.64B) - 单层Attention & MultiHead
4 × 12288 × 128 × 96 = 603,979,776(约0.6B) - 单层Feed-Forward
8 × 12288² + 5 × 12288 = 1,207,939,072 + 61,440 = 1,208,000,512(约1.21B) - 所有层(96层)
96 × (603,979,776 + 1,208,000,512) = 96 × 1,811,980,288 = 173,952,073,728(约173.95B) - 总参数量
642,723,840 + 173,952,073,728 = 174,594,797,568 ≈ 175 Billion
该结果与ChatGPT论文公开的175B参数基本一致,验证了计算方法的准确性。
五、常见问题(FAQ)
- Q1:为什么不包括Layer Normalization的参数?
Layer Normalization通常包含可学习的缩放因子(γ)和偏移量(β),每个子层(Attention和FFN后)各有一组。由于参数量相对较小(每层约2×d_model),在175B量级中可忽略。若需精确计算,可额外加上:n_layer × 2 × 2 × d_model = 4 × n_layer × d_model。 - Q2:d_head和n_head的关系如何确定?
在ChatGPT中,d_head = d_model / n_head。本例中d_model=12288,n_head=96,故d_head=128。如果不满足整除,则实际计算时按矩阵维度严格匹配。 - Q3:位置嵌入为什么用n_context × d_model?
位置嵌入是可学习的参数矩阵,每个位置对应一个d_model维向量。最大上下文长度为n_context,因此矩阵大小为n_context × d_model。实际使用时,只取前seq_len行。 - Q4:为什么Feed-Forward中用了偏置项(bias)?
线性变换通常包含偏置,上述公式已包含b₁和b₂。部分实现(如GPT-3)可能省略偏置,但论文中默认包含。偏置量微小,不影响对数量级的理解。
六、小提示
- 提示1:计算时注意单位统一。上述公式中所有维度均为整数,乘积结果直接相加,最终得到精确的参数量。
- 提示2:d_ff通常取4×d_model,但不同模型可能采用不同倍数,例如8倍或2倍。务必根据具体论文确认。
- 提示3:本方法适用于所有基于Transformer Decoder的模型(如GPT系列、LLaMA等),只需替换对应参数即可估算参数量。
- 提示4:175B参数中,词嵌入矩阵占了约0.64B,多层重复的权重占了174.3B,这说明模型能力的提升主要来自层数加深和宽度扩大。
通过以上分步拆解,你可以清晰地理解ChatGPT 175B参数的由来:词嵌入、位置嵌入、多头注意力、前馈网络四部分按层堆叠。掌握这一计算方法,无论是对硬件资源评估还是模型剪枝分析,都大有裨益。
