Transformer

关于Transformer

Transformer是一个革命性的神经网络架构,它完全摒弃了循环和卷积结构,完全依赖自注意力机制来处理序列数据。它在2017年由Google在论文《Attention Is All You Need》中首次提出,并迅速成为自然语言处理(NLP)乃至计算机视觉等多个领域的核心模型,催生了BERT、GPT等划时代的模型。

一、核心理念:为什么需要Transformer?

在Transformer之前,处理序列(如句子)的主流是RNN及其变体LSTM。它们存在两个主要瓶颈:

1. 顺序计算:必须逐个词元处理,无法并行,训练慢。

2. 长程依赖问题:尽管LSTM有所改善,但模型仍难以有效学习序列中远距离元素之间的关系。

Transformer的解决之道是:

  • 自注意力机制:让序列中的任意两个词元都能直接“互动”,无论距离多远,从而完美建模长程依赖。
  • 并行计算:由于自注意力是同时处理整个序列,极大地提高了训练效率。

二、核心架构详解

Transformer是一个 “编码器-解码器” 架构,但它的核心单元是 “多头自注意力” 和 “前馈神经网络”。

一个编码器-解码器块

每个编码器和解码器都由相同的核心层堆叠而成。

编码器层(一个)包含:

1. 多头自注意力层

2. 前馈神经网络层

解码器层(一个)包含::

1. 掩码多头自注意力层:确保在生成第t个词时,只能看到前面(t-1)个词,防止“偷看未来”。

2. 交叉注意力层:这是解码器的关键!它让解码器可以“关注”编码器输出的“记忆”,从而在生成时聚焦于输入序列的相关部分。

3. 前馈神经网络层

三、核心组件:自注意力机制

这是Transformer的灵魂。

1. 自注意力如何工作?

想象你在阅读一句话时,理解每个词的含义都需要参照句中其他词。自注意力就是让模型量化这种“参照”关系。

计算三步曲:对于一个序列中的每个词元(比如“苹果”),我们将其向量转化为三种表示:

查询向量(Q):当前词元提出的“问题”(“我是谁?我该关注谁?”)。

键向量(K):每个词元(包括自己)提供的“身份标识”(“我能回答关于什么的问题?”)。

值向量(V):每个词元实际携带的“信息内容”。

计算过程

  • 1. 计算注意力分数:用“苹果”的Q与序列中所有词的K进行点积,得到一组分数。分数越高,表示该词与“苹果”的相关性越强。
  • 2. 归一化(Softmax):将分数转化为概率分布(权重),使相关词的权重接近1,无关词的权重接近0。
  • 3. 加权求和:用这些权重对所有的V进行加权求和,得到“苹果”新的上下文感知表示。这个新表示融合了全局信息。

2. 为什么要“多头”?

  • 单一注意力头可能只学习到一种固定的关系模式(如指代关系)。
  • 多头注意力并行运行多个独立的注意力头,让模型可以同时关注来自不同表示子空间的信息(如语法关系、语义关系、指代关系等),最后将结果拼接融合,大大增强了模型的表征能力。

四、其他关键技术

1. 位置编码: 自注意力本身没有顺序概念。为了利用序列的顺序信息,Transformer在输入词嵌入中加入了位置编码。这是一种用正弦/余弦函数生成的向量,为每个位置赋予了独一无二的空间标识。

2. 残差连接与层归一化:使得堆叠数十甚至上百层网络成为可能,是训练深层Transformer模型的关键。

3. 前馈神经网络:一个简单的全连接网络(通常包含一个ReLU激活函数),作用在每个位置独立,用于进一步转换特征。

五、Transformer的影响与变体

  • 三大主流派系
    • 编码器派:专注于理解任务。如 BERT 及其变体,只使用Transformer的编码器,通过掩码语言模型进行预训练,擅长文本分类、问答等。
    • 解码器派:专注于自回归生成任务。如 GPT 系列,只使用Transformer的解码器(并移除了其中的交叉注意力层),通过预测下一个词进行预训练,擅长文本生成、对话等。
    • 编码器-解码器派:专注于序列到序列任务。如 T5、BART,保持原版架构,擅长机器翻译、文本摘要等。
  • 跨领域扩展
    • 视觉Transformer:将图像切分成块,视为一个序列,成功应用于图像分类、目标检测等计算机视觉任务,引发了“Vision is also all you need”的浪潮。

六、优点与挑战

优点:

  • 强大的长程依赖建模能力:自注意力机制是全局的。
  • 极高的并行计算效率:训练速度远超RNN。
  • 可扩展性极强: 模型性能随着数据量、参数量的增加而稳定提升,奠定了大语言模型的基础。

挑战:

  • 计算复杂度高:自注意力计算量与序列长度的平方成正比,处理超长文本(如整本书)时成本极高。
  • 对位置信息的依赖:位置编码是启发式加入的,对序列顺序的建模不如RNN直观。
  • 巨大的数据与算力需求: 要发挥其威力,需要海量数据和强大的GPU集群。

位置编码的数学计算

位置编码是Transformer的关键创新之一,它让模型知道序列中词元的顺序信息。让我详细解释其计算过程:

一、为什么需要位置编码?

Self-Attention没有位置概念

                # Self-Attention处理以下两个句子时:
                句子1: "猫 追 老鼠" → [猫, 追, 老鼠]
                句子2: "老鼠 追 猫" → [老鼠, 追, 猫]
                
                # 如果不加位置信息,模型看到的是:
                # 同样的三个词元,无法区分顺序差异!
                # 因为Self-Attention是置换等价的(permutation equivariant)                
              

解决方案:为每个位置添加唯一的编码,告诉模型"这个词在第几个位置"。

二、位置编码的数学计算

1. 原始公式(Transformer论文)

对于位置 pos 和维度 i:

$$ \LARGE \text{PE(pos, 2i)} = \sin \left(\frac{\text{pos}} { 10000^{\frac{2i}{\text{d\_model}}}} \right) $$

$$ \LARGE \text{PE(pos, 2i+1)} = \cos \left(\frac{\text{pos}} { 10000^{\frac{2i}{\text{d\_model}}}} \right) $$

其中:

  • pos:词元在序列中的位置(0, 1, 2, ...)
  • i:维度索引$(0 \leq i < \text{d\_model/2})$
  • d_model:模型的隐藏维度(如512)
  • 2i 和 2i+1:成对的维度

三、在Transformer中的实际应用

与词嵌入结合:与词嵌入相加(不是拼接)

四、位置编码的特性与优势

1. 相对位置关系:位置编码的神奇之处在于它能自然地表达相对位置:

2. 可扩展性

2. 距离衰减效应

Transformer的完整计算过程

让我们用一个简化的英中翻译例子,一步步拆解Transformer的完整计算过程。

  • 记忆长依赖关系:能够学习并记住数百步之前的输入信息
  • 门控机制:通过精密的门控系统控制信息的流动
  • 梯度稳定性:有效缓解了训练过程中的梯度问题