NLP自然语言处理-Transformer架构

介绍

Transformer的整体结构非常对称、简洁,论文中的经典结构只有 6层编码器 + 6层解码器,所有大模型都是在这个基础上堆叠层数(比如GPT-3堆叠了96层)、增大维度得到的。

总体架构

在机器翻译中,Transformer可以将一种语言翻译成另一种语言,如果把Transformer看成一个黑盒,那么其结构如下图所示:

总体架构:编码器(Encoder) + 解码器(Decoder)

Transformer由若干个 编码器 和 解码器 组成:

  • 编码器负责 理解文本
  • 解码器负责 生成文本

输入文本先经过 编码器 处理得到 语义特征,再传给 解码器,解码器基于这个特征生成目标文本。

输入 → 编码器 → 语义特征 → 解码器 → 输出

编码器、解码器架构图

左边为编码器,右边为解码器:

一、编码器(Encoder)

理解文本的 读懂模块【N层堆叠,论文中N=6】

编码器是对称的、全相同的结构堆叠,每一层的内部结构完全一样,所有编码器共享权重,核心作用:对输入的文本做深度的语义理解,输出一个包含完整上下文信息的特征矩阵。

编码器单一层的内部结构(固定4步,顺序不变)

  1. 多头自注意力层(Multi-Head Self-Attention):核心模块,计算每个词和其他词的关联,捕捉上下文信息;
  2. 残差连接 + LayerNorm(层归一化):Transformer的「保命机制」,解决深度学习的梯度消失问题,让模型能堆叠更多层,训练更稳定;
    → 残差连接:把输入直接加到输出上,相当于「走捷径」,梯度可以直接传递;
    → LayerNorm:对每层的输出做归一化,让数据分布更稳定,加速训练。
  3. 前馈神经网络(Feed Forward Network, FFN):两层全连接层,对每个词的特征做「非线性变换」,提取更复杂的语义特征,所有词并行计算;
  4. 残差连接 + LayerNorm:和第二步一样,完成单一层的处理。

编码器的输入与输出

  • 输入:经过词嵌入+位置编码后的向量矩阵(比如一句话有10个词,每个词是512维向量,输入就是10×512的矩阵);
  • 输出:编码器的最后一层输出一个和输入维度完全相同的特征矩阵,这个矩阵里包含了每个词的完整上下文语义信息,也叫「上下文表征」。

编码器的核心特点

  • 双向注意力:编码器的自注意力是全双向的,能看到一个词的「左边所有词」和「右边所有词」,比如处理「小明爱小红」中的「爱」,能同时看到「小明」和「小红」,完美理解语义;
  • 只做理解,不做生成:编码器没有生成能力,只是把文本转换成机器能理解的特征。

二、编码器(Encoder)的计算过程

1. 第一层-生成QKV向量

生成Query、Key、Value 向量

自注意力机制的第一步,是将输入序列中的每个位置表示映射为三个不同的向量,分别是 查询(Query)、键(Key) 和 值(Value)

  • Query:表示当前词的用于发起注意力匹配的向量;
  • Key:表示序列中每个位置的内容标识,用于与Query进行匹配;
  • Value:表示该位置携带的信息,用于加权汇总得到新的表示。

自注意力的核心思想是:每个位置用自身的 Query向量,与整个序列中所有位置的 Key向量 进行相关性计算,从而得到注意力权重,并据此对对应的 Value向量 加权汇总

三个向量的计算公式如下:

其中,W_{q},W_{k},W_{v} 均为可学习的参数矩阵。

论文中:x 是 512维向量,q 是 64维向量

第一层-计算位置相关性

完成Query、Key、Value向量的生成后,模型会使用每个位置的 Query向量 与所有位置的 Key向量 进行相关性评分

下图中是 x_{1}对其他位置的相关性评分:

评分函数采用向量点积形式。由于在高维空间中,点积的数值可能过大,会影响 softmax 的稳定性,因此在实际计算中对结果进行了缩放。最终的评分函数为:

score(i,j) = \frac{q_{i} * k_{j} } { \sqrt{d_{k}}}

其中 d_{k} 是 key 向量 的维度,用于缩放点积的幅度。这个分数越大,表示 第i个位置 越应该关注 第j个位置 的信息。

对于整个序列,可以通过矩阵运算一次性计算所有位置之间的评分,计算公式如下图所示:

二、解码器(Decoder):生成文本的「写作模块」【N层堆叠,论文中N=6】

解码器也是对称的、全相同的结构堆叠,每一层的内部结构和编码器相似,但多了一个核心模块,核心作用:基于编码器输出的语义特征,「自左到右」生成目标文本,一次生成一个词,直到生成结束符。

解码器单一层的内部结构(固定6步,顺序不变,比编码器多2步)

  1. 掩码多头自注意力层(Masked Multi-Head Self-Attention):核心创新点,「掩码」是关键!
    → 解码器是生成式模型,生成文本时是「从左到右」逐个生成的,比如生成「我爱中国」,先生成「我」,再生成「爱」,最后生成「中国」;
    → 生成「爱」的时候,模型不能看到后面的「中国」,否则就是「作弊」,掩码的作用就是把未来的词全部屏蔽掉,让模型只能看到「已经生成的词」;
    → 这一层的作用:捕捉生成文本内部的上下文关联,比如生成的「我」和「爱」的关联。
  2. 残差连接 + LayerNorm:和编码器一致;
  3. 交叉注意力层(Encoder-Decoder Attention):解码器的第二个注意力层,核心作用是让生成的词「关注」编码器输出的语义特征;
    → 比如做机器翻译(中译英),编码器输出的是中文的语义特征,解码器生成英文时,每个英文词会去关注对应的中文词,比如生成「I」时关注「我」,生成「love」时关注「爱」;
  4. 残差连接 + LayerNorm:和编码器一致;
  5. 前馈神经网络(FFN):和编码器一致,做非线性变换;
  6. 残差连接 + LayerNorm:完成单一层的处理。

解码器的输入与输出

  • 输入:① 编码器的输出特征矩阵 ② 已经生成的目标文本(词嵌入+位置编码);
  • 输出:解码器最后一层输出一个向量,经过Softmax层转换成「概率分布」,概率最大的词就是当前生成的词。

三、Transformer的最后一步:线性层 + Softmax层

解码器的输出是一个高维向量,需要经过这两层转换成最终的输出:

  1. 线性层:把高维向量映射到「词表维度」(比如词表有3万个词,就映射成3万维向量);
  2. Softmax层:把3万维向量转换成0~1之间的概率分布,每个维度对应一个词的概率,概率最大的词就是模型最终生成的词。

原文出处:/show_1GW2UVPLSEtF.html