编程与 AI15 分钟阅读更新于 2026-08-03

Transformer 的模型规模怎么看:层数、维度、头数与参数量

把 Transformer 的几个核心规模指标放在同一张图里理解,区分层数、模型维度、注意力头数、前馈维度、词表大小和上下文长度分别影响什么。

相关工具

模型大小不是一个单独的数字

谈到一个 Transformer 模型有多少参数时,人们常常把它简化成一个总数。但总参数量背后其实包含多种结构选择:堆了多少层,每个位置用多宽的向量,每层有多少注意力头,前馈网络扩展到多宽,词表有多大,以及模型一次允许处理多长的序列。

这些指标影响的方面并不一样。层数更接近变换深度,模型维度决定表示空间宽度,头数决定注意力关系的分组方式,前馈维度决定单个位置内部的加工空间,词表大小影响输入输出嵌入和概率层,上下文长度则决定一次能看多远。

所以,比较两个模型时不能只看参数总量。要先知道参数主要花在哪里,以及它是否真的对应当前任务需要的能力。

Transformer 模型规模中层数维度头数前馈维度词表和序列长度的关系图
Transformer 模型的六个规模维度

层数、模型维度、头数、前馈维度、词表大小和序列长度共同决定模型容量、计算量与上下文范围。

层数决定变换可以重复多少次

一层 Transformer 通常包含注意力子层、前馈网络、残差连接和归一化。层数 L 增加后,表示会经历更多轮“跨位置交互—逐位置加工”。每一层都可以在上一层的结果上继续提炼关系和特征。

更多层数提供了更深的表示变换路径,有利于表达复杂的抽象关系,但也会带来更长的计算链和更高的训练成本。残差连接和层归一化之所以重要,正是因为它们让这种重复堆叠更容易训练。

层数不是越多越好。数据规模、训练时间、推理延迟和模型是否容易过拟合都会影响合理选择。看模型结构时,层数回答的是“信息可以经过多少轮处理”,不是“每轮能装多少特征”。

d_model 决定表示空间有多宽

d_model 是每个词元在 Transformer 主干中的表示维度。词嵌入、位置编码、注意力输出和前馈网络最终通常都围绕这个维度组织。d_model 越大,每个位置可以用更宽的向量携带信息,线性投影和矩阵运算的规模也会增大。

模型维度影响的是表示空间的宽度。一个位置可以用多少个特征方向表达内容、位置和上下文,和 d_model 有直接关系。它扩大后,单层可以容纳更丰富的组合,但参数量通常近似按 d_model 的平方增长。

d_model 还会影响注意力头的划分。很多实现要求 d_model 能够比较均匀地分给多个头,每个头使用 d_model/H 左右的维度。头数和模型维度不是完全独立的两个开关。

注意力头数决定关系视角的数量

多头注意力把表示投影到多个子空间,每个头独立计算注意力,再把结果拼接起来。头数 H 增加后,模型拥有更多并行的关系通道,可以同时学习不同的上下文关联。

但头数增加不等于总表示维度自动增加。如果 d_model 保持不变,头数增加通常意味着每个头的维度变小。头数影响的是关系如何分组,d_model 影响的是所有头合起来的总宽度。

头数过少可能限制关系视角,头数过多而每头太窄又可能让单个头表达能力不足。实际设计通常会让头数、模型维度和每头维度保持协调。

前馈维度决定单个位置内部的空间

前馈网络通常把 d_model 扩展到更大的 d_ff,经过激活函数后再映射回 d_model。d_ff 可以看成每个位置独立加工时的中间工作空间,它和注意力的“跨位置交互”是两种不同的容量来源。

增加 d_ff,会让每个位置拥有更多中间特征通道,前馈网络的参数和计算量也会增加。很多模型的参数量主要就来自注意力投影和前馈网络的两部分。

理解 d_ff 时不要把它当作序列长度。它扩展的是单个位置的特征维度,不会让句子变长,也不会直接让注意力看到更多词。

Transformer 单层中注意力投影前馈网络和归一化参数量分布图
单层 Transformer 的参数来源

单层参数主要来自注意力的 Q/K/V 与输出投影、前馈网络的两次投影,以及归一化参数。

词表大小影响输入和输出两端

词表大小 V 是模型能够直接区分的词元种类数量。输入端通常需要一个 V×d_model 的嵌入表,输出端则需要把隐藏表示映射到 V 个候选词元的分数。因此,词表变大时,嵌入和输出投影都可能占据更多参数。

词表不是越大越好。词元切分得更细,可以减少词表规模,但序列可能变长;词元切分得更粗,可以缩短序列,却可能让词表和输入输出层变大。词元化方案会同时影响上下文长度、计算量和模型覆盖范围。

有些模型会共享输入嵌入和输出投影的权重,减少一部分参数;有些模型则使用不同的矩阵。看参数量时,要确认是否采用了权重共享,不能只根据词表大小做简单相加。

上下文长度影响一次能处理多远

序列长度 N 表示一次输入中可以容纳多少词元。上下文长度更大,模型能够同时参考更长的内容,但标准全注意力需要构造 N×N 的位置关系矩阵,计算和内存压力会随着序列长度快速增加。

上下文长度通常不直接像层数和模型维度那样大幅增加模型参数,但它会显著影响一次前向计算的成本。对长文档任务来说,能不能处理足够长的序列,和模型本身有多少参数是两个不同问题。

如果序列超过模型支持的最大长度,简单地继续拼接并不能保证位置编码、注意力缓存和内存都能正常工作。长上下文往往需要专门的位置方案、稀疏注意力或分块策略。

参数量和计算量不是一回事

参数量描述模型需要保存和训练多少可学习数值,计算量描述处理一次输入需要进行多少运算。一个模型参数量不算最大,但如果上下文很长,注意力计算仍可能成为主要成本;反过来,参数很多的模型在短输入上也可能受矩阵乘法和内存带宽限制。

在 Transformer 中,层数和模型维度通常同时影响参数量与计算量,前馈维度也会带来明显成本;上下文长度则尤其影响注意力部分。推理阶段还要考虑 KV 缓存,它会用空间换取生成速度。

评估模型大小时,至少要分开问三个问题:参数有多少,单个词元需要多少计算,一次输入能容纳多长内容。把三者混成一个“模型大小”,容易误判实际使用成本。

Transformer 模型深度宽度和上下文长度对能力与计算成本影响的对比图
深度、宽度与上下文长度的区别

更多层带来更深变换,更大 d_model 带来更宽表示,更长序列带来更多上下文但提高注意力成本。

如何从配置文件读懂模型

看到一个 Transformer 配置时,可以按顺序找几个字段:层数通常叫 num_layers 或 n_layer,模型维度可能叫 d_model 或 hidden_size,注意力头数可能叫 num_heads,前馈维度可能叫 intermediate_size 或 d_ff,词表和最大位置数则对应 vocab_size 与 max_position_embeddings。

字段名称会随实现变化,但含义通常可以从形状和模块位置确认。比如一个线性层权重从 hidden_size 映射到 intermediate_size,它就是前馈网络的升维投影;如果 Q、K、V 的投影拆成多个头,就能结合头数和每头维度检查是否一致。

不要只看配置中的参数总量。先把每个数字放回输入、注意力、前馈、输出和位置处理的位置,再判断它如何影响模型能力与成本。

根据任务选择规模时看什么

如果任务主要处理短文本,增加上下文长度可能收益有限;如果任务需要复杂推理,层数和表示宽度可能更关键;如果任务需要区分丰富词元,词表和词元化方案会影响输入输出效率。不同任务需要的“更大”并不相同。

资源也会改变选择。训练显存不只取决于参数量,还包括激活值、优化器状态和批次大小;推理延迟还受序列长度、批量、量化方式和硬件影响。一个看似合适的配置,未必能在实际环境中顺利运行。

更稳妥的做法是先确定任务的输入长度、输出形式和质量目标,再在层数、宽度、头数、前馈维度和上下文长度之间做平衡,而不是盲目追求某一个指标最大。

把规模指标放回 Transformer 主线

层数回答模型能进行多少轮表示变换,d_model 回答每个位置的表示有多宽,头数回答注意力可以提供多少关系视角,d_ff 回答单个位置内部有多大的非线性加工空间,词表大小影响可表达的词元集合,上下文长度影响一次能覆盖多远。

这些指标不是孤立的。模型维度影响投影矩阵和每头维度,头数影响多头划分,前馈维度影响每层主要参数来源,层数把单层结构重复多次,词表和序列长度又共同影响输入输出与注意力成本。

读懂这些关系之后,面对一个陌生 Transformer 模型,就可以从配置和结构图推测它的能力边界、计算成本和适合的任务,而不必只记住一个参数总数。

模型规模的四个检查点
步骤 1
看深度

确认编码器或解码器层数,判断表示变换的轮数。

步骤 2
看宽度

确认 d_model 和 d_ff,判断表示与单位置加工空间。

步骤 3
看注意力

确认头数、每头维度和上下文长度。

步骤 4
看成本

把参数量、单次计算量和内存需求分开评估。

常见问题

Transformer 参数量越大,效果一定越好吗?

不一定。数据质量、训练目标、上下文长度、任务匹配和推理方式都会影响效果,参数量只是模型规模的一个指标。

注意力头数越多是不是一定越好?

不一定。保持模型维度不变时,头数增加会让每个头的维度变小,需要在关系视角数量和单头表达能力之间平衡。

上下文长度增加会让参数量大幅增加吗?

通常不会像层数和模型维度那样直接增加主干参数,但标准注意力的计算和内存成本会随序列长度明显增加。