理解Transformer和注意力机制基本原理

简单理解Transformer和注意力机制基本原理

论文下载地址:
Attention Is All You Need

1. Transformer为什么这么强?

完全摆脱 RNN/CNN,只依赖注意力机制(Attention)来建模序列中的依赖关系。

1.1 注意力机制让模型能捕捉任意距离的依赖

  • 传统 RNN:词间距离越远,信息越难传递
  • Transformer:一步通过 Attention 就能让“第一个词”关注到“最后一个词”

1.2 完全并行化,更快

  • RNN 必须按顺序处理:t1 → t2 → t3 → …
  • Transformer 全部输入一次性计算,所以可以大规模并行(特别适合 GPU/TPU)。

1.3 多头注意力让模型表达能力极强

多个注意力头 = 多个不同的理解视角,让模型更加丰富多样。

2. 编码器和解码器/Encoder-Decoder架构

Transformer由两部分组成:

  • 编码器
  • 解码器(GPT就是纯解码器)

2.1 Encoder —— 负责“把输入句子变成深层语义表示”

编码器的工作是:
通过多层Self-Attention,把一句话从“表层的词”转换为“深层语义向量表示”。

A. Self-Attention —— 学习词与词之间的关系

例如输入:

1
小明 把 球 踢 给 了 小红

Self-Attention 会计算:

  • “小明”与“踢”的关系
  • “踢”与“给”的关系
  • “球”在句子中属于宾语
  • “小红”是接收者

也就是让模型理解谁对谁重要

B. Multi-Head Attention —— 不同角度的语义抽取

多个注意力头像多个“理解维度”:

  • 一个头关注语法
  • 一个头关注指代
  • 一个头关注动作
  • 一个头关注对象

然后把这些不同理解拼接起来。

C. Feed Forward Network(前馈网络)

每一层 Encoder 都在 Attention 后加上 FFN,用来:

  • 增强非线性表达
  • 提炼信息
  • 提高模型的抽象能力

再加上:

  • 残差连接(Residual)——避免梯度消失
  • LayerNorm——稳定训练
  • 位置编码——补充顺序信息

所以 Encoder 的最终结果是:

  • 把整句输入变成一串蕴含丰富上下文关系的语义向量(Contextual Embeddings)。

2️.2 Decoder —— 负责“根据语义向量逐步生成输出”

A. Masked Self-Attention(掩码自注意力) —— 不能偷看未来词

Decoder 在生成句子时:

第一个词 → 第二个词 → 第三个词 …

每一步都只能依赖已生成内容,而不能看到未来词。

这叫:Masked Multi-Head Self-Attention

它保证模型生成时符合“从左到右”的逻辑。

B. Cross-Attention —— 对 Encoder 的输出进行关注

在每一层 Decoder 中,注意力要分两类:

Attention 类型 作用
Masked Self-Attention 看自己已经生成的部分
Cross-Attention 看 Encoder 输出的语义向量

Cross-Attention = Decoder 问 Encoder:

“你帮我理解的输入里,哪些部分与我现在要生成的内容最相关?”

比如翻译:

  1. Encoder 得到中文语义向量
  2. Decoder 生成英文句子
  3. 每生成一词,都需要关注输入语义中的不同部分

C. Feed Forward Network + 残差等结构

与 Encoder 一样,Decoder 也必须包含:

  • FFN(增强抽象能力)
  • 残差连接(防止梯度问题)
  • LayerNorm(稳定训练)

2.3 总结

1
2
输入句子 → [Encoder 多层:Self-Attention + FFN] → 语义向量
语义向量 + 已生成词 → [Decoder 多层:Masked Attention + Cross Attention + FFN] → 输出新词

3. Self-Attention(自注意力机制)

自注意力就是“一个词在理解自己时,会自动去找句子里哪些词和它有关,并根据相关程度给它们不同权重,再综合起来形成新的表达”

3.1 举例

例如输入句子:他 把 球 踢 给 了 小明

模型处理“他”时,会计算它与“球”“小明”“踢”等词的相关性权重。

每个词会对所有词打一个“重要性分数”,然后根据分数对信息加权求和。

3.2 原理

3.2.1 每个词都生成 3 个向量:Q、K、V

  • Q(Query):我想知道自己要关注谁
  • K(Key):我是什么,别人用这个来判断该不该关注我
  • V(Value):我的实际内容(语义)
向量 类比 作用
Q 问题卡 你要找相关信息
K 身份卡 别人是否应该关注你
V 信息卡 你真正想提供的内容

3.2.2 用 Q 和 K 计算“相关性分数”

在处理词 A 时,词 B 对它有多重要?

  • 公式:score = Q × K^T

例如:

  • “踢” 对 “小明”的分数高
  • “踢” 对 “了”的分数很低

3.2.3 用 Softmax 把分数变成权重

让所有权重加起来 = 1(类似概率分布)

权重
小明 0.45
0.30
小红 0.20
把 / 给 / 了 很低

3.2.4 把所有相关信息按重要程度加权求和,形成“踢”的新语义向量

这样“踢”就不再是一个孤立的词,而是一个:

  • 结合了整个句子语境的词向量

4. Multi-Head Attention(多头注意力)

不是只算一次注意力,而是算多次、用多个“头”并行

每个 head 关注不同类型的信息:

  • 一个 head 关注句法结
  • 一个 head 关注主谓关系
  • 一个 head 关注指代关系

最后把所有 head 拼接起来,表达能力更强。

5. 词嵌入Embedding

Embedding 的作用是把“离散的、无法直接计算的符号(如词、字、图片块)转换成连续的、带语义的向量表示,方便神经网络进行理解和推理。

计算机不能理解“人”“苹果”“跑步”这些文字,它只懂数字。

  • 所以需要一种方法把“符号”变成“向量”,并且这个向量要带有语义结构。

5.1 把离散符号转换成神经网络能处理的连续向量

Embedding 把每个 Token 映射到一个维度为 d 的向量,例如 768、1024、4096。

1
2
“猫” -> [0.12, -0.88, 0.03, 0.55, …]
“狗” -> [0.15, -0.75, 0.02, 0.61, …]

这就让 Transformer 可以进行:

  • 点积运算(计算相似度)
  • 其他运算

5.2 表达语义上的相似与差异

向量空间中“距离 + 方向”能表达语义关系。

例如:

1
国王 - 男人 + 女人 ≈ 女王
1
2
(猫, 狗) 的向量很近
(苹果, 跑步) 的向量很远
  • 语义相似 → 向量相近
  • 语义不同 → 向量分离

6. Positional Encoding(位置编码)

由于 Transformer 没有 RNN 的顺序结构,模型本身不知道词在句子里的顺序。

所以要额外加入位置信息:

  • sin/cos位置编码(原论文)
  • 或可学习位置编码

作用:
告诉模型:“今天 下雨 了”“下雨 今天 了”位置不一样,含义不同。

7. Feed Forward Network(前馈神经网络)

每一层 Transformer 中都有一个位置独立的 FFN:

1
2
3
(xW1 + b1)
ReLU
再加一层 W2

作用:

  • 提升非线性表达能力
  • 提取更复杂的特征

并且每层都包含:

  • 残差连接(Residual Connection)
  • LayerNorm层归一化
    来保证训练稳定性。