AI / AIGC · 2024-04-18

Transformer训练深入浅出学习笔记(算是吧)

一、Transformer的三大核心机制

1. 自注意力(Self-Attention)—— 全局关联分析器

  • 问题:传统模型(如RNN)只能逐个处理词,无法直接看到全局关系。
  • 解决方案:自注意力让每个词同时“看到”所有其他词,并计算它们的重要性。
  • 具体步骤(用「查字典」类比):
    1. 生成Query、Key、Value
    • 每个词生成三把“钥匙”:Query(我要找什么)、Key(我有什么标签)、Value(我实际的内容)
    • 类比:图书馆每本书有索引标签(Key)、搜索关键词(Query)、书的内容(Value)
      1. 计算注意力权重
    • 用Query和所有Key做点积(相似度计算),再通过Softmax归一化为概率
    • 公式简化注意力分数 = Softmax(Query·Key^T / √d_k)
    • 为什么除以√d_k?防止点积过大导致梯度消失(类似“压缩数值范围”)
      1. 加权聚合Value
    • 用注意力权重对Value加权求和,得到当前词的“新表示”。
    • 效果:比如“它”这个词,可能聚合了“猫”和“鱼”的信息

2. 多头注意力(Multi-Head Attention)—— 多专家委员会

  • 问题:单一注意力只能捕捉一种类型的关系(如语法或语义)。
  • 解决方案:并行多个独立的注意力头(如8个头),每个头关注不同模式。
  • 类比:让8个专家分别分析句子(一个看主谓宾,一个看情感,一个看指代关系…),最后合并结果。
  • 具体步骤
    1. 将Query、Key、Value拆分成多个头(例如8头)。
    2. 每个头独立计算注意力,得到8组不同的特征。
    3. 拼接所有结果并通过线性层融合。

3. 位置编码(Positional Encoding)—— 词的“位置GPS”

  • 问题:Transformer没有顺序处理,需要显式告诉模型词的位置。
  • 解决方案:为每个位置生成唯一的编码向量,加到词嵌入上。
  • 两种编码方式
    • 正弦函数编码(原始论文):
    • 用不同频率的正弦/余弦函数生成位置向量。
    • 优点:模型能学会相对位置(如位置5和位置6的关系类似位置10和11)
    • 可学习编码(BERT等模型使用):
    • 直接训练一个位置嵌入矩阵,类似词嵌入。

二、训练细节深入

1. 解码器的掩码注意力(Masked Attention)

  • 为什么需要掩码?训练时解码器只能看到已生成的词(不能作弊看未来)。
  • 实现方式:在注意力权重计算时,用“上三角掩码矩阵”遮挡未来位置。
    • 示例:生成第3个词时,只能关注第1、2个词。

2. 残差连接(Residual Connection)与层归一化(LayerNorm)

  • 残差连接:每一层的输出 = 原始输入 + 处理后的结果。
    • 作用:防止深层网络梯度消失(类似“保留原始记忆,只学差异部分”)。
  • 层归一化:对每一层的输出做标准化(均值为0,方差为1)。
    • 作用:稳定训练过程,加速收敛。

3. 前馈网络(Feed-Forward Network)—— 非线性增强器

  • 结构:两层全连接层,中间用ReLU激活函数。
    • 公式FFN(x) = ReLU(xW1 + b1)W2 + b2
  • 作用:为注意力输出增加非线性变换,增强模型表达能力。

三、Transformer为何能吊打RNN?

1. 并行化计算

  • RNN必须按序列逐步计算,Transformer所有位置同时处理。
    • 结果:GPU并行加速,训练速度提升10倍以上。

2. 长距离依赖直接建模

  • RNN靠“记忆”传递信息,距离越远信息丢失越多。
  • Transformer的自注意力一步到位捕捉任意距离关系(如句首和句尾)。

3. 模块化设计

  • 编码器和解码器由相同结构的层堆叠而成,易于扩展(如GPT-3有96层)。

四、关键问题解析

Q1:注意力权重可视化后能看出什么?

  • 例如在翻译中,模型可能会对“it”分配高权重到“猫”和“鱼”,显示指代关系。

Q2:Transformer如何处理一词多义?

  • 通过上下文注意力动态调整词向量。例如“苹果”在“吃苹果”和“苹果手机”中会聚合不同的上下文信息。

Q3:为什么大模型(如GPT)只用解码器?

  • GPT这类生成模型不需要编码器-解码器结构,直接用堆叠的解码器层(带掩码注意力)自回归生成文本。

五、总结:Transformer的终极秘密

输入 → 词嵌入 + 位置编码 → 自注意力(全局关联) → 前馈网络(非线性增强) → 残差连接(保底记忆) → 层归一化(稳定训练) → 重复N次 → 输出

核心公式总结
– 注意力:Output = Softmax(QK^T/√d_k) · V
– 残差连接:x = x + Sublayer(LayerNorm(x))
– 层归一化:LayerNorm(x) = (x - μ)/σ * γ + β


  • 精读《Attention Is All You Need》
  • 使用Tensor2Tensor可视化注意力权重。