从零理解 Transformer:为什么“注意力”改变了AI?
人类如何处理信息?—— 从直觉理解“注意力”
假设你读这句话:“那只猫坐在垫子上,因为它很柔软。”
你会自然关注:
- “它” 指代的是 “垫子”(而不是猫)
- “柔软” 是垫子的属性
关键直觉:人类在处理信息时,会动态关注不同部分的关联性。这正是 Transformer 的核心思想!
传统模型的缺陷:RNN 为什么不够好?
RNN 的工作原理
传统模型(如RNN)像一条“传送带”,逐个单词处理: 句子:The → cat → sat → on → the → mat 处理:RNN逐步更新隐藏状态,最后输出结果
问题:
- 处理到句尾时,可能已经忘记句首的信息
- 无法并行计算(必须按顺序处理)
长距离依赖问题
例子:翻译 “The animal didn’t cross the street because it was too tired”
- RNN 可能混淆 “it” 指代的是 “animal” 还是 “street”
- 而人类能直接通过注意力找到关联
Transformer 的核心创新:自注意力机制
自注意力如何工作?
想象你在阅读句子**“猫坐在垫子上”**时,大脑会本能地:
1️⃣ 提取核心对象(“猫"是主体)
2️⃣ 关联动作描述(“坐"定义状态)
3️⃣ 忽略次要成分(“上"仅表方位)
🛠️ 自注意力工作流程分解(以"猫"为例)
步骤1:构建"问题-答案"映射系统
每个词语生成三组向量:
向量类型 | 类比意义 | 实例说明 |
---|---|---|
Query | “我想知道什么?” | “猫"需要知道自己的状态特征 |
Key | “我能回答什么?” | “坐"能提供动作信息 |
Value | “我的完整语义是什么?” | “垫子"包含物体属性信息 |
步骤2:建立语义关联度矩阵
通过点积计算"猫"与其他词语的关联强度:
$$ \text{相似度}(Q_{\text{猫}}, K_{\text{坐}}) = \frac{Q_{\text{猫}} \cdot K_{\text{坐}}^T}{\sqrt{d_k}} $$注意力权重分布
步骤3:信息融合与特征增强
加权聚合各词语的Value信息:
$$ \text{新表示}_{猫} = 0.6 \times V_{猫} + 0.3 \times V_{坐} + 0.1 \times V_{垫子} $$此时"猫"的表示包含:
自身物种特征(60%)
坐姿状态信息(30%)
所处环境线索(10%)
为什么要“多头”注意力?—— 分工合作
- 头1:关注“猫”和“坐”的动作关系
- 头2:关注“垫子”和“上”的位置关系
- 头3:捕捉其他语法特征
这样,每个头都能聚焦不同的信息,提高模型的表达能力。
如何实现“多头”注意力?—— 矩阵运算
- 矩阵乘法:计算注意力权重
- 点积:衡量相似度
- Softmax:归一化权重
Transformer 的完整架构
两大核心模块
编码器(理解输入) 解码器(生成输出)
↓ ↓
[自注意力 + 前馈网络] [自注意力 + 交叉注意力 + 前馈网络]
编码器详解
- 输入嵌入:将单词转换为向量
- 例:“猫” → [0.2, 1.3, -0.5, …]
- 位置编码:添加位置信息(否则模型不知道单词顺序)
- 类似给每个词加“页码”:位置1 → 正弦波,位置2 → 不同正弦波…
- 自注意力层:计算词与词之间的关系
- 前馈网络:对每个词独立做非线性变换
解码器如何工作?
- 输入:已生成的部分结果(例如“猫 坐在”)
- 掩码自注意力:防止偷看未来信息(只能看已生成的词)
- 交叉注意力:连接编码器的输出(知道原文信息)
- 预测下一个词:输出概率分布(例如“垫子”的概率最高)
为什么 Transformer 如此强大?
三大优势
优势 | 说明 | 类比 |
---|---|---|
并行计算 | 同时处理所有单词,速度极快 | 多人协同工作 |
全局视野 | 任意两个词可直接交互,无论距离多远 | 直接查阅全书任意章节 |
灵活扩展 | 通过堆叠更多层提升性能 | 增加专家团队规模 |
实际影响
- BERT:理解语言含义的模型(用于搜索引擎、问答系统)
- GPT:生成文本的模型(用于写作助手、聊天机器人)
- DALL·E:生成图像的模型也借鉴了注意力机制
关键数学公式
自注意力公式
$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\dfrac{QK^T}{\sqrt{d_k}}\right)V $$Q
(查询):当前关注的焦点K
(键):其他词的身份标识V
(值):实际携带的信息d_k
:缩放因子,防止数值过大
位置编码公式
$$ PE_{(pos,2i)} = \sin\left(pos/10000^{2i/d}\right) \\ PE_{(pos,2i+1)} = \cos\left(pos/10000^{2i/d}\right) $$- 通过正弦波组合,让模型感知位置差异
多头注意力公式
$$ \text{MultiHead}(Q, K, V) = \text{Concat}\left(\text{head}_1, \dots, \text{head}_h\right)W^O $$- 多个头并行计算,最后合并结果
前馈网络公式
$$ \text{FFN}(x) = \text{max}(0, xW_1 + b_1)W_2 + b_2 $$- 两层线性变换,增加非线性表达能力
损失函数公式
$$ \text{Loss} = -\sum_{i=1}^{N}\log p(y_i|x) $$- 交叉熵损失,用于训练模型
梯度下降公式
$$ \theta_{t+1} = \theta_t - \alpha \nabla_{\theta} \text{Loss} $$- 反向传播更新模型参数
总结:为什么“注意力”就够了?
- 传统方法:依赖复杂的循环结构,像用望远镜逐字查看
- Transformer:用注意力机制直接建立全局联系,像展开整本书同时阅读