更新于 2026年7月12日

第8节 Transformer中的全连接层#

根据「第2.1节 Transformer 位置编码教程:图解正弦 Positional Encoding 与编解码过程」内容的介绍可知,无论是在 Encoder中还是 Decoder中,在计算完多头注意力机制以后都有两个全连接层,那为什么需要这两个全连接层呢?明明多头注意力机制已经能有效捕捉序列间的关系,那么全连接层的作用又是什么呢?

8.1 逐元素非线性#

8.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)$

这些函数的作用是对每个输入值独立地进行变换,而不是对整个向量进行某种全局操作。

8.1.2 逐元素非线性的重要性#

① 增加模型的表达能力

在神经网络中,如果只有线性变换(比如矩阵乘法和加法),无论堆叠多少层,最终的函数仍然是线性的。这种模型的表达能力非常有限,无法捕捉现实世界数据的复杂非线性模式。

非线性激活函数打破了这种线性限制,使得网络可以学习更复杂的函数。例如,通过ReLU,网络可以决定“忽略”某些输入(当值小于0时输出0),从而形成分段线性的决策边界。

关于深度学习为什么需要引入非线性的详细解释还可以参见深度学习「第3.1.6节 深度学习线性回归入门:多项式回归与神经网络建模基础」内容。

② 层间信息的动态处理

非线性激活函数允许网络在每一层对信息进行“筛选”或“放大”。例如,Sigmoid可以将值压缩到(0, 1)区间,Tanh将值映射到(-1, 1),这有助于控制信息流动的范围和方向。

③ 标准架构中的普遍存在

在传统深度学习模型中(如多层感知机MLP或LSTM),每一层的输出通常会经过一个非线性激活函数。例如,在LSTM中,遗忘门、输入门和输出门的计算都包含Sigmoid或Tanh激活。这种设计已经成为深度学习的“预期”组成部分,因为它被证明对建模复杂任务(如语言建模或图像分类)至关重要。

8.2 多层注意力等于单个自注意力层#

如果在 Transformer 的 Eocoder 或 Decoder 中只使用多头注意力的话,那么无论堆叠多少个Eocoder 或 Decoder 都等价于一个Eocoder 或 Decoder。

8.2.1 自注意力机制的线性本质#

根据第1.2节内容可知,自注意力机制的核心计算可以用以下步骤概括:

第一步:生成查询、键和值:对于输入序列 $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}$ 提供了非线性,但它只影响权重的分布,而不是直接对输出向量的每个元素进行逐元素的非线性变换。

8.2.2 堆叠两个自注意力层的结果#

下面,我们来看一下,如果仅仅只是将两个自注意力层进行简单的叠加会是一个什么样的结果。

假设我们有两个自注意力层:

第一层输入$X$,输出$H_1 = \text{softmax}(Q_1K_1^T / \sqrt{d})V_1$。;第二层以$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$)的结构非常相似,只是权重矩阵和注意力分数的计算更复杂。

因此,多个自注意力层的简单叠加本质上仅等效于一个单独的注意力层,总结起来就是自注意力层:

① 缺少逐元素非线性

自注意力层之间没有像ReLU或Tanh那样的逐元素非线性激活函数。$\text{softmax}$ 虽然是非线性的,但它作用于注意力分数(标量空间),而不是直接对表示向量 $H$ 的每个元素进行变换。因此,堆叠的输出仍然保持了线性的特性,只是通过不同的注意力权重重新分配了信息。

② 线性组合的叠加

两个自注意力层的输出可以被视为一个更复杂的加权和,而不是引入新的非线性模式。这与LSTM不同,LSTM的每层通过非线性门控机制(如Sigmoid和Tanh)彻底改变了信息的流动方式。

③ 表达能力的局限

如果没有逐元素非线性,堆叠自注意力层的表达能力不会像标准深度网络那样随着层数增加而显著提升。它更像是通过多次加权“重组”输入信息,而不是学习更复杂的非线性映射。

因此,在实际应用中这个问题通过在自注意力层后添加逐元素非线性得到了解决:

① 前馈网络(FFN):在每个自注意力层后,Transformer加入一个逐元素的前馈网络(通常是两层MLP,中间有ReLU)。

② 层归一化(Layer Normalization):进一步稳定训练过程。

这样,Transformer的每一层既有注意力的全局交互,又有逐元素非线性,从而解决了标准自注意力模块中没有非线性机制这一缺陷。所以,自注意力机制的缺点除了有不能够感知序列位置信息的变化外,还有无非线性变换这一弊端。

阅读 --

Transformer 中没全连接层行不行?

本文从自注意力机制与逐元素非线性的互补关系出发,讲清 Transformer 编码器-解码器每一层中的 Multi-Head Attention 与 Feed-Forward Network FFN 全连接层各自承担的功能,详细分析若移除 …

7.3 LSTM网络

在前面两节内容中,我们详细介绍了RNN模型的原理以及在PyTorch框架中的使用方法。虽然理论上RNN模型在处理序列数据方面具有着很好的效果,但在处理长序列数据时RNN模型可能会出现梯度消失或爆炸的情况,进而导致模型无法学习到长期依赖的关系 …

第6节 基于Transformer的分类模型

本文是 Transformer 精读系列第6讲,从零用 Transformer Encoder 搭建 AG_News 新闻文本分类模型。系统讲清分类任务只需 Encoder 不需要 Decoder 的原因、Encoder 输出张量的池化策略 …

第3节 网络结构与自注意力实现

本文是 Transformer 精读系列第3讲,详细讲解如何用 PyTorch 一步步实现 MultiHeadAttention 模块。先回顾多层 Transformer 与单层 Encoder-Decoder 结构,再系统拆解自注意力实现 …