什么是 transformer

📅 2026/6/25 14:27:16
什么是 transformer
transformer 架构擅长处理本质上具有顺序性的文本数据。它以文本序列作为输入并生成另一个文本序列作为输出。例如将输入的英文句子翻译成西班牙语。它的核心是一系列编码器层和解码器层。为避免混淆我们将单个层称为「编码器」或「解码器」而将一组编码器层称为「编码器堆栈」或「解码器堆栈」。编码器栈和解码器栈各自都有对应的嵌入层用于处理各自的输入。最后还有一个输出层来生成最终的输出。所有编码器和解码器在架构上都是相同但是他们之间的权重是不共享的。编码器包含自注意力层Self-attention 和前馈层Feed-forward 前者负责计算序列中不同词汇之间的关系后者将注意力层的输出作为输入。解码器包含自注意力层和前馈层以及编码器-解码器注意力层。每个编码器和解码器都有自己的一组权重。编码器是一个可复用的模块是所有Transformer架构的核心组件。除了上述两层之外它还在这两层周围设置了残差连接并包含两个归一化层。transformer架构有很多变体。有些Transformer架构完全没有解码器只依赖于编码器后面会再写文章给大家介绍。注意力机制的作用是什么transformer 能取得突破性性能关键在于它使用了注意力机制。在处理一个词时注意力机制使模型能够关注输入中与该词密切相关的其他词。例如下面这句话ball 与 blue、holding这两个词密切相关 而 blue 与 boy 无关。transformer 架构使用的自注意力机制会把输入序列里的每一个词和其他所有词关联起来。例如考虑以下两个句子Thecatdrank the milk becauseitwas hungry.The cat drank themilkbecauseitwas sweet.在第一句中it 指的是 cat而在第二句中it 指的是 milk。当模型处理 it 这个词时自注意力机制会给模型提供更多关于其含义的信息以便模型能够将 it 与正确的词联系起来。为了让模型能处理句子意图和语义中更细微的差别transformer 为每个词都配备了多个注意力得分。例如在处理单词 it 时第一个得分突出显示了 cat而第二个得分突出显示了 hungry。因此当它解码单词 it 时例如将其翻译成另一种语言它会将 cat 和 hungry 的某些特征融入到翻译后的单词中。训练 transformertransformer 在训练阶段和推理阶段的工作方式略有不同。我们先看看训练时的数据流向。训练数据包含两部分源序列也就是输入序列比如翻译任务里的英文句子You are welcome。目标序列也就是期望的输出序列比如对应的西班牙语De nada。transformer 的目标就是学会如何同时利用输入序列和目标序列来输出正确的目标序列。transformer 处理数据的过程是这样的输入序列被转换成嵌入向量同时加入了位置编码然后喂给编码器。编码器堆栈处理这些数据并生成输入序列的一个编码表示。目标序列的开头会加上一个句子起始标记然后也被转换成嵌入向量同样加入位置编码再喂给解码器。解码器堆栈会结合上面编码器堆栈产生的编码表示一起处理这些数据最终生成目标序列的一个编码表示。输出层将这个编码表示转换成词汇概率并输出最终的输出序列。transformer 的损失函数Loss function 会用这个输出序列跟训练数据里的目标序列做比较。产生的损失值用于生成梯度通过反向传播来训练 transformer。transformer推理过程在推理阶段我们只有输入序列没有目标序列作为解码器的输入。Transformer 的目标是仅根据输入序列生成目标序列。因此就像在 Seq2Seq 模型中一样我们在一个循环中生成输出并将前一个时间步的输出序列输入到下一个时间步的解码器中直到遇到句子结束标记为止。跟 Seq2Seq 模型不同的是在每一个时间步我们不是只喂给解码器上一个词而是把到目前为止生成的所有输出序列都重新喂进去。推理阶段的数据流向是输入序列被转换成嵌入向量加位置编码喂给编码器。编码器堆栈处理这些数据生成输入序列的编码表示。这时我们不用目标序列而是用一个只包含句子起始标记的空序列。同样把它转换成嵌入向量加位置编码喂给解码器。解码器堆栈结合编码器堆栈的编码表示处理这些数据生成一个目标序列的编码表示。输出层将其转换成词汇概率并产出一个输出序列。我们取这个输出序列概率最大的词作为当前预测出的词。然后把这个词填入解码器输入序列的第二位置。这时解码器的输入序列就包含了句子起始标记 第一个预测词。回到第3步。和之前一样把新的解码器序列喂给模型。然后取这次输出的第二个词将其添加到解码器序列的末尾。重复这个过程直到模型预测出句子结束标记。注意因为编码器序列在每次迭代中都不变所以我们不必重复第1步和第2步。教师强制Teacher Forcing训练时把目标序列直接喂给解码器的做法叫做教师强制Teacher Forcing。为什么要这么做这个术语又是什么意思呢其实训练时原本可以采用和推理时一样的方法让 transformer 在一个循环里跑每次取输出序列概率最大的词拼接到解码器输入后面再喂给解码器进行下一次迭代。直到预测出句子结束标记再用损失函数比较生成的输出序列和目标序列来训练网络。但这种循环式的训练不仅会让训练时间成倍增加还会让模型更难训练。因为模型可能需要基于可能有误的第一个预测词去预测第二个词这样一步步错误就会像滚雪球一样累积。相反我们把目标序列喂给解码器等于是给了它一个提示就像老师做的那样。即使模型第一步预测错了它还是能直接用正确的第一个词去学习预测第二个词从而避免错误不断累积。此外这种并行方式也让 transformer 能在训练时一次性输出所有词无需循环极大地加速了训练。transformer 用在哪些地方transformer模型用途广泛可用于大多数自然语言处理任务例如语言模型和文本分类。它们经常用于序列到序列模型应用于机器翻译、文本摘要、问答系统、命名实体识别和语音识别等领域。针对不同的问题transformer架构有多种不同的变体。基本的编码器层是这些架构的通用构建模块而不同的「头部」则根据所要解决的问题而有所不同。用于分类的 transformer 架构以情感分析应用为例。它接收一个文本文档作为输入。一个分类头会接收 transformer 的输出然后生成对类别标签的预测比如 正面或 负面 情绪。用于语言模型的 transformer 架构语言模型架构会接收输入序列比如一个句子的前半部分然后通过预测后续句子来生成新的文本。一个语言模型头会接收 transformer 的输出并为词汇表中的每一个词生成一个概率。其中概率最高的那个词就会被作为句中下一个词的预测结果。