1. 背景:从循环到注意力#

Transformer 出现前,大多数在机器翻译等任务中表现出色的模型都采用 编码器-解码器 架构:
编码器 (Encoder) : 读取输入句子 (如德语) ,并将其压缩为一个连续表示,通常称为上下文向量 (context vector) 。
解码器 (Decoder) : 接收这个上下文向量,并一次生成一个词,最终组成输出句子(如英语)。
传统上,编码器和解码器都由 RNN 构建。编码器逐步处理输入,其最终隐藏状态成为上下文向量;解码器则依赖这个唯一的向量来生成输出。这种设计存在一个主要瓶颈: 模型必须将输入句子的全部含义压缩到一个固定大小的向量中,这对长句尤其不利。

2. Transformer 架构#

Transformer 保留了编码器‑解码器框架: 编码器将输入序列处理为一组带上下文的表示,解码器使用这些表示生成输出。 MixCollage-14-Jul-2026-03-59-PM-5330 在原始模型中,每个堆栈包含六个相同的层。这些层的核心是缩放点积注意力机制——Transformer 的核心。

缩放点积注意力#

注意力机制会计算一组值 (Values,VV) 的加权和 , 而权重由查询 (Query,QQ) 与一组键 (Keys,KK) 之间的相似度决定。
组成部分:
Query(QQ):我们正在寻找的内容。
Key(KK):用于索引值的标签。
Value(VV):与每个键关联的实际信息。
数学表达式:

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

多头注意力(Multi-Head Attention)#

Transformer 并非只使用单一注意力机制,而是采用 多头注意力 (Multi‑Head Attention) , 并行运行多个 (此处 h=8h = 8) 缩放点积注意力: 通过学习的权重矩阵,将 QQ、KK、VV 线性投影到 hh 个不同的子空间。在每个头中独立执行缩放点积注意力。拼接所有头的输出,再通过另一线性层生成最终输出。

MultiHead⁡(Q,K,V)=Concat⁡(head⁡1,…,head⁡h)WO\operatorname{MultiHead}(Q,K,V) = \operatorname{Concat}(\operatorname{head}_1,\ldots,\operatorname{head}_h)W^O where head⁡i=Attention⁡(QWiQ,KWiK,VWiV)\text{where }\operatorname{head}_i = \operatorname{Attention}(QW_i^Q,KW_i^K,VW_i^V)

多头注意力使模型能够同时学习并关注词语间不同类型的关系——包括语法、语义等。

位置编码(Positional Encoding)#

自注意力机制本质上对顺序不敏感。为注入序列位置信息,Transformer 在 Input Embedding 中加入位置编码,使用不同频率的正弦和余弦函数:

PE(pos, 2i)=sin⁡(pos100002i/dmodel)PE_{(pos,\,2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\mathrm{model}}}}\right) PE(pos, 2i+1)=cos⁡(pos100002i/dmodel)PE_{(pos,\,2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\mathrm{model}}}}\right)

这些函数为每个位置生成唯一编码,并使模型有可能泛化到训练时未见过的序列长度。

3. 为什么 Self-Attention 比 RNN 好?#

image

1. 计算复杂度:当序列长度 n<dn < d 时,自注意力比循环结构更快。#

2. 并行化:RNN 需执行 O(n)O(n) 次顺序操作;自注意力可在 O(1)O(1) 次顺序操作内并行处理所有位置。#

3. 依赖路径长度:自注意力一次可连接任意两个位置,更容易学习长距离依赖。#