1. 背景:从循环到注意力#
Transformer 出现前,大多数在机器翻译等任务中表现出色的模型都采用 编码器-解码器 架构:
编码器 (Encoder) : 读取输入句子 (如德语) ,并将其压缩为一个连续表示,通常称为上下文向量 (context vector) 。
解码器 (Decoder) : 接收这个上下文向量,并一次生成一个词,最终组成输出句子(如英语)。
传统上,编码器和解码器都由 RNN 构建。编码器逐步处理输入,其最终隐藏状态成为上下文向量;解码器则依赖这个唯一的向量来生成输出。这种设计存在一个主要瓶颈: 模型必须将输入句子的全部含义压缩到一个固定大小的向量中,这对长句尤其不利。
2. Transformer 架构#
Transformer 保留了编码器‑解码器框架: 编码器将输入序列处理为一组带上下文的表示,解码器使用这些表示生成输出。
在原始模型中,每个堆栈包含六个相同的层。这些层的核心是缩放点积注意力机制——Transformer 的核心。
缩放点积注意力#
注意力机制会计算一组值 (Values,) 的加权和 , 而权重由查询 (Query,) 与一组键 (Keys,) 之间的相似度决定。
组成部分:
Query():我们正在寻找的内容。
Key():用于索引值的标签。
Value():与每个键关联的实际信息。
数学表达式:
多头注意力(Multi-Head Attention)#
Transformer 并非只使用单一注意力机制,而是采用 多头注意力 (Multi‑Head Attention) , 并行运行多个 (此处 ) 缩放点积注意力: 通过学习的权重矩阵,将 、、 线性投影到 个不同的子空间。在每个头中独立执行缩放点积注意力。拼接所有头的输出,再通过另一线性层生成最终输出。
多头注意力使模型能够同时学习并关注词语间不同类型的关系——包括语法、语义等。
位置编码(Positional Encoding)#
自注意力机制本质上对顺序不敏感。为注入序列位置信息,Transformer 在 Input Embedding 中加入位置编码,使用不同频率的正弦和余弦函数:
这些函数为每个位置生成唯一编码,并使模型有可能泛化到训练时未见过的序列长度。
3. 为什么 Self-Attention 比 RNN 好?#
