图解Transformer详解 | AI生成和翻译
以下是Jay Alammar的《图解Transformer》的全面总结介绍。这篇文章是最受好评、高度可视化指南之一,解释了Transformer架构(现代AI模型如GPT、BERT和Claude的基础)的工作原理。该文章通过直观的视觉组件,分解了2017年 seminal 的论文《Attention is All You Need》。
1. 高层架构(黑盒)
核心上,Transformer充当一个序列到序列的黑盒。在机器翻译任务(例如法语到英语)中,它接受一个输入句子并输出翻译后的文本。
打开黑盒,架构揭示两个主要组件:
- 编码组件: 一组编码器(原始论文堆叠了六个)。它们将输入文本处理成连续表示。
- 解码组件: 一组相同结构的解码器(也是六个)。它们接收编码后的表示以及之前的输出,逐词生成目标文本。
2. 深入编码器
堆叠中的每个编码器都有相同的结构,包含两个子层:
- 自注意力层(Self-Attention Layer): 帮助编码器在处理一个特定词时,查看输入句子中的其他词。
- 前馈神经网络(Feed-Forward Neural Network, FFNN): 一个标准的全连接网络,独立并行地应用于每个词的表示。
在数据进入底部编码器之前,单词被转换为512维的向量,称为词嵌入(Word Embeddings)。为了确保模型理解词的顺序,位置编码(Positional Encodings)(遵循特定数学正弦/余弦波模式的向量)被直接添加到这些嵌入中。
3. 核心引擎:自注意力
自注意力允许模型映射词之间的依赖关系,无论它们在句子中的距离有多远。例如,在句子 “The animal didn’t cross the street because it was too tired.” 中——人类知道“it”指的是动物,而不是街道。自注意力在数学上将“animal”的表示融入到“it”的处理过程中。
计算涉及使用训练好的权重矩阵从每个输入词创建三个向量:
- 查询(Queries, $Q$): 当前词在寻找什么。
- 键(Keys, $K$): 其他词提供什么来匹配。
- 值(Values, $V$): 词的实际内容表示。
自注意力公式的逐步步骤:
- 得分: 计算当前词的查询($Q$)与所有词的键($K$)的点积,以确定要关注多少。
- 缩放: 将得分除以键维度的平方根($\sqrt{d_k}$)以稳定梯度。
- Softmax: 将缩放后的得分通过softmax函数,得到概率分布(权重总和为1)。
- 求和: 将softmax得分与其对应的值($V$)相乘并求和,产生该层的最终输出。
4. “多头怪兽”(多头注意力)
Transformer不计算一次注意力,而是使用多头注意力(Multi-Headed Attention)(8个并行头)。这扩展了模型同时关注不同位置的能力(例如,一个头可能关注谁执行了动作,而另一个头关注动作本身)。来自8个头的结果向量被拼接起来,并乘以一个最终权重矩阵,投影回一个单一向量。
5. 残差连接与层归一化
为了防止信息丢失并帮助稳定训练,编码器和解码器中的每个子层都有一个残差连接(residual connection)(跳过该层),随后是一个层归一化(Layer Normalization)步骤。
6. 解码器端
解码器的工作方式与编码器类似,但其堆叠中引入了第三层:
- 掩码自注意力(Masked Self-Attention): 生成文本时,解码器只允许查看序列中较早的位置。未来的词被“掩码掉”(在softmax前设置为$-\infty$),以防止模型通过向前看而作弊。
- 编码器-解码器注意力(Encoder-Decoder Attention): 这一层的工作方式与多头注意力相同,只是它的查询来自解码器中其下方的层,而它的键和值直接来自编码器堆栈的最终输出,允许解码器专注于输入文本的相关部分。
7. 输出生成(线性层与Softmax层)
解码器堆栈输出一个连续的浮点数向量。为了将其转换回单词:
- 线性层(Linear Layer): 将该向量投影到一个巨大的“logits”向量中,其大小等于模型整个词汇表的大小(例如10,000个独特词汇)。
- Softmax层(Softmax Layer): 将这些分数转换为明确的概率。概率最高的词被作为该时间步的输出。
参考: