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

为什么 Transformer 需要多层堆叠,而不是只把单层做得更宽

围绕多层编码器、解码器和独立权重的介绍,解释模型深度、层间传递与单层加宽之间的区别。

相关工具

先分清层数、宽度和参数量

讨论 Transformer 的规模时,最容易把几个概念混在一起。层数描述表示经过多少次相似的结构加工,模型宽度通常由 d_model 表示,FFN 还会拥有比 d_model 更宽的中间空间。参数量则取决于这些尺寸、注意力头数、词表大小以及每一层是否使用独立权重。

因此,把单层做宽和增加层数并不是同一件事。前者更像是在一次加工中准备更多特征通道,后者则是让表示经过多轮加工。两种方式都会增加容量,却改变了模型处理信息的路径。

Transformer 增加层数和增加宽度两种模型扩展方向的对比图
层数与宽度是两条不同的扩展方向

增加宽度扩大单层的特征空间,增加层数则让表示经历更多轮结构化加工。

文中的六层示例说明了什么

Transformer 相关概念 在介绍经典架构时,给出了六层编码器和六层解码器的示例。这里的六并不是所有模型都必须遵守的固定答案,而是用来说明编码组件和解码组件可以由多层相似结构堆叠而成。实际使用时,层数可以根据任务、数据和计算资源调整。

这个例子还有一个容易被忽略的含义:模型不是把一层的输出直接当成最终答案,而是让它继续进入下一层。每一层都在前一层已经形成的表示上工作,所以“六层”代表六轮连续的表示变换,而不只是六份并排放置的模块。

经典 Transformer 六层编码器和六层解码器结构示意图
经典 Transformer 的编码器与解码器层数

经典结构常以六层编码器和六层解码器作为示例,实际层数可以因任务和模型而变化。

多层堆叠为什么能形成逐步加工

第一层接收到的通常是词嵌入与位置编码形成的初始表示。经过自注意力后,当前位置可以吸收其他位置的信息,再由 FFN 对融合后的结果做逐位置变换。下一层接收的已经不是原始词向量,而是带有一轮上下文处理结果的表示。

层数增加后,后面的注意力不必从零开始寻找所有关系。它可以在前面已经整理过的表示上继续判断哪些信息需要连接,FFN 也可以对更丰富的上下文特征进行非线性加工。深度的价值就在于让不同阶段的变换接力完成,而不是让一次变换同时承担所有工作。

相同结构不等于相同参数

资料 特别强调,每个编码器的结构相同,但使用不同的权重参数。所谓结构相同,是指每层都包含相似的 Self-Attention 和 Position-wise FFN 子层,输入输出接口也保持一致;权重不同,则意味着每层可以学习自己的投影、注意力模式和特征变换。

如果所有层完全共享一组参数,那么表示每经过一层就重复执行同一种变换。这样的设计并非绝对不可行,但它会限制不同深度学习不同加工方式的空间。独立参数让底层、中间层和上层有机会形成不同的表示倾向,具体分工则由训练过程逐步塑造。

Transformer 相同层结构使用独立权重参数的示意图
结构复用与参数独立同时存在

各层沿用相似的子层结构,但注意力投影和 FFN 权重分别保存,形成层间差异。

为什么只把一层做宽不能完全替代加深

更宽的单层确实可以提供更多特征通道,让一次线性变换和激活函数容纳更多模式。但它仍然只有一轮注意力和一轮 FFN。一次注意力负责建立当前层的跨位置关系,随后 FFN 负责处理融合结果;这些结果不会在同一层内自动再次经过另一套独立的注意力和 FFN。

增加层数则提供了新的计算阶段。后续层可以重新读取已经变化的所有位置,重新组织关系,再把新的结果交给下一轮逐位置变换。也就是说,宽度主要增加单轮可用的表示空间,深度主要增加表示反复被重组和修正的次数。两者可以配合,但不能简单互相替代。

残差连接让多层加工不至于丢掉原信息

多层堆叠并不意味着每一层都要完全推翻上一层表示。Transformer 在子层外使用残差连接,把子层学到的更新量加回输入,再经过归一化。这样,原来的表示可以沿较短路径继续向后传递,子层则专注于补充或修正一部分信息。

这也是统一 d_model 很重要的原因。注意力、FFN 和嵌入层的输出保持相同主干宽度,残差路径才能直接相加。随着层数增加,模型既获得更多轮加工,也保留了一条稳定的表示传递通道。深度不是单纯把信息越改越远,而是在可保留的基础上不断增加更新。

编码器和解码器的层堆叠分工不同

编码器的多层结构主要负责把源序列整理成上下文表示。经过最后一层后,每个源位置都对应一个已经融合上下文的向量,这些向量会作为解码器交叉注意力使用的 Key 和 Value。编码器层数增加,意味着源序列记忆可以经过更多轮关系建模和特征加工。

解码器也使用多层结构,但每层还要处理目标端掩码自注意力和 Encoder-Decoder Attention。目标前缀先在本侧整理,再查询编码器的源记忆,之后继续经过 FFN。层层传递让目标表示有多次机会调整源目标关系,而不是只在最后一层匆忙完成一次交叉读取。

Transformer 编码器与解码器通过多层结构逐步协作的示意图
编码器与解码器逐层协作

编码器逐层形成源序列记忆,解码器逐层处理目标前缀并反复查询这份记忆。

层数增加也会带来新的代价

更多层意味着更多参数和计算。训练时,每一层都要参与前向计算和反向传播;推理时,输入表示也要依次穿过这些层。层数增加还会让显存占用、通信和调度更加复杂,不能只看模型是否拥有更强的表示能力。

层数过少时,模型可能缺少足够的加工深度;层数过多时,训练难度和推理延迟上升,也不一定能在有限数据上获得对应收益。残差连接和归一化可以改善深层训练,但它们不是无限加深的保证。合适的深度需要和宽度、数据量、任务难度以及可接受成本一起判断。

读结构图时如何判断增加的是深度还是宽度

可以先看表示沿着主干经过了多少个重复模块。如果上一层输出连到下一层输入,说明模型在增加深度;如果同一模块内部出现更多并行特征通道、更多 FFN 中间维度或更大的投影矩阵,说明主要是在增加宽度。

再检查每个重复模块是否拥有自己的参数,以及输入输出是否通过残差保持统一宽度。最后区分编码器和解码器:编码器层主要整理源序列,解码器层还要维护目标端因果关系并读取源记忆。用这三个角度看图,通常就能避免把“模块更大”和“处理更深”混为一谈。

用四个问题理解 Transformer 的层数设计

第一,当前模型增加的是每层的 d_model、FFN 中间宽度,还是重复层数;第二,每一层是否拥有独立参数;第三,表示在层与层之间是否通过残差和统一宽度稳定传递;第四,增加层数后,编码器记忆或解码器目标表示究竟多获得了哪几轮加工。

这四个问题比单独记住“经典 Transformer 有六层”更有用。六层是 资料 用来说明架构的具体示例,真正需要掌握的是:相似结构负责形成稳定的层间接口,独立参数负责产生不同深度的加工方式,多层传递则让表示逐步建立复杂关系。

常见问题

Transformer 的编码器和解码器必须层数相同吗?

经典结构常使用相同层数,便于说明和组织模型,但这不是所有实现的硬性要求。具体模型可以根据任务和结构设计调整编码器、解码器层数。

增加层数是不是一定比增加宽度更有效?

不一定。层数增加表示加工深度,宽度增加单层表示空间,二者解决的问题不同,效果还取决于数据、任务、训练稳定性和计算预算。

每层结构相同,为什么还要保存不同参数?

相同结构保证输入输出接口稳定,不同参数让不同深度能够学习不同的注意力关系和特征变换。