
系列文章目录【论文精读】TransformerAttention Is All You Need文章目录系列文章目录一、Encoder-only、Decoder-only和Encoder-Decoder一基本概念1、Encoder-only 模型2、Decoder-only 模型3、Encoder-Decoder 模型二为什么现在的大语言模型都用Decoder-only二、Transformer的基本结构和原理一基本背景二核心架构1、Encoder 编码器2、Decoder 解码器三Transformer中的注意力机制1、多头注意力机制的核心原理2、Transformer为何让Q查询和K键使用独立的权重矩阵进行计算3、为什么需要 Q、K、V查询、键、值三个矩阵四位置编码五为什么Transformer用LayerNorm而不用BatchNorm三、Transformer相比RNN、LSTM的优势1、并行计算能力2、长距离依赖问题3、建模灵活性4、应用领域的成功一、Encoder-only、Decoder-only和Encoder-Decoder标准的 Transformer 模型主要由两个模块构成Encoder左边负责理解输入文本为每个输入构造对应的语义表示语义特征Decoder右边负责生成输出使用Encoder输出的语义表示结合其他输入来生成目标序列。一基本概念1、Encoder-only 模型Encoder-only模型只使用Transformer的编码器部分。编码器的核心是处理输入序列并生成该序列的上下文向量能够很好地捕捉输入序列的全局信息。典型模型BERT (Bidirectional Encoder Representations from Transformers)应用场景适合理解类任务文本分类如情感分析、新闻分类问答任务通过输入问题和上下文模型从上下文中抽取出准确的答案命名实体识别标注文本中的特定实体如人名、地名等2、Decoder-only 模型Decoder-only模型只使用Transformer的解码器部分。解码器主要用于生成序列它依赖于自回归机制每次生成一个单词并根据之前生成的单词继续预测下一个单词。典型模型GPTGenerative Pretrained Transformer应用场景适合生成类任务文本生成如对话生成、自动写作对话系统逐步生成自然语言响应回答用户提问机器翻译逐词生成目标语言的翻译结果3、Encoder-Decoder 模型Encoder-Decoder 模型包含编码器和解码器两个部分。编码器处理输入序列生成上下文向量解码器则根据编码器的输出生成目标序列。这个结构能够同时处理输入和输出序列的关联。典型模型T5Text-to-Text Transfer Transformer应用场景适合需要输入和输出匹配的任务机器翻译将一个句子从源语言翻译成目标语言编码器负责理解源语言句子解码器负责生成目标语言句子文本摘要编码器处理长文本解码器生成简短摘要文本生成如文本填空或者根据输入生成对应的完整文本二为什么现在的大语言模型都用Decoder-onlyDecoder-only模型的工作流程模型在每一步生成一个词作为下一步的输入直到生成结束标记。灵活性高适用于任意长度的文本生成统一框架同一模型可以处理多种任务无需架构修改上下文建模能够捕获长距离依赖提高生成质量。自回归语言模型的优势自回归模型以概率链式法则为基础模型生成下一个词的概率仅依赖于之前的词。P ( w 1 , w 2 , … , w n ) ∏ i 1 n P ( w i ∣ w 1 , … , w i − 1 ) P(w_1, w_2, \dots, w_n) \prod_{i1}^{n} P(w_i \mid w_1, \dots, w_{i-1})P(w1,w2,…,wn)i1∏nP(wi∣w1,…,wi−1)* 灵活性和统一性Decoder-only 架构能够统一处理理解和生成任务满足多样化的需求训练和部署效率架构简单易于训练和优化适合大规模模型的开发实践验证大量成功的模型如 GPT 系列证明了 Decoder-only 架构的有效性。二、Transformer的基本结构和原理Transformer 是一种完全基于注意力机制的神经网络模型由 Vaswani 等人在2017年提出标志着自然语言处理领域的一个重要突破。Transformer 解决了 RNN循环神经网络和 CNN卷积神经网络在处理长序列时的效率和性能问题特别是在捕捉全局依赖关系、并行计算以及克服梯度消失等方面表现出色。一基本背景RNN 的局限性信息依赖于时间步长逐步传递导致序列过长时早期信息容易衰减无法并行处理训练时间较长CNN的局限性虽然可以通过卷积核来捕捉局部特征但它的感受野有限很难处理序列中的远程依赖。与 RNN 不同Transformer 摒弃了序列顺序的递归处理方式避免了序列长度增长带来的信息传递瓶颈并且支持大规模并行计算。通过全局的注意力机制Transformer允许每个位置的词语之间关注序列中的其他所有位置实现了更高效的长程依赖捕捉。二核心架构Transformer 的架构基于经典的 Encoder-Decoder 结构编码器 Encoder对输入序列进行编码提取其中的特征和上下文信息转化为更高维的隐状态表示hidden states即语义向量。编码器通过自注意力机制Self-Attention和前馈神经网络Feed-Forward Network捕捉输入序列中各个位置之间的依赖关系生成能够反映序列全局上下文的表示。解码器 Decoder解码器根据编码器生成的隐状态表示以及已经生成的目标序列部分训练时目标序列已知推理时逐步生成生成最终的目标输出序列。解码器不仅要关注编码器输出的全局语义信息还需要通过自注意力机制在目标序列中引入依赖使其在生成新词时考虑到已经生成的词。1、Encoder 编码器每个编码器层由两个主要子层组成分别为多头自注意力机制和位置前馈神经网络。多头自注意力机制并行地计算多个自注意力头从而使得模型从不同的角度对输入序列进行信息聚合。Attention ( Q , K , V ) softmax ( Q K T d k ) V \text{Attention}(Q,K,V) \text{softmax}(\frac{QK^T}{\sqrt{d_k}})VAttention(Q,K,V)softmax(dkQKT)V前馈神经网络 FFN:独立地应用于每个位置的词向量表示包含两个全连接层中间加入ReLU激活函数FFN ( x ) max ( 0 , x W 1 b 1 ) W 2 b 2 \text{FFN}(x)\max(0,xW_1b_1)W_2b_2FFN(x)max(0,xW1b1)W2b2残差连接与层归一化:每个子层都会加入残差连接并且通过子层前进行层归一化以解决梯度消失和加速模型收敛LayerNorm ( x sublayer ( x ) ) \text{LayerNorm}(x\text{sublayer}(x))LayerNorm(xsublayer(x))2、Decoder 解码器解码器除了具有与编码器相似的多头自注意力机制和前馈神经网络外还多了一个编码器解码器注意力层(Encoder-Decoder Attention Layer)加入了掩码机制的多头自注意力机制解码器要求模型在预测下一个词时只能利用之前生成的词因此加入了掩码机制掩码操作将未来词的注意力权重置为负无穷防止模型获取不应访问的信息。多头注意力机制编码器-解码器注意力层通过编码器输出的上下文向量关注输入序列中的相关部分来帮助解码器生成与输入相对应的目标序列。前馈神经网络编码器中的结构相同独立地应用于解码器中每个词的表示上。三Transformer中的注意力机制1、多头注意力机制的核心原理在 Transformer 中多头注意力机制Multi-Head Attention 的核心思想是将输入通过多个独立的注意力机制即“头”进行并行计算然后将各个头的输出拼接concatenate起来最终通过线性变换生成最后的注意力输出。head i Attention ( Q , K , V ) MultiHead ( Q , K , V ) Concat ( head 1 , . . . , head h ) W O \text{head}_i\text{Attention}(Q,K,V) \\ \text{MultiHead}(Q,K,V)\text{Concat}(\text{head}_1,...,\text{head}_h)W_OheadiAttention(Q,K,V)MultiHead(Q,K,V)Concat(head1,...,headh)WOTransformer 使用多头注意力机制是为了提升模型捕捉复杂依赖关系的能力模型能够从多个角度提取序列间的复杂依赖关系增强表达能力避免信息瓶颈并且通过并行计算提高模型的计算效率和注意力分布的多样性。2、Transformer为何让Q查询和K键使用独立的权重矩阵进行计算Q 和 K 用独立的权重矩阵是为了让模型有能力从不同角度表达输入序列中的依赖关系不同任务、不同功能Q 代表当前词向其他词发出的“查询”目的是判断当前词与其他词的相关性K 是其他词对这些查询的“响应”它用来提供与查询匹配的线索如果 Q 和 K 共用同一矩阵查询和响应的表达方式会高度相似无法有效捕捉不同的关系信息影响注意力机制的灵活性和表达能力。独立性提供表达多样性通过不同的线性投影Q 和 K 能够在不同的向量空间中表征输入的词Q 可以以一种特定的方式编码查询而 K 则以另一种方式编码响应从而允许模型捕捉更丰富和复杂的上下文信息。如果 Q 和 K 共用相同的权重矩阵模型将难以灵活调整词与词之间的相关性表达。把注意力想象成图书馆检索Query 是你输入搜索框的关键词Key 是每本书的标签Value 是书的内容。搜索框和书标签虽然都是文本但它们的功能不同所以应该用不同的编码方式。如果强制用同一套编码搜索系统就很难同时优化“怎么问”和“怎么被找到”。3、为什么需要 Q、K、V查询、键、值三个矩阵如果只有 Q 和K我们只能知道每个词与其他词的相关性但无法获得与这些相关性对应的具体内容。V 是在相关性确定后被权重加权的部分生成的结果便是模型对输入序列的理解。四位置编码由于Transformer不具有处理序列顺序的内在机制自注意力本身不知道顺序因此通过为每个位置添加位置编码为模型提供顺序信息。Transformer中常用的位置编码方法是正弦-余弦位置编码P E ( p o s , 2 i ) sin ( pos 10000 2 i d m o d e l ) PE_{(pos,2i)}\sin (\frac{\text{pos}}{10000^{\frac{2i}{d_{model}}}})PE(pos,2i)sin(10000dmodel2ipos)P E ( p o s , 2 i 1 ) cos ( pos 10000 2 i d m o d e l ) PE_{(pos,2i1)}\cos (\frac{\text{pos}}{10000^{\frac{2i}{d_{model}}}})PE(pos,2i1)cos(10000dmodel2ipos)做法把位置编码向量和 token 的embedding直接相加。再送进编码器 / 解码器。为什么用 sin/cos不同频率的正余弦波让每个位置有独特的模式相对位置可以通过线性变换表示P E p o s k PE_{posk}PEposk可以写成P E p o s PE_{pos}PEpos的线性函数。这让模型容易学到“相隔 k 个位置”的关系理论上可以外推到训练时没见过的更长序列。局限性正弦-余弦位置编码的“可外推”更多是理论上的实践中并不成立。虽然 sin/cos 函数本身能算出任意位置的值但模型没学过怎么解读这些新位置。实验表明直接用正弦编码外推性能会明显下降远不如后来 RoPE 的插值方法。正余弦位置编码只给出绝对位置不直接建模相对距离。模型需要通过注意力自己学出“位置 5 和位置 8 隔了 3”这种关系。正余弦位置编码直接与与 token embedding 相加信息混叠。正余弦位置编码的不同维度对应不同的频率导致不同距离范围的位置区分能力不均衡。低频维度的波长很长相邻位置差异很小区分度低高频维度波长短相邻位置差异大但是容易周期混叠远距离位置可能编码相似。固定公式不学习。只在输入层加一次之后经过多层注意力位置信息会逐渐被语义信息稀释。五为什么Transformer用LayerNorm而不用BatchNormBatchNorm批量归一化对每层激活沿批量维度 N 归一化每个特征通道有自己的统计量是在batch间选择同一个位置的值做归一化相当于是对batch里相同位置的字或者单词embedding做归一化。LayerNorm层归一化对每层激活沿特征维度 C 归一化每个样本独立计算。是在一个Batch里面的每一行做normalization相当于是对每句话的embedding做归一化。显然LN更加符合我们处理文本的直觉。NLP 序列任务的数据特性让 BN 的批量统计量不可靠序列长度不固定一个 batch 里的句子长短不一短的要用 padding 补齐。BN 沿批量维度统计时padding 位置也会被算进去。padding 本身没有语义却会拉偏均值和方差导致归一化失真。LN 对每个样本独立计算padding 只影响该样本自己的统计不会跨样本污染。批量大小受限大模型训练受显存限制batch size 往往很小甚至为 1。BN 需要足够多的样本才能估计出可靠的均值和方差。batch 一小统计量波动剧烈训练容易崩。LN 完全不依赖 batch sizebatch1 也能稳定工作。位置敏感性与语义漂移BatchNorm 在批量维度上对每个位置分别计算均值和方差但不同样本的同一位置可能对应不同的语义角色如有的句子在第 5 个位置是主语有的却是谓语强行对这些语义不同的位置做归一化会引入大量噪声破坏特征的语义一致性。训练与推理的不一致BN 训练时用当前 batch 的统计量推理时用训练阶段累积的滑动平均。如果训练和推理的数据分布有差异BN 会出现明显的性能下降。LN 训练和推理完全一致没有这个 gap。三、Transformer相比RNN、LSTM的优势1、并行计算能力RNN/LSTMRNN和LSTM是顺序模型依赖于序列的前后顺序处理数据当前时刻的输出依赖于前一时刻的输入。这种顺序性限制了模型的并行计算能力导致训练速度较慢尤其当序列长度增加时效率下降明显TransformerTransformer通过自注意力机制Self-Attention消除了序列顺序的依赖允许模型同时处理输入序列的不同部分。这样大大提升了并行处理能力训练速度也比RNN/LSTM快得多尤其是在处理长序列时。2、长距离依赖问题RNN/LSTM虽然LSTM通过门控机制如遗忘门和输入门在一定程度上解决了长距离依赖问题但依然可能由于梯度消失或梯度爆炸而导致模型难以捕捉长距离依赖TransformerTransformer的自注意力机制能够直接建立序列中任何位置的全局依赖无论距离多远。因此在处理长距离依赖时Transformer更为有效。3、建模灵活性RNN/LSTM这些模型由于顺序处理限制只能按时间步长逐步建模难以在序列的多个位置之间灵活捕捉关系Transformer自注意力机制可以对整个输入序列中的每个位置进行建模捕捉序列中任何两个位置的关系无论它们之间的距离有多远。这样不仅提高了模型的表达能力还使得它在处理复杂依赖关系时更加灵活。4、应用领域的成功Transformer自2017年提出以来已经在多个领域取得了显著的成功尤其在自然语言处理NLP和计算机视觉领域。模型如BERT、GPT等都是基于Transformer架构在各类任务中表现远超传统的RNN/LSTM模型。