1. Transformer 的背景
Transformer 由 Vaswani 等人在 2017 年提出,论文名为 "Attention Is All You Need"。它彻底改变了 NLP(自然语言处理)领域,相较于 RNN(循环神经网络)和 LSTM(长短时记忆网络),Transformer 具备以下优势:
- 并行化计算:由于不依赖序列的时间步计算(不像 RNN 那样逐步处理),可以利用 GPU 高效计算。
- 长距离依赖捕捉能力更强:通过“自注意力(Self-Attention)”机制,可以在处理长序列时更有效地关注相关内容,而不是像 RNN 那样面临梯度消失问题。
- 更强的表达能力:多头注意力(Multi-Head Attention)机制使得模型可以关注输入序列中的不同部分,从多个角度建模语义关系。
2. Transformer 结构概览
Transformer 由“编码器(Encoder)和解码器(Decoder)”两部分组成,每部分由多个层(Layer)堆叠而成。
2.1 编码器(Encoder)
- 作用:接收输入序列,将其转换为高维表示,提供给解码器。
- 结构(每层):
- 多头自注意力(Multi-Head Self-Attention)
- 前馈神经网络(Feed-Forward Network, FFN)
- 层归一化(Layer Normalization) + 残差连接(Residual Connection)
组件 | 作用 |
---|---|
输入嵌入(Token Embedding) | 把输入序列的 Token 转换为向量表示(例如词向量)。 |
位置编码(Positional Encoding) | 由于 Transformer 不像 RNN 依赖序列顺序,需要添加位置信息。 |
多头自注意力(Multi-Head Self-Attention) | 让输入序列的不同部分彼此交互,捕捉长距离依赖关系。 |
前馈神经网络(Feed-Forward Network, FFN) | 提高特征表达能力,对每个 Token 进行非线性变换。 |
残差连接(Residual Connection)+ 层归一化(LayerNorm) | 让信息更容易传播,避免梯度消失或梯度爆炸。 |
编码器的流程
- 输入嵌入 + 位置编码 → 形成向量表示
- 多头自注意力 → 关注输入序列的不同部分(自注意力机制)
- 前馈神经网络(FFN) → 进一步处理特征
- 残差连接 + 层归一化 → 稳定训练,保持信息流动
- 多层堆叠 → 进一步丰富表示
最终输出:
一个与输入长度相同的表示向量,每个 Token 经过多次交互后,包含了整个序列的上下文信息。
2.2 解码器(Decoder)
- 作用:接收编码器输出和目标序列(已生成的部分),生成新的序列。
- 结构(每层):
- Masked 多头自注意力(Masked Multi-Head Self-Attention)
- 跨层注意力(Cross Attention),用于处理编码器输出
- 前馈神经网络(FFN)
- 层归一化 + 残差连接
组件 | 作用 |
---|---|
Masked 多头自注意力(Masked Multi-Head Self-Attention) | 只能关注当前和过去的 Token,防止未来信息泄露。 |
跨注意力(Cross-Attention) | 结合编码器输出,使解码器能够获取输入序列的信息。 |
前馈神经网络(Feed-Forward Network, FFN) | 进一步处理特征,增强表达能力。 |
残差连接(Residual Connection)+ 层归一化(LayerNorm) | 让信息更容易传播,提高训练稳定性。 |
解码器的流程
- 输入嵌入 + 位置编码 → 形成向量表示
- Masked 多头自注意力 → 只能看到已经生成的部分,防止未来信息泄露
- 跨注意力(Cross-Attention) → 结合编码器的输出,确保解码器生成的 Token 与输入相关
- 前馈神经网络(FFN) → 进一步处理特征
- 残差连接 + 层归一化 → 保持梯度稳定
- 多层堆叠 → 增强模型表达能力
- 最终全连接层(Linear) + Softmax → 预测下一个 Token 的概率分布
最终输出:
解码器在每个时间步输出一个 Token,最终生成整个目标序列。
输入输出关系:
- 输入:一个序列,例如
"I love machine learning"
。 - 输出:另一个序列,例如
"我爱机器学习"
(机器翻译任务)。
3. 核心机制
3.1 自注意力(Self-Attention)
核心计算公式:
其中:
- Q, K,V 分别是查询(Query)、键(Key)、值(Value)矩阵,来自相同的输入嵌入(Embedding)。
是缩放因子,避免梯度消失/爆炸。
- softmax 计算权重,使其归一化。
3.2 多头注意力(Multi-Head Attention)
- 作用:让模型可以关注输入的不同部分。
- 计算方式:将输入向量分成多个子空间,每个子空间独立执行注意力计算,然后合并。
3.3 位置编码(Positional Encoding)
Transformer 不像 RNN 那样有序列依赖,需要手动加入位置信息:
其中:
- pos 表示单词在序列中的位置,
- i 表示维度索引,
是嵌入向量的维度。