读过 Transformer 文章的朋友都知道无论是 Transformer 种的 Encoder 还是 Decoder 在计算完多头注意力机制以后都有两个全连接层,那为什么需要这两个全连接层呢?明明多头注意力机制已经能有效捕捉序列间的关系,那么全连接层的作用又是什么呢?

对于这样的问题,一个笼统的万金油回答就是“它增强了模型的表达能力”,虽然结果是这样那原因在哪儿呢?
下面我们由浅入深地来回答这个问题。
关键词:Transformer 结构分析、全连接层在 Transformer 中的作用、自注意力机制与全连接层、深度学习中的非线性激活函数
1. 逐元素非线性#
1.1 什么是逐元素非线性?#
在标准深度学习架构中(如前馈神经网络、卷积神经网络CNN、递归神经网络RNN等),逐元素非线性(elementwise nonlinearities)是指在神经网络的层间计算中引入的非线性激活函数。这些函数逐个作用于输入向量的每个元素,将线性变换的结果映射到一个非线性空间。常见的非线性激活函数包括:
-
ReLU(Rectified Linear Unit):$f(x) = \max(0, x)$
-
Sigmoid:$f(x) = \frac{1}{1 + e^{-x}}$
-
Tanh:$f(x) = \tanh(x)$
这些函数的作用是对每个输入值独立地进行变换,而不是对整个向量进行某种全局操作。
1.2 为什么逐元素非线性重要?#
① 增加模型的表达能力
如果神经网络只有线性变换(比如矩阵乘法和加法),无论堆叠多少层,最终的函数仍然是线性的。这种模型的表达能力非常有限,无法捕捉现实世界数据的复杂非线性模式。
非线性激活函数打破了这种线性限制,使得网络可以学习更复杂的函数。例如,通过ReLU,网络可以决定“忽略”某些输入(当值小于0时输出0),从而形成分段线性的决策边界。
② 层间信息的动态处理
非线性激活函数允许网络在每一层对信息进行“筛选”或“放大”。例如,Sigmoid可以将值压缩到(0, 1)区间,Tanh将值映射到(-1, 1),这有助于控制信息流动的范围和方向。
③ 标准架构中的普遍存在
在传统深度学习模型中(如多层感知机MLP或LSTM),每一层的输出通常会经过一个非线性激活函数。例如,在LSTM中,遗忘门、输入门和输出门的计算都包含Sigmoid或Tanh激活。这种设计已经成为深度学习的“预期”组成部分,因为它被证明对建模复杂任务(如语言建模或图像分类)至关重要。
关于深度学习为什么需要引入非线性的详细解释还可以参见深度学习「第3.1.6节 深度学习线性回归入门:多项式回归与神经网络建模基础」内容。
2. 多层注意力等于单个自注意力层#
如果在 Transformer 的 Eocoder 或 Decoder 中只使用多头注意力的话,那么无论堆叠多少个Eocoder 或 Decoder 都等价于一个Eocoder 或 Decoder。
2.1 自注意力机制的线性本质#
自注意力机制的核心计算可以用以下步骤概括:
① 生成查询、键和值:对于输入序列 $X \in \mathbb{R}^{n \times d}$,计算 $Q = XW_Q$、$K = XW_K$、$V = XW_V$,其中 $W_Q, W_K, W_V \in \mathbb{R}^{d \times d}$ 是线性变换矩阵。
② 计算注意力分数:$A = \text{softmax}(QK^T / \sqrt{d})$,其中 $A \in \mathbb{R}^{n \times n}$ 是注意力权重。
③ 输出加权和:$H = AV$,其中 $H \in \mathbb{R}^{n \times d}$ 是上下文表示。

从数学上看,自注意力的每一步都是线性操作的组合:
-
$Q$、$K$、$V$ 的计算是矩阵乘法(线性)。
-
$QK^T$ 是线性操作(矩阵乘法)。
-
$\text{softmax}$ 是唯一的非线性部分,但它作用于注意力分数(标量),而不是直接作用于表示向量的每个元素。
-
$AV$ 是加权和(线性)。

因此,自注意力层的输出 $H$ 本质上是输入 $X$ 的线性变换,只不过通过注意力权重 $A$ 引入了动态的加权机制。尽管 $\text{softmax}$ 提供了非线性,但它只影响权重的分布,而不是直接对输出向量的每个元素进行逐元素的非线性变换。
2.2 堆叠两个自注意力层的结果#
假设我们有两个自注意力层:
-
第1层输入 $X$,输出 $H_1 = \text{softmax}(Q_1K_1^T / \sqrt{d})V_1$。
-
第2层以 $H_1$ 作为输入,输出 $H_2 = \text{softmax}(Q_2K_2^T / \sqrt{d})V_2$。
如果我们将这两层展开:
① $H_1 = A_1 V_1$,其中 $A_1 = \text{softmax}(Q_1K_1^T / \sqrt{d})$,$Q_1 = XW_{Q1}$,$K_1 = XW_{K1}$,$V_1 = XW_{V1}$。
② $H_2 = A_2 V_2$,其中 $A_2 = \text{softmax}(Q_2K_2^T / \sqrt{d})$,$Q_2 = H_1W_{Q2}$,$K_2 = H_1W_{K2}$,$V_2 = H_1W_{V2}$。
将 $H_1$ 代入 $H_2$,我们得到 $H_2 = A_2 (H_1 W_{V2}) = A_2 (A_1 V_1 W_{V2})$。
进一步展开,$H_2 = A_2 A_1 (X W_{V1} W_{V2})$。
从数学上看,$H_2$ 是 $X$ 的线性变换($W_{V1} W_{V2}$ 是矩阵乘法),乘以两个注意力权重矩阵 $A_2 A_1$ 的组合。虽然 $A_1$ 和 $A_2$ 包含 $\text{softmax}$ 非线性,但最终输出仍然可以看作是输入 $X$ 的加权线性组合。这种组合形式与单个自注意力层($H = A V$)的结构非常相似,只是权重矩阵和注意力分数的计算更复杂。

2.3 为什么像单个自注意力层?#
① 缺少逐元素非线性
自注意力层之间没有像ReLU或Tanh那样的逐元素非线性激活函数。$\text{softmax}$ 虽然是非线性的,但它作用于注意力分数(标量空间),而不是直接对表示向量 $H$ 的每个元素进行变换。因此,堆叠的输出仍然保持了线性的特性,只是通过不同的注意力权重重新分配了信息。
② 线性组合的叠加
两个自注意力层的输出可以被视为一个更复杂的加权和,而不是引入新的非线性模式。这与LSTM不同,LSTM的每层通过非线性门控机制(如Sigmoid和Tanh)彻底改变了信息的流动方式。
③ 表达能力的局限
如果没有逐元素非线性,堆叠自注意力层的表达能力不会像标准深度网络那样随着层数增加而显著提升。它更像是通过多次加权“重组”输入信息,而不是学习更复杂的非线性映射。
2.4 与LSTM的对比#
堆叠的LSTM层之所以强大,是因为:
① 每层都有逐元素非线性(如Sigmoid控制门,Tanh调整隐藏状态)。
② 这些非线性与递归结构结合,允许模型捕捉复杂的时序模式。
而堆叠的自注意力层缺乏这种逐元素非线性,仅靠注意力权重的动态调整来处理信息。虽然它解决了RNN的并行化和长距离依赖问题,但在深度建模复杂函数时显得不足。
3. Transformer的解决之道#
在实际应用中,这个问题通过在自注意力层后添加逐元素非线性得到了解决:
① 前馈网络(FFN):在每个自注意力层后,Transformer加入一个逐元素的前馈网络(通常是两层MLP,中间有ReLU)。
② 层归一化(Layer Normalization):进一步稳定训练过程。
这样,Transformer的每一层既有注意力的全局交互,又有逐元素非线性,从而解决了标准自注意力模块中没有非线性机制这一缺陷。所以,自注意力机制的缺点除了有不能够感知序列位置信息的变化外,还有无非线性变换这一弊端。