通俗理解Transformer
摘要:Transformer是2017年提出的革命性神经网络架构,通过自注意力机制彻底改变了序列建模方式。其核心创新在于完全摒弃RNN/CNN结构,采用多头注意力机制处理序列数据,解决了传统模型在并行计算、长距离依赖和全局语义捕捉方面的局限。关键组件包括:1)自注意力机制,通过Q/K/V向量动态计算词间关系;2)编码器-解码器结构,分别负责语义提取和序列生成;3)位置编码和残差连接等辅助机制。该架
前言
Transformer是一种用于自然语言处理(NLP)和深度学习的神经网络架构,由Google的研发人员于2017年发表的《Attention Is All You Need》提出来的,这篇论文引入了全新的神经网路架构Transformer,抛弃了传统的循环神经网络(RNN)和卷积神经网路(CNN)结构,核心思想是依赖于“注意力机制”来处理序列数据
在 Transformer 出现之前,序列建模任务(如机器翻译、文本生成)主要依赖 RNN(循环神经网络) 和 CNN(卷积神经网络)然而他们都有各自的问题:
- RNN 的问题:
- 无法并行计算:RNN 按顺序处理序列(如逐词处理),导致训练效率低下。
- 长距离依赖失效:RNN 通过隐藏状态传递信息,但长序列中早期信息会逐渐“衰减”(梯度消失问题)。
- CNN 的问题:
- 局部感知限制:卷积核只能捕捉局部特征,难以建模全局语义关联。
- 固定感受野:难以处理不同长度的序列。
Transformer 通过 自注意力机制 和 编码器-解码器架构,彻底解决了这些问题,成为序列建模的“最优解”。
(到这里知道 Transformer怎么来的 是解决什么问题就行)
一、Self-Attention 自注意力机制
Transformer 允许模型在处理序列中的某个词的时候,能够考虑到训练中所有的其他词语,并根据他们之间的重要性分配不同的“注意力”权重
那么这些值是怎么计算的呢,如下是注意力计算公式:
对于输入序列中的每个词,自注意机制会 生成三个向量,“查询(Query)、键(Key)、值(Value)”每个词通过这三者向量关系,动态计算与其他词的相关性。
该公式的目的是为了实现对输入序列的不同部分进行加权关注,从而让模型能够更有效地捕捉到输入数据中的长期依赖关系和上下文信息。

查询(Query)Q:表示当前词在查询其他词的信息
键(Key)K:表示其他词在被查询时的信息
值(Vaue)V:表示其他词的实际内容
举例:
假设输入:"Transformer 的架构分为两部分:编码器 和 解码器"
对输入的语句进行向量化,假设是六维向量,会输出如下6*6的矩阵
| 分词 | 6维向量 |
|---|---|
| Transformer | [8.4, 4.1, 9.7, 1.0, 5.5, 2.2] |
| 的架构分为 | [3.0, 6.5, 5.0, 8.0, 2.0, 4.0] |
| 两部分 | [2.0, 7.1, 9.8, 0.0, 0.0, 0.0] |
| : | [6.5, 0.0, 0.0, 0.0, 0.0, 0.0] |
| 编码器 | [3.2, 7.0, 2.2, 0.0, 0.0, 0.0] |
| 和解码器 | [2.1, 5.3, 9.9, 3.0, 0.0, 0.0] |
这里我们会有一个参数矩阵,假如我们有如下6*4的Wq, Wk, Wv的参数矩阵
Wq = [
[ 1.764, 0.400, 0.979, 2.241],
[ 1.868, -0.977, 0.950, -0.151],
[ 0.411, -0.103, 0.411, 0.144],
[ 1.454, 0.761, 0.122, 0.444],
[-0.348, -0.277, 0.046, -0.932],
[ 0.534, -1.259, -0.152, -0.708]
]
Wk = [
[ 0.654, -0.305, -0.103, -0.466],
[-0.362, -0.916, -1.496, 0.377],
[ 0.914, -0.361, 0.128, -0.206],
[-0.249, -0.199, 0.637, -0.367],
[-0.307, 0.888, 0.451, 0.056],
[ 0.634, 0.493, -0.463, 0.907]
]
Wv = [
[-0.310, -0.836, -0.425, -0.123],
[ 0.420, -0.343, -0.389, -1.138],
[-0.226, 0.679, -0.579, -0.252],
[-0.152, 0.374, -0.693, 0.192],
[ 0.247, 1.657, 0.119, 0.363],
[-0.738, -0.277, -0.818, -0.043]
]
参数矩阵 Wq, Wk, Wv 是什么?
参数矩阵是由模型训练得到的 Wq, Wk, Wv,再确定形态后参数矩阵初始化是随机的。
在自注意力机制中,每个输入词的向量会通过三个不同的线性变换,生成三个新的向量:
- Query(查询向量):
Q = X × Wq - Key(键向量):
K = X × Wk - Value(值向量):
V = X × Wv
其中:
X是输入向量(这里的X词嵌入向量就是我们上面对应的6维向量)。Wq,Wk,Wv就是三个参数矩阵,它们决定了如何将输入向量转换成 Q、K、V
由如上公式进行计算得到我们的Attention(Q,K,V) 也就是查询(Query)、键(Key)、值(Value)
| 分词 | Query (4维) | Key (4维) | Value (4维) |
|---|---|---|---|
| Transformer | [27.19, -2.56, 15.82, 18.45] | [12.33, -6.12, 3.45, -1.02] | [-3.49, 7.21, -8.33, -3.12] |
| 的架构分为 | [10.21, -8.34, 5.67, 9.88] | [3.45, -5.67, 2.33, 4.56] | [1.23, 6.78, -2.34, 2.11] |
| 两部分 | [12.01, -7.89, 8.76, 2.34] | [7.89, -8.76, 1.23, -0.45] | [-2.34, 8.90, -7.65, -1.23] |
| : | [11.50, 0.00, 8.18, 14.59] | [4.25, -2.35, -0.67, -3.04] | [-2.15, -3.40, -2.75, -0.80] |
| 编码器 | [8.76, -4.32, 4.56, 3.21] | [3.21, -3.45, 0.67, 0.89] | [0.67, 8.90, -1.23, 1.45] |
| 和解码器 | [13.45, -9.01, 10.23, 5.67] | [8.90, -10.12, 3.45, 2.34] | [-3.45, 9.01, -9.87, -0.45] |
通俗理解流程:
- 设计模型结构:决定
Wq,Wk,Wv长什么样(比如 6*4 的矩阵)。 - 随机初始化:给这些矩阵填上随机的小数(如 -0.1 到 0.1 之间的数)。
- 开始训练:输入数据,计算损失,反向传播,更新
Wq,Wk,Wv。 - 最终得到:训练完成后,
Wq,Wk,Wv变成了能有效提取 Q、K、V 的“智能”矩阵。
通过训练出来的 Wq, Wk, Wv,让每个词知道“我该关注谁”“我代表什么信息”,从而实现强大的语义理解能力。
计算Softmax
Q*K后面的T为转置,什么意思呢,看如下
我们将这 6 个向量 按行排列,形成一个 6×4 的矩阵 K:

然后进行 转置,得到 K^T(形状:4×6):

Q*K^T结果为6*6的矩阵:
| 分词 | 注意力分数(Q × K^T 的一行) |
|---|---|
| Transformer | [386.8, 229.3, 247.9, 48.9, 123.1, 365.7] |
| 的架构分为 | [229.3, 145.6, 168.2, 89.1, 98.7, 210.5] |
| 两部分 | [247.9, 168.2, 189.5, 102.3, 112.4, 234.1] |
| : | [48.9, 89.1, 102.3, 156.7, 67.8, 90.2] |
| 编码器 | [123.1, 98.7, 112.4, 67.8, 89.0, 145.6] |
| 和解码器 | [365.7, 210.5, 234.1, 90.2, 145.6, 345.2] |
值越大表示“越关注”
d_k 到底是什么?
🔹 d_k = Key 向量的维度(Dimension of Key)
所以根号d_k=根号4=2
那么 Q*K^T/2为
我们将上述矩阵中的每个元素都除以 2,得到缩放后的 Scores 矩阵

计算Softmax 权重矩阵
将如上Scores矩阵中的每一个向量进行如下公式计算
公式:

最终计算结果为

使用 Softmax 对 Value 矩阵加权求和
先列出 Value 矩阵 V(6×4):

将我们Softmax的结果*V得到如下最终结果
| 分词 | Output(= Value) |
|---|---|
| Transformer | [-3.49, 7.21, -8.33, -3.12] |
| 的架构分为 | [1.23, 6.78, -2.34, 2.11] |
| 两部分 | [-2.34, 8.90, -7.65, -1.23] |
| : | [-2.15, -3.40, -2.75, -0.80] |
| 编码器 | [0.67, 8.90, -1.23, 1.45] |
| 和解码器 | [-3.45, 9.01, -9.87, -0.45] |
二、编码器和解码器
| 组件 | 核心功能 | 关键机制 |
|---|---|---|
| 编码器 | 理解输入,提取语义 | 多头自注意力 + 前馈网络 |
| 解码器 | 生成输出,逐步预测 | 掩码自注意力 + 编码器-解码器注意 |
编码器部分
- 输入词向量 → Input Embedding
- 添加位置编码 → Positional Encoding
- 计算 Q、K、V → Multi-Head Attention
- 缩放 Scores 矩阵 → Multi-Head Attention
- 计算 Softmax 权重矩阵 → Multi-Head Attention
- 残差连接与层归一化 → Add & Norm
- 前馈神经网络 → Feed Forward
- 再次残差连接与层归一化 → Add & Norm
解码器部分
- 已生成的目标序列 → Output Embedding
- 添加位置编码 → Positional Encoding
- 计算掩码多头注意力 → Masked Multi-Head Attention
- 计算编码器-解码器注意力 → Multi-Head Attention
- 残差连接与层归一化 → Add & Norm
- 前馈神经网络 → Feed Forward
- 再次残差连接与层归一化 → Add & Norm
- 线性层 → Linear
- Softmax 层 → Softmax

流程图中各部分的中文名及作用
-
Input Embedding(输入嵌入)
- 作用:将输入文本转换为向量表示。每个词被映射到一个固定维度的向量空间中。
- 对应计算过程:在我们的示例中,输入词已经被转换为词向量。
-
Positional Encoding(位置编码)
- 作用:给词向量添加位置信息,使模型能够理解词序。Transformer 模型本身没有像 RNN 那样的顺序处理机制,因此需要额外的位置信息。
- 对应计算过程:假设我们已经为每个词向量添加了位置编码。
-
Multi-Head Attention(多头注意力机制)
- 作用:让每个词关注序列中的其他词,捕捉它们之间的依赖关系。多头注意力机制通过多个注意力头并行工作,可以捕捉不同类型的依赖关系。
- 对应计算过程:我们已经计算了
QK^T并进行了缩放,这是多头注意力机制的一部分。
-
Add & Norm(残差连接与层归一化)
- 作用:残差连接帮助缓解深度网络中的梯度消失问题,层归一化则稳定训练过程,加速收敛。
- 对应计算过程:在计算过程中,我们提到每个子层都有残差连接和层归一化。
-
Feed Forward(前馈神经网络)
- 作用:对每个位置独立地进行非线性变换,增加模型的表达能力。
- 对应计算过程:我们在计算过程中提到了前馈神经网络(FFN)。
-
Masked Multi-Head Attention(掩码多头注意力机制)
- 作用:在解码器中使用,防止解码器在生成第 t 个词时“看到”后面的词(未来信息),实现自回归生成。
- 对应计算过程:在解码器部分,我们使用了掩码多头注意力机制。
-
Output Embedding(输出嵌入)
- 作用:在解码器中,将已生成的部分目标序列转换为向量表示。
- 对应计算过程:在解码器的输入部分,我们将已生成的目标序列转换为向量。
-
Linear(线性层)
- 作用:将解码器的输出转换为词汇表大小的向量,用于预测下一个词的概率分布。
- 对应计算过程:在最终输出阶段,我们使用线性层将解码器的输出转换为概率分布。
-
Softmax(Softmax 层)
- 作用:将线性层的输出转换为概率分布,表示每个词作为下一个词的概率。
- 对应计算过程:在最终输出阶段,我们使用 Softmax 层得到每个词的概率。
三、整体流程说明
Transformer 架构流程与计算步骤对照表
| 图中模块(中文名) | 英文名称 | 作用说明 | 在示例计算中的对应过程 |
|---|---|---|---|
| 输入嵌入 | Input Embedding | 将输入的每个词(token)转换为固定维度的向量表示(词向量) |
示例中已提供词向量: 如 |
| 位置编码 | Positional Encoding | 为词向量添加位置信息,使模型能感知词序(Transformer 本身无顺序感知) | 在输入向量中加入位置编码 |
| 多头注意力机制 | Multi-Head Attention | 并行运行多个自注意力头,让模型从不同子空间学习词语间的依赖关系 | 计算了 Q, K, V → QK^T → 缩放 → Softmax → 加权求和输出 |
| 残差连接与层归一化 | Add & Norm | 残差连接缓解梯度消失;层归一化稳定训练过程 | 计算中提及:每个子层后都有 x + sublayer(x) 和 LayerNorm |
| 前馈神经网络 | Feed Forward Network (FFN) | 对每个位置独立进行非线性变换,增强模型表达能力 | 示例中未详细计算,但结构存在:FFN(x) = max(0, xW₁ + b₁)W₂ + b₂ |
| 掩码多头注意力机制 | Masked Multi-Head Attention | 解码器专用,防止在生成时“偷看”未来词,实现自回归生成 | 在解码器中使用,计算 QK^T 后需加掩码矩阵(mask),使上三角为 -∞ |
| 输出嵌入 | Output Embedding | 将已生成的目标序列(如翻译结果)转换为向量表示,作为解码器输入 | 解码器输入如:<start> → 向量;<start> The → 向量序列 |
| 线性层 | Linear Layer | 将解码器最后的输出向量映射到词汇表大小的维度(如 30000) | 最终输出向量 → 经线性变换 → 得到每个词的 logits |
| Softmax 层 | Softmax | 将 logits 转换为概率分布,选择概率最高的词作为输出 | P(word) = softmax(logits),用于生成下一个词 |
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)