神经网络与深度学习课程总结3:Transformer 模型原理与结构详解


摘要

Transformer 是深度学习中处理序列数据的重要模型结构,最早被广泛应用于机器翻译任务,后来逐渐成为自然语言处理、大语言模型、视觉模型等领域的基础架构。与传统 RNN、LSTM、GRU 等循环神经网络相比,Transformer 不再依赖逐步递归计算,而是通过自注意力机制直接建模序列中不同位置之间的关系,因此具有更强的长距离依赖建模能力和更高的并行计算效率。本文围绕 Transformer 的整体结构展开总结,重点介绍输入部分、词嵌入、位置编码、自注意力机制、多头注意力机制、Add & Norm 层、前馈神经网络、编码器、解码器、输出层以及网络训练过程,并结合公式和示意图说明 Transformer 如何完成从输入序列到输出序列的建模过程。


1. Transformer 模型概述

Transformer 是 Google 团队在 2017 年提出的序列建模模型,其核心思想是使用注意力机制代替传统循环结构。传统 RNN、LSTM、GRU 在处理序列时通常需要按照时间步依次计算,前一个时刻的隐藏状态会影响后一个时刻,因此并行计算能力较弱。当句子较长时,模型还容易出现长距离依赖捕捉困难的问题。

Transformer 的主要优势可以概括为两点:

  1. 能够捕捉长距离语义关联:自注意力机制可以直接计算任意两个 token 之间的相关性,即使两个词距离很远,也可以建立联系。
  2. 能够充分利用 GPU 并行训练:Transformer 不依赖循环结构,输入序列中的所有 token 可以同时参与计算,因此训练效率更高。

Transformer 的整体结构可以分为四个主要部分:

模块 作用
输入部分 将文本 token 转换为向量表示,并加入位置信息
编码器 Encoder 对源序列进行语义编码
解码器 Decoder 根据目标端已生成内容和编码器输出逐步生成结果
输出部分 通过 Linear 和 Softmax 得到最终词概率分布

在机器翻译任务中,Transformer 的典型流程是:输入源语言句子,经过编码器得到上下文语义表示;解码器结合目标端历史词和编码器输出,逐步预测目标语言中的下一个词。

在这里插入图片描述


2. Transformer 的整体结构

Transformer 由编码器和解码器组成。编码器由若干个相同结构的编码器层堆叠而成,解码器也由若干个相同结构的解码器层堆叠而成。

编码器中的每一层主要包括:

  • 多头自注意力层;
  • Add & Norm 层;
  • 前馈神经网络;
  • Add & Norm 层。

解码器中的每一层主要包括:

  • Masked 多头自注意力层;
  • Add & Norm 层;
  • 编码器—解码器交叉注意力层;
  • Add & Norm 层;
  • 前馈神经网络;
  • Add & Norm 层。

这种结构的设计逻辑非常清晰:编码器负责理解输入序列,解码器负责根据编码器提供的信息生成目标序列。注意力机制贯穿其中,是 Transformer 区别于传统循环网络的关键。


3. 输入部分:从文本到向量表示

Transformer 不能直接处理自然语言文本,因此首先需要将句子转换为模型可以计算的向量形式。输入部分主要包括分词、序列对齐、词嵌入和位置编码。

3.1 分词与 token 序列

对于一句文本,首先需要进行分词处理,将句子划分为若干个 token。例如:

我 有 一只 猫

经过分词后,每个词或子词都会被映射为一个整数编号,形成 token 序列:

[12, 35, 47, 58]

在实际任务中,不同句子的长度往往不同。为了便于批量训练,需要将不同长度的句子对齐到同一长度。常用方式包括:

  1. 对过长的句子进行截断;
  2. 对较短的句子进行填充;
  3. 使用 <pad> 标记补齐长度。

例如:

原句 1: the cat sat still on the mat
原句 2: cat sat on the mat

对齐后可以变为:

the cat sat still on the mat
pad pad cat sat on the mat

这样可以保证一个 batch 内的数据具有相同的长度,便于矩阵运算。


3.2 One-hot 表示与词嵌入

最简单的词表示方式是 one-hot 编码。假设词表大小为 VVV,每个词可以表示为一个 VVV 维向量,其中只有对应位置为 1,其余位置为 0。

Word Index One-hot Encoding
movie 1 [1, 0, 0, 0, …]
good 2 [0, 1, 0, 0, …]
fun 3 [0, 0, 1, 0, …]
boring 4 [0, 0, 0, 1, …]

但是 one-hot 编码存在明显缺点:维度过高、向量稀疏,并且不能表达词与词之间的语义相似性。例如 “good” 和 “fantastic” 在语义上接近,但在 one-hot 空间中无法体现这种关系。

因此,Transformer 使用词嵌入 Embedding 将 one-hot 或 token id 映射为低维稠密向量。其数学形式可以写为:

xi=ETei x_i = E^T e_i xi=ETei

其中,eie_iei 表示第 iii 个词的 one-hot 向量,EEE 表示可学习的词嵌入矩阵,xix_ixi 表示映射后的词向量。

对于长度为 nnn 的输入序列,经过词嵌入后可以得到矩阵:

X=[x1,x2,⋯ ,xn] X = [x_1, x_2, \cdots, x_n] X=[x1,x2,,xn]

其中:

X∈Rn×d X \in \mathbb{R}^{n \times d} XRn×d

nnn 表示 token 数量,ddd 表示词向量维度。


3.3 位置编码 Positional Encoding

Transformer 中没有 RNN 那样的递归结构,因此模型本身无法天然感知 token 的顺序。如果两个句子包含完全相同的词,但词序不同,它们的含义可能完全不同。例如:

这只狗追赶一只狗

同一个词出现在不同位置时,语义作用可能不同。因此需要引入位置编码,使模型能够获得每个 token 的位置信息。

Transformer 使用正弦和余弦函数构造位置编码:

PE(pos,2i)=sin⁡(pos100002i/d) PE(pos, 2i) = \sin \left( \frac{pos}{10000^{2i/d}} \right) PE(pos,2i)=sin(100002i/dpos)

PE(pos,2i+1)=cos⁡(pos100002i/d) PE(pos, 2i+1) = \cos \left( \frac{pos}{10000^{2i/d}} \right) PE(pos,2i+1)=cos(100002i/dpos)

其中:

  • pospospos 表示 token 在句子中的位置;
  • iii 表示位置编码向量中的维度索引;
  • ddd 表示模型维度。

最终输入到 Transformer 的向量不是单独的词嵌入,而是词嵌入与位置编码相加:

Z=X+PE Z = X + PE Z=X+PE

这样,每个 token 的表示既包含词本身的语义信息,也包含其在句子中的位置信息。

在这里插入图片描述


4. 编码器 Encoder

编码器的作用是对输入序列进行深层语义编码。一个编码器层主要由多头自注意力层、Add & Norm 层和前馈神经网络组成。

4.1 自注意力机制的基本思想

自注意力机制的核心问题是:当模型处理某个 token 时,应该关注句子中的哪些其他 token?

以句子为例:

The animal didn't cross the street because it was too tired.

其中 “it” 指代哪个词,需要结合上下文判断。自注意力机制可以通过计算 token 之间的相关性,让模型自动学习哪些词更重要。

自注意力机制可以理解为:当前 token 的表示不是孤立得到的,而是由序列中所有 token 的信息加权求和得到的。权重越大,表示模型越关注该 token。

其基本思想可以写为:

E→E+ΔE E \rightarrow E + \Delta E EE+ΔE

ΔE=∑i=1nwivi \Delta E = \sum_{i=1}^{n} w_i v_i ΔE=i=1nwivi

其中,wiw_iwi 表示当前 token 对第 iii 个 token 的注意力权重,viv_ivi 表示第 iii 个 token 的值向量。


4.2 Query、Key、Value

在自注意力机制中,每个输入向量都会通过三个不同的线性变换得到三个向量:

  • Query:查询向量,表示当前 token 想要寻找什么信息;
  • Key:键向量,表示每个 token 能够提供什么特征;
  • Value:值向量,表示每个 token 真正携带的信息内容。

其计算公式为:

Q=XWQ Q = XW^Q Q=XWQ

K=XWK K = XW^K K=XWK

V=XWV V = XW^V V=XWV

随后,通过 Query 和 Key 的相似度来计算注意力分数。常见的点积注意力公式为:

Attention(Q,K,V)=softmax(QKTdk)V Attention(Q, K, V) = softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V

其中,dkd_kdk 表示 Key 向量的维度。除以 dk\sqrt{d_k}dk 的原因是,当维度较大时,点积结果可能过大,导致 Softmax 进入梯度较小的区域,因此需要进行缩放,使训练更加稳定。

自注意力计算过程可以概括为:先由输入矩阵 XXX 线性变换得到 QQQKKKVVV,再计算 QKTQK^TQKT 得到相似度分数,经过缩放和 Softmax 得到注意力权重,最后用该权重对 VVV 加权求和。

在这里插入图片描述


4.3 多头自注意力机制

单个注意力头只能从一个表示子空间中学习 token 之间的关系。为了让模型从多个角度理解序列,Transformer 引入了多头注意力机制。

多头注意力的思想是:将 QQQKKKVVV 分别映射到多个不同的子空间,每个子空间独立计算一次注意力,然后将多个注意力头的结果拼接起来,再经过线性变换得到最终输出。

公式如下:

headi=Attention(QWiQ,KWiK,VWiV) head_i = Attention(QW_i^Q, KW_i^K, VW_i^V) headi=Attention(QWiQ,KWiK,VWiV)

MultiHead(Q,K,V)=Concat(head1,head2,⋯ ,headh)WO MultiHead(Q, K, V) = Concat(head_1, head_2, \cdots, head_h)W^O MultiHead(Q,K,V)=Concat(head1,head2,,headh)WO

其中,hhh 表示注意力头的数量,WiQW_i^QWiQWiKW_i^KWiKWiVW_i^VWiVWOW^OWO 都是可学习参数。

多头注意力的优点是:不同注意力头可以关注不同类型的信息。例如,有的头可能关注主谓关系,有的头可能关注修饰关系,有的头可能关注远距离依赖关系,从而增强模型表达能力。

在这里插入图片描述


4.4 Add & Norm 层

Transformer 中每个子层后面都会接一个 Add & Norm 结构。Add 指的是残差连接,Norm 指的是 Layer Normalization。

残差连接的形式为:

Y=X+Sublayer(X) Y = X + Sublayer(X) Y=X+Sublayer(X)

其中,Sublayer(X)Sublayer(X)Sublayer(X) 可以是多头注意力层,也可以是前馈神经网络层。

加入 LayerNorm 后,完整形式为:

Output=LayerNorm(X+Sublayer(X)) Output = LayerNorm(X + Sublayer(X)) Output=LayerNorm(X+Sublayer(X))

残差连接可以缓解深层网络中的梯度消失问题,使模型更容易训练;LayerNorm 可以稳定每一层的输入分布,加快模型收敛。


4.5 前馈神经网络 Feed Forward

编码器层中的前馈神经网络对每个位置的向量分别进行非线性变换。它由两层全连接网络组成,中间使用 ReLU 激活函数:

FFN(X)=max(0,XW1+b1)W2+b2 FFN(X) = max(0, XW_1 + b_1)W_2 + b_2 FFN(X)=max(0,XW1+b1)W2+b2

需要注意的是,FFN 对每个 token 位置独立计算,但所有位置共享同一组参数。因此,它不会直接建模不同位置之间的关系,位置间关系主要由注意力机制完成。


5. 解码器 Decoder

解码器用于生成目标序列。与编码器相比,解码器结构更加复杂,因为它不仅要利用目标端已经生成的 token,还要结合编码器输出的源语言语义信息。

解码器每一层主要包括三个子模块:

  1. Masked Multi-Head Self-Attention;
  2. Encoder-Decoder Cross-Attention;
  3. Feed Forward Network。

5.1 Masked 自注意力

在训练机器翻译模型时,目标端句子是已知的,但在真实推理过程中,模型只能看到已经生成的词,不能提前看到未来词。因此,解码器中的自注意力需要使用 Mask 操作。

Mask 的作用是:在预测当前位置 token 时,只允许模型关注当前位置及其之前的 token,不允许关注之后的 token。

例如目标序列为:

I am going to buy a new car

当模型预测 “going” 时,只能看到:

I am

不能提前看到:

to buy a new car

因此,Mask 可以防止信息泄露,保证训练过程与推理过程一致。

在注意力分数矩阵中,未来位置通常会被设置为一个非常小的值,例如 −∞-\infty−109-10^9109,经过 Softmax 后对应权重接近 0。

在这里插入图片描述


5.2 编码器—解码器交叉注意力

解码器中第二个注意力层是交叉注意力层。它与普通自注意力的区别在于 QQQKKKVVV 的来源不同。

在交叉注意力中:

  • Query 来自解码器上一子层的输出;
  • Key 和 Value 来自编码器的输出。

也就是说,解码器通过 Query 去“查询”编码器输出中与当前生成位置最相关的源语言信息。

其形式仍然可以写为:

Attention(Qdec,Kenc,Venc)=softmax(QdecKencTdk)Venc Attention(Q_{dec}, K_{enc}, V_{enc}) = softmax\left(\frac{Q_{dec}K_{enc}^T}{\sqrt{d_k}}\right)V_{enc} Attention(Qdec,Kenc,Venc)=softmax(dk QdecKencT)Venc

交叉注意力是机器翻译任务中连接源语言和目标语言的重要桥梁。


6. 输出部分:Linear + Softmax

解码器最终输出的是一个向量表示,还不能直接作为单词输出。因此需要通过线性层和 Softmax 层将其转换为词表中每个词的概率。

首先通过线性层映射到词表大小的维度:

z=hW+b z = hW + b z=hW+b

其中,hhh 是解码器输出,WWWbbb 是线性层参数,zzz 是每个候选词的打分。

然后经过 Softmax 得到概率分布:

P(yi∣x)=ezi∑j=1Vezj P(y_i|x) = \frac{e^{z_i}}{\sum_{j=1}^{V} e^{z_j}} P(yix)=j=1Vezjezi

其中,VVV 表示词表大小,P(yi∣x)P(y_i|x)P(yix) 表示当前输出为第 iii 个词的概率。

模型最终选择概率最大的词作为预测结果:

y^=arg⁡max⁡iP(yi∣x) \hat{y} = \arg\max_i P(y_i|x) y^=argimaxP(yix)


7. Transformer 的训练过程

以机器翻译任务为例,训练数据通常由源语言句子和目标语言句子构成。例如:

中文:我打算买一辆新车
英文:I am going to buy a new car

训练时,源语言句子输入编码器,目标语言句子右移后输入解码器。所谓右移,是指在目标序列开头加入开始符 <start>,让模型根据已知的前文预测下一个词。

例如目标句子为:

I am going to buy a new car

解码器输入可以是:

<start> I am going to buy a new

模型训练目标是预测:

I am going to buy a new car

在每个位置上,模型都会输出一个词表概率分布,并与真实下一个词进行比较。常用损失函数是交叉熵损失:

L=−∑i=1Vyilog⁡(y^i) L = -\sum_{i=1}^{V} y_i \log(\hat{y}_i) L=i=1Vyilog(y^i)

对于整个序列,可以写为:

L=−∑t=1T∑i=1Vyt,ilog⁡(y^t,i) L = -\sum_{t=1}^{T}\sum_{i=1}^{V} y_{t,i}\log(\hat{y}_{t,i}) L=t=1Ti=1Vyt,ilog(y^t,i)

其中,TTT 表示序列长度,VVV 表示词表大小,yt,iy_{t,i}yt,i 表示第 ttt 个位置真实词的 one-hot 标签,y^t,i\hat{y}_{t,i}y^t,i 表示模型预测概率。

训练过程主要包括:

  1. 输入源语言句子;
  2. 编码器提取源语言上下文表示;
  3. 解码器输入右移后的目标语言句子;
  4. 解码器结合目标端历史信息和编码器输出进行预测;
  5. 通过 Linear 和 Softmax 得到词概率分布;
  6. 与真实目标词计算交叉熵损失;
  7. 误差反向传播,更新模型参数。

在这里插入图片描述


8. Transformer 的核心优势总结

Transformer 之所以能够成为深度学习中的基础模型,主要原因包括:

8.1 并行计算能力强

Transformer 不需要像 RNN 那样按时间步依次计算,而是可以一次性处理整个序列,因此更适合 GPU 并行计算。

8.2 长距离依赖建模能力强

自注意力机制可以直接计算任意两个 token 之间的关系,即使两个词相距很远,也能建立联系。

8.3 表达能力强

多头注意力机制允许模型从多个子空间捕捉不同类型的语义关系,使模型具有更丰富的表示能力。

8.4 结构模块化

Transformer 由 Embedding、Positional Encoding、Attention、Add & Norm、Feed Forward 等模块组成,结构清晰,便于扩展。

8.5 应用范围广

Transformer 最初用于机器翻译,后来被广泛应用于文本分类、问答系统、文本生成、图像识别、语音识别以及大语言模型等领域。


9. 重点知识梳理

知识点 核心含义
Tokenization 将文本划分为 token 序列
Embedding 将 token id 映射为低维稠密向量
Positional Encoding 为模型提供位置信息
Self-Attention 计算序列内部 token 之间的相关性
Q、K、V 查询向量、键向量和值向量
Multi-Head Attention 多个注意力头并行学习不同关系
Add & Norm 残差连接与层归一化
Feed Forward 对每个位置进行非线性特征变换
Mask 防止解码器看到未来信息
Cross-Attention 解码器利用编码器输出进行翻译
Linear + Softmax 将模型输出转换为词概率分布
Cross Entropy 衡量预测词分布与真实词之间的差异

10. 个人学习体会

通过本周 Transformer 模型的学习,我对深度学习中的序列建模方法有了更加系统的理解。传统循环神经网络虽然能够处理序列数据,但由于其递归结构限制,在长序列建模和并行计算方面存在不足。Transformer 通过注意力机制重新定义了序列信息建模方式,使模型能够直接关注序列中任意位置的信息,从而有效解决长距离依赖问题。

其中,我认为最关键的部分是自注意力机制。自注意力机制并不是简单地对所有词求平均,而是根据当前 token 与其他 token 的相关性分配不同权重,因此模型能够自动判断哪些词更重要。多头注意力进一步增强了这种能力,使模型可以从不同角度理解句子结构和语义关系。

此外,位置编码也是 Transformer 中非常重要的设计。由于 Transformer 没有循环结构,如果不加入位置信息,模型就无法区分词语顺序。正弦位置编码通过不同频率的 sin 和 cos 函数为每个位置生成独特表示,使模型能够感知序列顺序。

总体来看,Transformer 的结构虽然比传统神经网络复杂,但它的核心逻辑非常清晰:先将文本转换为向量,再通过注意力机制建模 token 之间的关系,最后通过解码器和输出层生成目标序列。理解 Transformer 的基本结构和注意力计算过程,有助于进一步学习 BERT、GPT、ViT 等后续模型。


11. 总结

本文围绕 Transformer 模型进行了系统总结。Transformer 的核心是注意力机制,尤其是自注意力机制和多头注意力机制。输入部分通过词嵌入和位置编码将文本转换为包含语义与位置信息的向量;编码器负责提取源序列的上下文表示;解码器结合目标端历史信息和编码器输出完成序列生成;输出部分通过 Linear 和 Softmax 得到词表概率分布;训练过程中使用交叉熵损失进行优化。

Transformer 的提出极大推动了自然语言处理的发展,也为后续大规模预训练模型奠定了基础。掌握 Transformer 的输入表示、注意力计算、编码器—解码器结构和训练流程,是理解现代深度学习模型的重要基础。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐