Transformer架构深度研究报告(一、编码解码层详解)

一、引言

1.1 研究背景与意义

在人工智能快速发展的今天,Transformer 架构凭借其卓越的性能和创新的设计理念,成为了自然语言处理、计算机视觉等众多领域的核心技术。自 2017 年被提出以来,Transformer 架构在诸多任务中取得了显著的成果,彻底改变了序列数据处理的方式。它的核心创新 —— 自注意力机制,能够让模型在处理序列数据时,捕捉到长距离依赖关系,极大地提升了模型对上下文信息的理解能力。与传统的循环神经网络(RNN)和卷积神经网络(CNN)相比,Transformer 架构具有更高的并行性和计算效率,能够更好地处理大规模数据,这使得训练和部署大规模语言模型成为可能,如 GPT 系列、BERT 等,这些模型在自然语言处理任务中展现出了强大的能力。

Transformer 架构的重要性不仅体现在其在学术研究中的广泛应用,还体现在其对工业界的深远影响。在自然语言处理领域,Transformer 架构被广泛应用于机器翻译、文本生成、问答系统等任务,显著提高了这些任务的性能和效果。在计算机视觉领域,Transformer 架构也逐渐崭露头角,被用于图像分类、目标检测、图像生成等任务,为这些领域带来了新的突破。因此,深入研究 Transformer 架构的原理、机制和应用,对于推动人工智能技术的发展,提升相关领域的应用水平,具有重要的理论和实践意义。

1.2 研究目的与方法

本研究旨在全面深入地剖析 Transformer 架构,揭示其内部工作机制、各组件的功能以及在不同任务中的应用方式。通过对 Transformer 架构的深入研究,我们希望能够更好地理解其优势和局限性,为进一步优化和改进模型提供理论支持,同时也为在实际应用中更有效地使用 Transformer 架构提供指导。

在研究方法上,本报告采用了文献研究法、案例分析法和实验验证法。通过广泛查阅相关文献,梳理 Transformer 架构的发展历程、核心原理和关键技术,了解其在不同领域的应用现状和研究进展。通过具体案例分析,深入研究 Transformer 架构在实际任务中的应用方式和效果,总结其成功经验和存在的问题。通过实验验证,对 Transformer 架构的关键技术和性能进行实证研究,验证理论分析的正确性,为实际应用提供数据支持。

1.3 报告结构与内容概述

本报告共分为七章。第一章为引言,介绍研究背景、目的、方法以及报告的结构和内容概述。第二章详细阐述 Transformer 架构的基本原理,包括自注意力机制、多头注意力机制、位置编码等核心组件的工作原理和计算过程。第三章深入分析 Transformer 架构的编码器,包括编码器的结构、各层的计算步骤以及编码器输出的生成过程和作用。第四章探讨 Transformer 架构的解码器,包括解码器的结构、各层的运算过程、解码器输入的来源和处理方式以及解码器与编码器的协作流程。第五章研究 Transformer 架构中编码层与解码层之间的关系,包括编码层到解码层的数据传输流程、交互细节以及常见误区澄清。第六章分析 Transformer 架构在推理过程中的应用,包括解码器输入的生成方式、自回归生成过程以及生成策略的选择和应用。第七章为结论与展望,总结 Transformer 架构的核心要点、优势和局限性,对未来的研究方向进行展望。

二、Transformer 架构基础

2.1 架构概述

Transformer 架构基于 Encoder-Decoder 框架,主要由编码器(Encoder)和解码器(Decoder)两大部分组成。这种架构特别适用于处理序列到序列的任务,如机器翻译、文本摘要、语音识别等。

编码器的作用是将输入序列转化为一个连续的上下文向量表示,它由多个相同的编码层堆叠而成。每个编码层包含两个核心子层:自注意力子层(Self-Attention)和前馈神经网络子层(Feed-Forward Network,FFN)。自注意力子层能够捕捉输入序列中各元素之间的依赖关系,从而获取全局上下文信息;前馈神经网络子层则对自注意力子层的输出进行进一步的非线性变换,增强模型的表达能力。在每个子层之后,都采用了残差连接(Residual Connection)和层归一化(Layer Normalization)技术,以稳定训练过程,防止梯度消失或梯度爆炸问题的出现。

解码器负责根据编码器生成的上下文向量和已生成的输出序列,逐步生成目标序列。它同样由多个相同的解码层堆叠而成,每个解码层包含三个核心子层:掩码自注意力子层(Masked Self-Attention)、编码器 - 解码器注意力子层(Encoder-Decoder Attention)和前馈神经网络子层(FFN)。掩码自注意力子层用于处理目标序列的内部依赖关系,同时通过掩码机制防止当前位置关注未来信息,保证模型的自回归特性;编码器 - 解码器注意力子层则负责将编码器输出的上下文信息融合到解码器的当前状态中,使解码器在生成目标序列时能够关注到输入序列的相关部分;前馈神经网络子层的作用与编码器中的相同,对前两个子层的输出进行非线性变换。同样,每个子层之后也采用了残差连接和层归一化技术。

在 Transformer 架构中,输入序列首先经过词嵌入(Token Embedding)层,将每个词转换为低维连续向量,同时位置编码(Positional Encoding)层为每个位置生成位置向量,并与词嵌入向量相加,以提供序列中的位置信息。在解码器生成目标序列后,会经过一个线性层和 Softmax 函数,将输出转换为目标词汇表上的概率分布,从而得到最终的预测结果。
推理原理图图1 推理原理图
训练原理图
图2 训练原理图

2.2 核心组件

2.2.1 自注意力机制

自注意力机制(Self-Attention)是 Transformer 架构的核心创新点之一,它能够让模型在处理序列数据时,捕捉到长距离依赖关系,更好地理解上下文信息。自注意力机制的核心思想是通过计算输入序列中每个位置与其他位置的关联权重,来生成该位置的上下文表示。

自注意力机制的计算过程可以分为以下几个步骤:

生成查询(Q)、键(K)、值(V)矩阵:对于输入序列中的每个位置,通过线性变换分别生成对应的查询向量 Q Q Q、键向量 K K K和值向量 V V V。假设输入序列为 X ∈ R n × d X \in R^{n \times d} XRn×d,其中 n n n是序列长度, d d d是模型维度,则 Q = X W Q Q = XW_Q Q=XWQ K = X W K K = XW_K K=XWK V = X W V V = XW_V V=XWV,其中 W Q W_Q WQ W K W_K WK W V W_V WV是可学习的权重矩阵,分别将输入 X X X映射到查询空间、键空间和值空间,其维度分别为 d × d k d \times d_k d×dk d × d k d \times d_k d×dk d × d v d \times d_v d×dv d k d_k dk d v d_v dv分别是查询向量和值向量的维度。

计算注意力分数:通过点积计算查询向量 Q Q Q与键向量 K K K的转置之间的注意力分数,公式为 A t t e n t i o n   S c o r e s = Q K T d k Attention \ Scores = \frac{QK^T}{\sqrt{d_k}} Attention Scores=dk QKT。这里除以 d k \sqrt{d_k} dk 是为了防止点积结果过大,导致 Softmax 函数的梯度消失。注意力分数反映了输入序列中每个位置与其他位置的关联程度。

应用 Softmax 归一化:对注意力分数进行 Softmax 操作,得到注意力权重 A t t e n t i o n   W e i g h t s = S o f t m a x ( A t t e n t i o n   S c o r e s ) Attention \ Weights = Softmax(Attention \ Scores) Attention Weights=Softmax(Attention Scores)。Softmax 函数将注意力分数转换为概率分布,使得每个位置的注意力权重之和为 1,从而表示每个位置在生成上下文表示时的相对重要性。

加权聚合值矩阵:用注意力权重对值向量 V V V进行加权求和,得到自注意力的输出 Z = A t t e n t i o n   W e i g h t s ⋅ V Z = Attention \ Weights \cdot V Z=Attention WeightsV。这个输出 Z Z Z融合了输入序列中各个位置的信息,是当前位置的上下文表示。

自注意力机制的作用主要体现在以下几个方面:

捕捉长距离依赖关系:传统的循环神经网络(RNN)在处理长序列时,由于梯度消失或梯度爆炸问题,难以捕捉到长距离依赖关系。而自注意力机制通过直接计算序列中任意两个位置之间的关联权重,能够有效地捕捉长距离依赖关系,从而更好地理解上下文信息。

并行计算:自注意力机制的计算过程可以并行进行,相比 RNN 需要按顺序处理序列中的每个位置,大大提高了计算效率,使得 Transformer 架构能够处理大规模的数据。

增强模型表达能力:自注意力机制能够根据输入序列的上下文信息,动态地调整每个位置的重要性,从而为模型提供了更强的表达能力,使其能够更好地完成各种序列处理任务。

2.2.2 多头注意力机制

多头注意力机制(Multi-Head Attention)是自注意力机制的扩展,它通过并行运行多个自注意力头,能够同时关注输入序列在不同子空间中的信息,从而进一步增强模型的表达能力。

多头注意力机制的计算过程如下:

多头并行计算:将输入序列分别通过 h h h个不同的线性变换,得到 h h h组不同的查询( Q i Q_i Qi)、键( K i K_i Ki)、值( V i V_i Vi)矩阵,其中 i = 1 , 2 , ⋯   , h i = 1, 2, \cdots, h i=1,2,,h。然后,对每组 Q i Q_i Qi K i K_i Ki V i V_i Vi分别进行自注意力计算,得到 h h h个自注意力输出 Z i Z_i Zi,即 Z i = A t t e n t i o n ( Q i , K i , V i ) Z_i = Attention(Q_i, K_i, V_i) Zi=Attention(Qi,Ki,Vi)

拼接与线性变换:将 h h h个自注意力输出 Z i Z_i Zi按照最后一个维度进行拼接,得到一个形状为 ( n , h ⋅ d v ) (n, h \cdot d_v) (n,hdv)的矩阵 Z c o n c a t Z_{concat} Zconcat。然后,通过一个线性变换将其映射回模型维度 d d d,得到多头注意力的最终输出 M u l t i H e a d A t t e n t i o n ( Q , K , V ) = Z c o n c a t W O MultiHeadAttention(Q, K, V) = Z_{concat}W_O MultiHeadAttention(Q,K,V)=ZconcatWO,其中 W O W_O WO是可学习的权重矩阵,维度为 ( h ⋅ d v ) × d (h \cdot d_v) \times d (hdv)×d

多头注意力机制的优势主要有以下几点:

捕捉多维度信息:每个自注意力头可以学习到输入序列在不同子空间中的信息,通过多头并行计算和拼接,能够综合捕捉多维度的信息,从而更全面地理解输入序列。例如,在机器翻译任务中,不同的自注意力头可以分别关注语法、语义、词汇等不同方面的信息,提高翻译的准确性。

增加模型的灵活性:多头注意力机制使得模型能够从多个角度对输入序列进行分析和处理,增加了模型的灵活性和适应性,使其能够更好地应对各种复杂的任务和数据。

提升模型性能:大量的实验表明,多头注意力机制能够显著提升模型在各种自然语言处理任务中的性能,如机器翻译、文本分类、问答系统等。

2.2.3 位置编码

在 Transformer 架构中,自注意力机制本身不包含位置信息,为了让模型能够捕捉到序列中元素的顺序信息,需要引入位置编码(Positional Encoding)。位置编码的作用是为每个位置生成一个唯一的向量表示,将其与词嵌入向量相加,从而为模型提供位置信息。

位置编码的原理基于三角函数,其计算公式为:

P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d ) PE_{(pos, 2i)} = \sin(pos / 10000^{2i / d}) PE(pos,2i)=sin(pos/100002i/d)

P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d ) PE_{(pos, 2i + 1)} = \cos(pos / 10000^{2i / d}) PE(pos,2i+1)=cos(pos/100002i/d)

其中, p o s pos pos表示位置, i i i表示维度索引, d d d是模型维度。通过这种方式,位置编码能够生成具有不同频率的正弦和余弦函数值,这些值随着位置的变化而变化,从而为每个位置提供了独特的编码。

位置编码的方式具有以下特点:

固定且可学习:位置编码的计算是基于固定的公式,不依赖于输入数据,因此在不同的任务和数据集上都可以使用相同的位置编码。同时,位置编码也可以作为可学习的参数,在训练过程中进行优化,以适应不同的任务需求。

能够区分不同位置:由于正弦和余弦函数的周期性和单调性,不同位置的位置编码向量是不同的,模型可以通过这些不同的向量来区分序列中元素的位置。

与词嵌入兼容:位置编码向量的维度与词嵌入向量相同,因此可以直接将它们相加,不会改变模型的维度结构,同时也能够有效地融合位置信息和语义信息。

三、编码器详解

3.1 编码层结构

Transformer 架构的编码器由多个相同的编码层堆叠而成,通常为 6 层。每个编码层包含两个核心子层:自注意力子层(Self-Attention)和前馈神经网络子层(Feed-Forward Network,FFN),以及两个用于稳定训练的残差连接和层归一化操作。

自注意力子层是编码层的关键组件,它能够捕捉输入序列中各元素之间的依赖关系,从而获取全局上下文信息。在自注意力子层中,输入序列通过线性变换生成查询(Q)、键(K)、值(V)矩阵,然后通过计算注意力分数和加权聚合值矩阵,得到包含上下文信息的输出。

前馈神经网络子层对自注意力子层的输出进行进一步的非线性变换,增强模型的表达能力。前馈神经网络子层通常包含两个全连接层,中间使用 ReLU 激活函数,其公式为 F F N ( x ) = R e L U ( x W 1 + b 1 ) W 2 + b 2 FFN(x)=ReLU(xW_1 + b_1)W_2 + b_2 FFN(x)=ReLU(xW1+b1)W2+b2,其中 x x x是自注意力子层的输出, W 1 W_1 W1 W 2 W_2 W2是权重矩阵, b 1 b_1 b1 b 2 b_2 b2是偏置向量。

在每个子层之后,都采用了残差连接和层归一化技术。残差连接将子层的输入与输出相加,避免梯度消失问题,使模型能够更好地学习长距离依赖关系,公式为 x o u t = x + S u b l a y e r ( x ) x_{out} = x + Sublayer(x) xout=x+Sublayer(x),其中 x x x是子层的输入, S u b l a y e r ( x ) Sublayer(x) Sublayer(x)是子层的输出。层归一化则对残差连接后的结果进行归一化处理,稳定训练过程,使模型更容易收敛。

3.2 层间数据传输

3.2.1 数据形式与内容

编码层间传输的数据是形状为 (batch_size, sequence_length, d_model) 的张量,其中 batch_size 表示批处理大小,sequence_length 表示输入序列长度,d_model 表示模型隐藏层维度,如 512 或 768。

这些数据包含了丰富的上下文感知特征,通过自注意力机制捕捉的全局依赖关系,能够反映词与词之间的关联。同时,数据中还包含残差信息,通过残差连接保留的前一层特征,避免梯度消失,确保模型能够学习到长距离依赖关系。此外,数据经过层归一化后的稳定数值分布,加速训练收敛,使模型更容易学习到稳定的特征表示。

3.2.2 传输流程

每个编码层对输入数据的处理步骤如下:

自注意力子层:计算输入序列中每个位置与其他位置的关联权重,即注意力分数。通过点积计算查询(Q)与键(K)的转置之间的注意力分数,并除以 d k \sqrt{d_k} dk 进行缩放,公式为 A t t e n t i o n   S c o r e s = Q K T d k Attention \ Scores = \frac{QK^T}{\sqrt{d_k}} Attention Scores=dk QKT。然后应用 Softmax 函数对注意力分数进行归一化,得到注意力权重,公式为 A t t e n t i o n   W e i g h t s = S o f t m a x ( A t t e n t i o n   S c o r e s ) Attention \ Weights = Softmax(Attention \ Scores) Attention Weights=Softmax(Attention Scores)。最后,用注意力权重对值(V)矩阵进行加权求和,生成加权后的上下文特征表示,公式为 Z = A t t e n t i o n   W e i g h t s ⋅ V Z = Attention \ Weights \cdot V Z=Attention WeightsV

残差连接 + 层归一化:将自注意力输出与原始输入相加,公式为 x = x + s e l f _ a t t n ( x ) x = x + self\_attn(x) x=x+self_attn(x),以保留原始信息。然后对结果进行层归一化,公式为 x = L a y e r N o r m ( x ) x = LayerNorm(x) x=LayerNorm(x),稳定数值分布。

前馈神经网络子层:通过全连接层(通常含非线性激活函数 ReLU)进一步变换特征,公式为 F F N ( x ) = R e L U ( x W 1 + b 1 ) W 2 + b 2 FFN(x)=ReLU(xW_1 + b_1)W_2 + b_2 FFN(x)=ReLU(xW1+b1)W2+b2,增强模型的表达能力。

二次残差连接 + 层归一化:将前馈网络输出与自注意力层的输出相加,公式为 x = x + f f n ( x ) x = x + ffn(x) x=x+ffn(x),再次保留信息。然后再次归一化后输出到下一层,公式为 x = L a y e r N o r m ( x ) x = LayerNorm(x) x=LayerNorm(x)

3.2.3 特性与示例

位置编码仅在初始输入嵌入阶段注入,通过正弦函数或可学习编码为每个位置生成位置向量,并与词嵌入向量相加。后续层直接传递已包含位置信息的特征,无需重复添加,确保模型能够捕捉到序列中元素的顺序信息。

每一层的自注意力和前馈网络拥有独立参数,能够学习不同抽象层级的特征。随着层数的增加,模型从捕捉局部语法关系逐渐过渡到识别更复杂的语义和形成全局上下文表征。

所有编码层的输入输出维度一致,均为 d_model,确保层间无缝衔接,使得模型能够在不同层之间有效地传递和处理信息。

假设输入序列为 [“The”, “cat”, “sat”],经过多层编码器后,第 1 层输出能够捕捉局部语法关系,如 “cat” 与 “sat” 的主谓关联;第 3 层输出可以识别更复杂的语义,如动作发生的时间和隐含的宾语;第 6 层输出则形成全局上下文表征,如整个句子的意图或情感。

3.3 计算过程示例

以第 1 层编码器为例,详细展示其计算过程。假设输入序列为两个词元(seq_len=2),模型维度 d_model=4,分为 nhead=2 个注意力头(每个头维度 d_k=d_v=2)。初始输入矩阵 X ∈ R 2 × 4 X \in R^{2 \times 4} XR2×4为:

X = ( 1.0 0.5 2.0 − 0.5 0.8 1.2 − 1.0 0.3 ) X = \begin{pmatrix} 1.0 & 0.5 & 2.0 & -0.5 \\ 0.8 & 1.2 & -1.0 & 0.3 \end{pmatrix} X=(1.00.80.51.22.01.00.50.3)

自注意力子层

生成查询(Q)、键(K)、值(V)矩阵:每个注意力头有独立的权重矩阵。以头 1 为例,查询权重 W Q ( 1 ) ∈ R 4 × 2 W_Q^{(1)} \in R^{4 \times 2} WQ(1)R4×2,键权重 W K ( 1 ) ∈ R 4 × 2 W_K^{(1)} \in R^{4 \times 2} WK(1)R4×2,值权重 W V ( 1 ) ∈ R 4 × 2 W_V^{(1)} \in R^{4 \times 2} WV(1)R4×2

W Q ( 1 ) = ( 0.1 0.2 − 0.3 0.4 0.5 − 0.1 − 0.2 0.3 ) W_Q^{(1)} = \begin{pmatrix} 0.1 & 0.2 \\ -0.3 & 0.4 \\ 0.5 & -0.1 \\ -0.2 & 0.3 \end{pmatrix} WQ(1)= 0.10.30.50.20.20.40.10.3

W K ( 1 ) = ( 0.5 − 0.1 0.2 0.3 − 0.4 0.6 0.1 − 0.2 ) W_K^{(1)} = \begin{pmatrix} 0.5 & -0.1 \\ 0.2 & 0.3 \\ -0.4 & 0.6 \\ 0.1 & -0.2 \end{pmatrix} WK(1)= 0.50.20.40.10.10.30.60.2

W V ( 1 ) = ( − 0.2 0.3 0.1 0.4 0.5 − 0.1 − 0.3 0.2 ) W_V^{(1)} = \begin{pmatrix} -0.2 & 0.3 \\ 0.1 & 0.4 \\ 0.5 & -0.1 \\ -0.3 & 0.2 \end{pmatrix} WV(1)= 0.20.10.50.30.30.40.10.2

计算 Q/K/V 矩阵: Q ( 1 ) = X ⋅ W Q ( 1 ) Q^{(1)} = X \cdot W_Q^{(1)} Q(1)=XWQ(1) K ( 1 ) = X ⋅ W K ( 1 ) K^{(1)} = X \cdot W_K^{(1)} K(1)=XWK(1) V ( 1 ) = X ⋅ W V ( 1 ) V^{(1)} = X \cdot W_V^{(1)} V(1)=XWV(1)

Q ( 1 ) = ( 1.05 0.40 − 0.84 0.20 ) Q^{(1)} = \begin{pmatrix} 1.05 & 0.40 \\ -0.84 & 0.20 \end{pmatrix} Q(1)=(1.050.840.400.20)

K ( 1 ) = ( 1.25 − 0.35 − 0.32 0.54 ) K^{(1)} = \begin{pmatrix} 1.25 & -0.35 \\ -0.32 & 0.54 \end{pmatrix} K(1)=(1.250.320.350.54)

V ( 1 ) = ( − 0.45 0.65 0.58 − 0.12 ) V^{(1)} = \begin{pmatrix} -0.45 & 0.65 \\ 0.58 & -0.12 \end{pmatrix} V(1)=(0.450.580.650.12)

计算注意力分数(Attention Scores):通过 Q ( 1 ) Q^{(1)} Q(1) K ( 1 ) K^{(1)} K(1)的点积计算相关性,并缩放(除以 d k = 2 \sqrt{d_k} = \sqrt{2} dk =2 ): S c o r e s ( 1 ) = Q ( 1 ) ⋅ K ( 1 ) T 2 Scores^{(1)} = \frac{Q^{(1)} \cdot K^{(1)^T}}{\sqrt{2}} Scores(1)=2 Q(1)K(1)T

S c o r e s ( 1 ) = ( 0.829 − 0.085 − 0.792 0.266 ) Scores^{(1)} = \begin{pmatrix} 0.829 & -0.085 \\ -0.792 & 0.266 \end{pmatrix} Scores(1)=(0.8290.7920.0850.266)

应用 Softmax 归一化:对每行的注意力分数进行 Softmax,得到注意力权重: S o f t m a x ( S c o r e s ( 1 ) ) Softmax(Scores^{(1)}) Softmax(Scores(1))

S o f t m a x ( S c o r e s ( 1 ) ) = ( 0.70 0.30 0.20 0.80 ) Softmax(Scores^{(1)}) = \begin{pmatrix} 0.70 & 0.30 \\ 0.20 & 0.80 \end{pmatrix} Softmax(Scores(1))=(0.700.200.300.80)

加权聚合值(V)矩阵:用注意力权重对 V ( 1 ) V^{(1)} V(1)加权求和: Z ( 1 ) = A t t e n t i o n   W e i g h t s ( 1 ) ⋅ V ( 1 ) Z^{(1)} = Attention \ Weights^{(1)} \cdot V^{(1)} Z(1)=Attention Weights(1)V(1)

Z ( 1 ) = ( − 0.141 0.419 0.374 0.034 ) Z^{(1)} = \begin{pmatrix} -0.141 & 0.419 \\ 0.374 & 0.034 \end{pmatrix} Z(1)=(0.1410.3740.4190.034)

多头拼接与线性变换:假设头 2 的输出为 Z ( 2 ) = ( 0.2 − 0.1 − 0.3 0.4 ) Z^{(2)} = \begin{pmatrix} 0.2 & -0.1 \\ -0.3 & 0.4 \end{pmatrix} Z(2)=(0.20.30.10.4),拼接所有头的输出: Z c o n c a t = ( − 0.141 0.419 0.2 − 0.1 0.374 0.034 − 0.3 0.4 ) Z_{concat} = \begin{pmatrix} -0.141 & 0.419 & 0.2 & -0.1 \\ 0.374 & 0.034 & -0.3 & 0.4 \end{pmatrix} Zconcat=(0.1410.3740.4190.0340.20.30.10.4)。通过输出权重矩阵 W O ∈ R 4 × 4 W_O \in R^{4 \times 4} WOR4×4进行线性变换: S e l f − A t t n   O u t p u t = Z c o n c a t ⋅ W O Self - Attn \ Output = Z_{concat} \cdot W_O SelfAttn Output=ZconcatWO

S e l f − A t t n   O u t p u t = ( 0.5 1.2 − 0.3 0.8 − 0.1 0.7 0.4 1.0 ) Self - Attn \ Output = \begin{pmatrix} 0.5 & 1.2 & -0.3 & 0.8 \\ -0.1 & 0.7 & 0.4 & 1.0 \end{pmatrix} SelfAttn Output=(0.50.11.20.70.30.40.81.0)

残差连接 + 层归一化:将自注意力输出与原始输入相加: X a t t n ( 1 ) = X + S e l f − A t t n   O u t p u t X_{attn}^{(1)} = X + Self - Attn \ Output Xattn(1)=X+SelfAttn Output

X a t t n ( 1 ) = ( 1.5 1.7 1.7 0.3 0.7 1.9 − 0.6 1.3 ) X_{attn}^{(1)} = \begin{pmatrix} 1.5 & 1.7 & 1.7 & 0.3 \\ 0.7 & 1.9 & -0.6 & 1.3 \end{pmatrix} Xattn(1)=(1.50.71.71.91.70.60.31.3)

然后对结果进行层归一化: X n o r m 1 ( 1 ) = L a y e r N o r m ( X a t t n ( 1 ) ) X_{norm1}^{(1)} = LayerNorm(X_{attn}^{(1)}) Xnorm1(1)=LayerNorm(Xattn(1))

X n o r m 1 ( 1 ) = ( 0.2 1.1 0.8 − 0.1 − 0.3 1.3 − 1.0 0.7 ) X_{norm1}^{(1)} = \begin{pmatrix} 0.2 & 1.1 & 0.8 & -0.1 \\ -0.3 & 1.3 & -1.0 & 0.7 \end{pmatrix} Xnorm1(1)=(0.20.31.11.30.81.00.10.7)

前馈神经网络(FFN)

全连接层 1(扩展维度) W 1 ( 1 ) ∈ R 4 × 8 W_1^{(1)} \in R^{4 \times 8} W1(1)R4×8 b 1 ( 1 ) ∈ R 8 b_1^{(1)} \in R^{8} b1(1)R8 F F N   H i d d e n = R e L U ( X n o r m 1 ( 1 ) W 1 ( 1 ) + b 1 ( 1 ) ) FFN \ Hidden = ReLU(X_{norm1}^{(1)}W_1^{(1)} + b_1^{(1)}) FFN Hidden=ReLU(Xnorm1(1)W1(1)+b1(1))

全连接层 2(压缩回 d_model) W 2 ( 1 ) ∈ R 8 × 4 W_2^{(1)} \in R^{8 \times 4} W2(1)R8×4 b 2 ( 1 ) ∈ R 4 b_2^{(1)} \in R^{4} b2(1)R4 F F N   O u t p u t = F F N   H i d d e n ⋅ W 2 ( 1 ) + b 2 ( 1 ) FFN \ Output = FFN \ Hidden \cdot W_2^{(1)} + b_2^{(1)} FFN Output=FFN HiddenW2(1)+b2(1)

F F N   O u t p u t = ( 0.4 1.0 − 0.2 0.6 − 0.1 0.8 0.3 0.9 ) FFN \ Output = \begin{pmatrix} 0.4 & 1.0 & -0.2 & 0.6 \\ -0.1 & 0.8 & 0.3 & 0.9 \end{pmatrix} FFN Output=(0.40.11.00.80.20.30.60.9)

二次残差连接 + 层归一化:将前馈网络输出与自注意力层的输出相加: X f f n ( 1 ) = X n o r m 1 ( 1 ) + F F N   O u t p u t X_{ffn}^{(1)} = X_{norm1}^{(1)} + FFN \ Output Xffn(1)=Xnorm1(1)+FFN Output

X f f n ( 1 ) = ( 0.6 2.1 0.6 0.5 − 0.4 2.1 − 0.7 1.6 ) X_{ffn}^{(1)} = \begin{pmatrix} 0.6 & 2.1 & 0.6 & 0.5 \\ -0.4 & 2.1 & -0.7 & 1.6 \end{pmatrix} Xffn(1)=(0.60.42.12.10.60.70.51.6)

然后再次归一化后输出到下一层: X ( 1 ) = L a y e r N o r m ( X f f n ( 1 ) ) X^{(1)} = LayerNorm(X_{ffn}^{(1)}) X(1)=LayerNorm(Xffn(1))

X ( 1 ) = ( 0.1 1.3 0.2 − 0.4 − 0.5 1.8 − 1.2 0.9 ) X^{(1)} = \begin{pmatrix} 0.1 & 1.3 & 0.2 & -0.4 \\ -0.5 & 1.8 & -1.2 & 0.9 \end{pmatrix} X(1)=(0.10.51.31.80.21.20.40.9)

通过以上计算过程,展示了第 1 层编码器如何对输入数据进行处理,生成包含上下文信息的输出,并通过残差连接和层归一化稳定训练过程。

四、解码器详解

4.1 解码层结构

Transformer 架构的解码器同样由多个相同的解码层堆叠而成,通常与编码器的层数相同,例如 6 层。每个解码层包含三个核心子层,分别是掩码自注意力层(Masked Self-Attention)、编码器 - 解码器注意力层(Encoder-Decoder Attention,交叉注意力)和前馈神经网络层(FFN),每个子层后接残差连接 + 层归一化。

掩码自注意力层的目标是建模目标序列的内部依赖关系,同时防止当前位置关注未来信息,这是通过掩码实现的。在生成目标序列时,模型需要根据已生成的词来预测下一个词,因此不能让当前位置看到未来的词,否则会导致信息泄漏,影响模型的生成效果。

编码器 - 解码器注意力层(交叉注意力)的作用是让解码器关注编码器输出的相关部分,在机器翻译等任务中,能够实现源语言与目标语言的对齐。例如,在将英语句子翻译为法语句子时,解码器可以通过交叉注意力机制,关注编码器输出中与当前要生成的法语单词相关的英语部分,从而更好地生成准确的翻译。

前馈神经网络层(FFN)与编码器中的 FFN 结构相同,由两个全连接层组成,中间使用 ReLU 激活函数,用于对前两个子层的输出进行进一步的非线性变换,增强模型的表达能力。

4.2 输入来源与处理

4.2.1 训练阶段输入

在训练时,解码器的输入是目标序列的嵌入表示,经过特殊处理以避免信息泄漏。具体步骤如下:

目标序列预处理:首先,在目标序列的首尾分别添加起始符<sos>(Start of Sentence)和结束符<eos>(End of Sentence)。例如,对于句子 “I love NLP”,会被处理为 " I love NLP “。然后,将目标序列向右移动一位,作为解码器的输入。原始目标序列” I love NLP “,解码器输入为” I love NLP",解码器预期输出为"I love NLP "。这一操作确保模型在预测第 t 个词时,仅依赖前 t - 1 个词,符合自回归特性。

输入嵌入与位置编码:对右移后的目标序列进行词嵌入(Token Embedding),将每个词转换为 d_model 维向量,例如 ""→ e1,"I"→ e2,…,“NLP” → en。同时,为每个位置生成位置向量,并与词嵌入相加,得到最终的输入表示,公式为 X d e c = E m b e d d i n g ( S h i f t e d   T a r g e t ) + P o s i t i o n a l E n c o d i n g X_{dec} = Embedding(Shifted \ Target) + PositionalEncoding Xdec=Embedding(Shifted Target)+PositionalEncoding

掩码(Masking):在解码器的自注意力层中,通过上三角掩码矩阵(Upper Triangular Mask)阻止当前位置关注未来词。例如,当输入序列长度为 4 时,掩码矩阵为:

M = ( 0 − ∞ − ∞ − ∞ 0 0 − ∞ − ∞ 0 0 0 − ∞ 0 0 0 0 ) M = \begin{pmatrix} 0 & -\infty & -\infty & -\infty \\ 0 & 0 & -\infty & -\infty \\ 0 & 0 & 0 & -\infty \\ 0 & 0 & 0 & 0 \end{pmatrix} M= 0000000000

4.2.2 推理阶段输入

在推理时,解码器以自回归(Autoregressive)方式逐步生成输出,输入是已生成的部分序列。具体流程如下:

初始化输入:输入初始化为仅包含起始符<sos>的序列,形状为 (1, 1, d_model)(假设 batch_size = 1)。

逐步生成:模型根据当前输入生成下一个词,然后将新生成的词追加到输入序列中,作为下一次生成的输入。例如,第 1 步输入<sos>,模型预测第 1 个词(如 “I”);第 2 步输入<sos> I,模型预测第 2 个词(如 “love”);以此类推,直到模型预测出<eos>或达到最大生成长度时停止。

缓存机制(可选):为加速推理,可使用键值缓存(KV Cache),缓存之前步骤的键(Key)和值(Value),避免重复计算。每次生成时,仅计算新词的注意力,从而提高推理效率。

4.3 运算过程

以具体示例展示解码层的运算过程,假设解码器输入 X d e c ( L ) = ( 0.5 1.2 − 0.3 0.8 ) X_{dec}^{(L)} = \begin{pmatrix} 0.5 & 1.2 \\ -0.3 & 0.8 \end{pmatrix} Xdec(L)=(0.50.31.20.8)(形状 2×2,d_model = 2),编码器输出 X e n c = ( 1.0 − 0.5 0.6 0.2 ) X_{enc} = \begin{pmatrix} 1.0 & -0.5 \\ 0.6 & 0.2 \end{pmatrix} Xenc=(1.00.60.50.2)

掩码自注意力层(Masked Self-Attention)

生成 Q/K/V 矩阵:从 X d e c ( L ) X_{dec}^{(L)} Xdec(L)计算查询 Q、键 K、值 V,假设权重矩阵简化为 Q = ( 0.5 1.2 − 0.3 0.8 ) Q = \begin{pmatrix} 0.5 & 1.2 \\ -0.3 & 0.8 \end{pmatrix} Q=(0.50.31.20.8) K = ( 0.4 0.9 − 0.1 0.3 ) K = \begin{pmatrix} 0.4 & 0.9 \\ -0.1 & 0.3 \end{pmatrix} K=(0.40.10.90.3) V = ( 0.2 0.7 0.1 0.5 ) V = \begin{pmatrix} 0.2 & 0.7 \\ 0.1 & 0.5 \end{pmatrix} V=(0.20.10.70.5)

计算分数并掩码:计算注意力分数并掩码, S c o r e s = 1 2 ( 0.5 × 0.4 + 1.2 × ( − 0.1 ) 0.5 × 0.9 + 1.2 × 0.3 − 0.3 × 0.4 + 0.8 × ( − 0.1 ) − 0.3 × 0.9 + 0.8 × 0.3 ) + ( 0 − ∞ 0 0 ) = ( 0.08 − ∞ − 0.08 − 0.03 ) Scores = \frac{1}{\sqrt{2}} \begin{pmatrix} 0.5×0.4 + 1.2×(-0.1) & 0.5×0.9 + 1.2×0.3 \\ -0.3×0.4 + 0.8×(-0.1) & -0.3×0.9 + 0.8×0.3 \end{pmatrix} + \begin{pmatrix} 0 & -\infty \\ 0 & 0 \end{pmatrix} = \begin{pmatrix} 0.08 & -\infty \\ -0.08 & -0.03 \end{pmatrix} Scores=2 1(0.5×0.4+1.2×(0.1)0.3×0.4+0.8×(0.1)0.5×0.9+1.2×0.30.3×0.9+0.8×0.3)+(000)=(0.080.080.03)

Softmax 与聚合:对注意力分数进行 Softmax 归一化,得到注意力权重 W e i g h t s = ( 1 0 0.48 0.52 ) Weights = \begin{pmatrix} 1 & 0 \\ 0.48 & 0.52 \end{pmatrix} Weights=(10.4800.52),然后加权聚合值矩阵 Z = ( 0.2 0.7 0.28 0.5 ) Z = \begin{pmatrix} 0.2 & 0.7 \\ 0.28 & 0.5 \end{pmatrix} Z=(0.20.280.70.5)

残差 + 归一化:将注意力输出与输入相加,再进行层归一化, X m a s k e d _ a t t n = L a y e r N o r m ( ( 0.7 1.9 − 0.02 1.3 ) ) X_{masked\_attn} = LayerNorm(\begin{pmatrix} 0.7 & 1.9 \\ -0.02 & 1.3 \end{pmatrix}) Xmasked_attn=LayerNorm((0.70.021.91.3))

编码器 - 解码器注意力层(交叉注意力)

生成 Q/K/V 矩阵:Q 来自解码器的掩码自注意力输出 X m a s k e d _ a t t n X_{masked\_attn} Xmasked_attn,K、V 来自编码器输出 X e n c X_{enc} Xenc,假设 Q = ( 0.7 1.9 − 0.02 1.3 ) Q = \begin{pmatrix} 0.7 & 1.9 \\ -0.02 & 1.3 \end{pmatrix} Q=(0.70.021.91.3) K = X e n c K = X_{enc} K=Xenc V = X e n c V = X_{enc} V=Xenc

计算分数:计算注意力分数 S c o r e s = 1 2 ( 0.7 × 1.0 + 1.9 × 0.6 0.7 × ( − 0.5 ) + 1.9 × 0.2 − 0.02 × 1.0 + 1.3 × 0.6 − 0.02 × ( − 0.5 ) + 1.3 × 0.2 ) = ( 1.22 − 0.07 0.76 0.27 ) Scores = \frac{1}{\sqrt{2}} \begin{pmatrix} 0.7×1.0 + 1.9×0.6 & 0.7×(-0.5) + 1.9×0.2 \\ -0.02×1.0 + 1.3×0.6 & -0.02×(-0.5) + 1.3×0.2 \end{pmatrix} = \begin{pmatrix} 1.22 & -0.07 \\ 0.76 & 0.27 \end{pmatrix} Scores=2 1(0.7×1.0+1.9×0.60.02×1.0+1.3×0.60.7×(0.5)+1.9×0.20.02×(0.5)+1.3×0.2)=(1.220.760.070.27)

Softmax 与聚合:对注意力分数进行 Softmax 归一化,得到注意力权重 W e i g h t s = ( 0.78 0.22 0.65 0.35 ) Weights = \begin{pmatrix} 0.78 & 0.22 \\ 0.65 & 0.35 \end{pmatrix} Weights=(0.780.650.220.35),然后加权聚合值矩阵 Z ′ = ( 0.89 − 0.34 0.83 − 0.27 ) Z' = \begin{pmatrix} 0.89 & -0.34 \\ 0.83 & -0.27 \end{pmatrix} Z=(0.890.830.340.27)

残差 + 归一化:将注意力输出与输入相加,再进行层归一化, X c r o s s _ a t t n = L a y e r N o r m ( ( 1.59 1.56 0.81 1.03 ) ) X_{cross\_attn} = LayerNorm(\begin{pmatrix} 1.59 & 1.56 \\ 0.81 & 1.03 \end{pmatrix}) Xcross_attn=LayerNorm((1.590.811.561.03))

前馈神经网络层(FFN):假设 FFN 输出为 ( 0.4 − 0.1 0.2 0.3 ) \begin{pmatrix} 0.4 & -0.1 \\ 0.2 & 0.3 \end{pmatrix} (0.40.20.10.3),将 FFN 输出与交叉注意力输出相加,再进行层归一化, X d e c ( L + 1 ) = L a y e r N o r m ( ( 1.59 + 0.4 1.56 − 0.1 0.81 + 0.2 1.03 + 0.3 ) ) = L a y e r N o r m ( ( 1.99 1.46 1.01 1.33 ) ) X_{dec}^{(L + 1)} = LayerNorm(\begin{pmatrix} 1.59 + 0.4 & 1.56 - 0.1 \\ 0.81 + 0.2 & 1.03 + 0.3 \end{pmatrix}) = LayerNorm(\begin{pmatrix} 1.99 & 1.46 \\ 1.01 & 1.33 \end{pmatrix}) Xdec(L+1)=LayerNorm((1.59+0.40.81+0.21.560.11.03+0.3))=LayerNorm((1.991.011.461.33))

通过以上步骤,解码层逐步生成目标序列的表示,最终通过线性层和 Softmax 函数生成词汇表上的概率分布,选择概率最高的词作为生成结果。

五、编码器与解码器的关系

四、解码器详解

4.1 解码层结构

Transformer 架构的解码器由多个相同的解码层堆叠而成,通常数量与编码器层数相同,如 6 层。每个解码层包含三个核心子层:掩码自注意力层(Masked Self-Attention)、编码器 - 解码器注意力层(Encoder-Decoder Attention,交叉注意力)和前馈神经网络层(FFN)。在每个子层之后,同样采用了残差连接和层归一化技术,以稳定训练过程,确保模型能够有效学习。

掩码自注意力层主要用于建模目标序列的内部依赖关系,同时通过掩码机制防止当前位置关注未来信息,从而保证模型在生成目标序列时的自回归特性。编码器 - 解码器注意力层则负责将编码器输出的上下文信息融合到解码器的当前状态中,使解码器在生成目标序列时能够关注到输入序列的相关部分,实现源序列与目标序列的对齐。前馈神经网络层对前两个子层的输出进行进一步的非线性变换,增强模型的表达能力。

4.2 运算过程

4.2.1 掩码自注意力层

目标:建模目标序列的内部依赖关系,防止当前位置关注未来信息,确保模型在生成目标序列时仅依赖已生成的部分。

计算步骤

生成 Q/K/V 矩阵:从解码器输入 X d e c ( L ) X_{dec}^{(L)} Xdec(L)计算查询 Q Q Q、键 K K K、值 V V V,公式为 Q = X d e c ( L ) W Q Q = X_{dec}^{(L)}W_Q Q=Xdec(L)WQ K = X d e c ( L ) W K K = X_{dec}^{(L)}W_K K=Xdec(L)WK V = X d e c ( L ) W V V = X_{dec}^{(L)}W_V V=Xdec(L)WV

计算注意力分数并掩码:计算注意力分数 S c o r e s = Q K T d k + M Scores = \frac{QK^T}{\sqrt{d_k}} + M Scores=dk QKT+M,其中掩码矩阵 M M M的上三角部分为 − ∞ -\infty (遮挡未来词),其余为 0。例如,当目标序列长度 t g t _ l e n = 3 tgt\_len = 3 tgt_len=3时, M = ( 0 − ∞ − ∞ 0 0 − ∞ 0 0 0 ) M = \begin{pmatrix} 0 & -\infty & -\infty \\ 0 & 0 & -\infty \\ 0 & 0 & 0 \end{pmatrix} M= 000000

Softmax 与加权聚合:对注意力分数应用 Softmax 函数得到注意力权重 A t t e n t i o n   W e i g h t s = S o f t m a x ( S c o r e s ) Attention \ Weights = Softmax(Scores) Attention Weights=Softmax(Scores),然后加权聚合值矩阵 Z = A t t e n t i o n   W e i g h t s ⋅ V Z = Attention \ Weights \cdot V Z=Attention WeightsV

残差连接与层归一化:将加权聚合结果与解码器输入相加,并进行层归一化,公式为 X m a s k e d _ a t t n = L a y e r N o r m ( X d e c ( L ) + Z ) X_{masked\_attn} = LayerNorm(X_{dec}^{(L)} + Z) Xmasked_attn=LayerNorm(Xdec(L)+Z)

4.2.2 编码器 - 解码器注意力层

目标:让解码器关注编码器输出的相关部分,实现源序列与目标序列的对齐,例如在翻译任务中对齐源语言与目标语言。

计算步骤

生成 Q/K/V 矩阵 Q Q Q来自解码器的掩码自注意力输出 X m a s k e d _ a t t n X_{masked\_attn} Xmasked_attn K K K V V V来自编码器输出 X e n c X_{enc} Xenc,公式为 Q = X m a s k e d _ a t t n W Q ′ Q = X_{masked\_attn}W_Q' Q=Xmasked_attnWQ K = X e n c W K ′ K = X_{enc}W_K' K=XencWK V = X e n c W V ′ V = X_{enc}W_V' V=XencWV

计算注意力分数:计算注意力分数 S c o r e s = Q K T d k Scores = \frac{QK^T}{\sqrt{d_k}} Scores=dk QKT,由于源序列已完全可见,无需掩码。

Softmax 与加权聚合:对注意力分数应用 Softmax 函数得到注意力权重 A t t e n t i o n   W e i g h t s = S o f t m a x ( S c o r e s ) Attention \ Weights = Softmax(Scores) Attention Weights=Softmax(Scores),然后加权聚合值矩阵 Z ′ = A t t e n t i o n   W e i g h t s ⋅ V Z' = Attention \ Weights \cdot V Z=Attention WeightsV

残差连接与层归一化:将加权聚合结果与掩码自注意力输出相加,并进行层归一化,公式为 X c r o s s _ a t t n = L a y e r N o r m ( X m a s k e d _ a t t n + Z ′ ) X_{cross\_attn} = LayerNorm(X_{masked\_attn} + Z') Xcross_attn=LayerNorm(Xmasked_attn+Z)

4.2.3 前馈神经网络层

结构:与编码器中的 FFN 结构相同。

计算步骤

全连接层扩展维度:通过全连接层扩展维度,公式为 H i d d e n = R e L U ( X c r o s s _ a t t n W 1 + b 1 ) Hidden = ReLU(X_{cross\_attn}W_1 + b_1) Hidden=ReLU(Xcross_attnW1+b1)

压缩回模型维度:将扩展后的维度压缩回模型维度,公式为 F F N   O u t p u t = H i d d e n W 2 + b 2 FFN \ Output = HiddenW_2 + b_2 FFN Output=HiddenW2+b2

残差连接与层归一化:将 FFN 输出与交叉注意力输出相加,并进行层归一化,公式为 X d e c ( L + 1 ) = L a y e r N o r m ( X c r o s s _ a t t n + F F N   O u t p u t ) X_{dec}^{(L + 1)} = LayerNorm(X_{cross\_attn} + FFN \ Output) Xdec(L+1)=LayerNorm(Xcross_attn+FFN Output)

4.3 输入来源与处理

4.3.1 训练阶段

输入构造:在训练时,解码器的输入是目标序列的嵌入表示,经过特殊处理以避免信息泄漏。首先,在目标序列的首尾分别添加起始符 < s o s > \lt sos \gt <sos>和结束符 < e o s > \lt eos \gt <eos>。例如,句子 “I love NLP” 会被处理为 “ < s o s > \lt sos \gt <sos> I love NLP < e o s > \lt eos \gt <eos>”。然后,将目标序列向右移动一位,作为解码器的输入。即原始目标序列" < s o s > \lt sos \gt <sos> I love NLP < e o s > \lt eos \gt <eos>",解码器输入为" < s o s > \lt sos \gt <sos> I love NLP",解码器预期输出为"I love NLP < e o s > \lt eos \gt <eos>"。

输入表示:将目标序列的每个词通过词嵌入(Token Embedding)转换为向量,映射到模型维度 d m o d e l d_{model} dmodel。例如, < s o s > \lt sos \gt <sos> e 1 e_1 e1,I → e 2 e_2 e2,…,NLP → e n e_n en。同时,为每个位置生成位置向量,并与词嵌入相加,公式为 X d e c = E m b e d d i n g ( S h i f t e d   T a r g e t ) + P o s i t i o n a l E n c o d i n g X_{dec} = Embedding(Shifted \ Target) + PositionalEncoding Xdec=Embedding(Shifted Target)+PositionalEncoding

掩码处理:在解码器的自注意力层中,通过上三角掩码矩阵阻止当前位置关注未来词。例如,输入序列长度为 4 时,掩码矩阵为 M = ( 0 − ∞ − ∞ − ∞ 0 0 − ∞ − ∞ 0 0 0 − ∞ 0 0 0 0 ) M = \begin{pmatrix} 0 & -\infty & -\infty & -\infty \\ 0 & 0 & -\infty & -\infty \\ 0 & 0 & 0 & -\infty \\ 0 & 0 & 0 & 0 \end{pmatrix} M= 0000000000

4.3.2 推理阶段

输入构造:在推理时,解码器以自回归(Autoregressive)方式逐步生成输出,输入是已生成的部分序列。首先,输入初始化为仅包含起始符 < s o s > \lt sos \gt <sos>的序列,形状为 ( 1 , 1 , d m o d e l ) (1, 1, d_{model}) (1,1,dmodel)(假设 b a t c h _ s i z e = 1 batch\_size = 1 batch_size=1)。然后,模型根据当前输入预测下一个词,并将新生成的词追加到输入序列中,重复此过程直到生成 < e o s > \lt eos \gt <eos>或达到最大生成长度。例如,第 1 步输入 < s o s > \lt sos \gt <sos> → 输出 I,第 2 步输入 < s o s > \lt sos \gt <sos> I → 输出 love,以此类推。

输入表示:每次生成新词时,更新输入序列的嵌入和位置编码。公式为 X d e c ( t ) = E m b e d d i n g ( < s o s > , w 1 , ⋯   , w t − 1 ) + P o s i t i o n a l E n c o d i n g ( 1 , 2 , ⋯   , t ) X_{dec}^{(t)} = Embedding(\lt sos \gt, w_1, \cdots, w_{t - 1}) + PositionalEncoding(1, 2, \cdots, t) Xdec(t)=Embedding(<sos>,w1,,wt1)+PositionalEncoding(1,2,,t)

缓存机制:为加速推理,可使用键值缓存(KV Cache),缓存之前步骤的键(Key)和值(Value),避免重复计算。每次生成时,仅计算新词的注意力。

五、编码器与解码器的关系

5.1 数据传输

5.1.1 传输流程

编码器的输出是源序列的上下文表示,其生成方式是通过多个编码层(如 6 层)堆叠,最后一层编码器的输出即为整个编码器的最终结果,形状为 ( b a t c h _ s i z e , s r c _ l e n , d m o d e l ) (batch\_size, src\_len, d_{model}) (batch_size,src_len,dmodel),其中 s r c _ l e n src\_len src_len是源序列长度, d m o d e l d_{model} dmodel是模型维度。编码器的输出直接传递给解码器的每一层解码层,作为解码器中交叉注意力层(Encoder - Decoder Attention)的 Key 和 Value。在交叉注意力层中,Query 来自解码器的掩码自注意力输出,Key 和 Value 来自编码器的输出。通过注意力机制,解码器将源序列的上下文信息融合到目标序列生成中。

5.1.2 交互细节

解码器通过交叉注意力机制动态关注编码器输出的相关部分,实现源序列与目标序列的对齐。在交叉注意力计算中,首先生成 Query,来自解码器的掩码自注意力输出;然后生成 Key 和 Value,直接使用编码器的输出;接着进行注意力计算,公式为 A t t e n t i o n ( Q , K , V ) = S o f t m a x ( Q K T d k ) V Attention(Q, K, V) = Softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=Softmax(dk QKT)V;最后得到加权后的上下文向量,融合了源序列的信息。所有解码层共享编码器最后一层的输出,编码器输出直接作为 Key 和 Value 输入解码器,无需额外转换。

5.2 协作流程

5.2.1 编码阶段

在编码阶段,源序列通过编码器转换为上下文表示 H e n c ∈ R b a t c h _ s i z e × s r c _ l e n × d m o d e l H_{enc} \in R^{batch\_size \times src\_len \times d_{model}} HencRbatch_size×src_len×dmodel。编码器一次性完整运行所有编码层,输入序列首先经过词嵌入和位置编码处理,然后依次通过多个编码层,每个编码层通过自注意力子层和前馈神经网络子层对输入进行处理,并通过残差连接和层归一化稳定训练过程。编码器的输出捕捉了输入序列的全局语义和语法关系,为解码器提供了重要的上下文信息。

5.2.2 解码阶段

在解码阶段,目标序列的嵌入表示 X d e c X_{dec} Xdec输入解码器。解码器以自回归方式逐步生成目标序列,每个生成步骤都需要完整运行所有解码层。首先,解码器的输入经过掩码自注意力层,关注已生成的词,确保当前位置不依赖未来词;然后通过交叉注意力层,结合编码器的输出,将源序列的上下文信息融合到解码器的当前状态中;接着通过前馈神经网络层对特征进行进一步非线性变换;最后通过残差连接和层归一化稳定训练过程。最后一层解码器的输出传递给线性层和 Softmax,生成词汇表上的概率分布,从中选择下一个词。在生成过程中,解码器可以缓存之前步骤的键(Key)和值(Value),避免重复计算,加速推理。

六、应用与实践

6.1 常见应用场景

Transformer 架构在自然语言处理和计算机视觉等领域展现出了强大的应用潜力,以下是一些常见的应用场景:

机器翻译:Transformer 架构在机器翻译任务中取得了巨大的成功,成为了当前机器翻译系统的主流架构。例如,Google 的神经机器翻译系统基于 Transformer 架构,能够实现多种语言之间的高质量翻译。在实际应用中,Transformer 架构能够有效地捕捉源语言和目标语言之间的语义和语法关系,提高翻译的准确性和流畅性。

文本生成:在文本生成任务中,如故事创作、诗歌生成、对话系统等,Transformer 架构能够根据给定的提示或上下文,生成连贯、有逻辑的文本。例如,OpenAI 的 GPT 系列模型基于 Transformer 架构,能够生成逼真的自然语言文本,在智能写作、自动问答等场景中得到了广泛应用。

文本分类:Transformer 架构可以用于文本分类任务,如情感分析、新闻分类等。通过对文本进行编码,提取文本的特征表示,然后使用分类器对文本进行分类。例如,在情感分析中,Transformer 架构能够准确地判断文本的情感倾向,为企业的市场调研和客户服务提供支持。

图像分类:在计算机视觉领域,Transformer 架构也被应用于图像分类任务。通过将图像划分为多个小块,将每个小块视为一个序列元素,然后使用 Transformer 架构对图像进行编码和分类。例如,Vision Transformer(ViT)模型将 Transformer 架构应用于图像分类,取得了与传统卷积神经网络相媲美的性能。

目标检测:Transformer 架构在目标检测任务中也有应用,通过将目标检测问题转化为序列预测问题,使用 Transformer 架构对图像中的目标进行检测和定位。例如,DETR(Detection Transformer)模型基于 Transformer 架构,实现了端到端的目标检测,简化了目标检测的流程。

6.2 代码实现示例

以下以 PyTorch 为例,展示 Transformer 架构的编码器和解码器的代码实现:

import torch

import torch.nn as nn

class TransformerEncoder(nn.Module):

&#x20;   def \_\_init\_\_(self, num\_layers, d\_model, nhead):

&#x20;       super().\_\_init\_\_()

&#x20;       self.layers = nn.ModuleList(\[

&#x20;           nn.TransformerEncoderLayer(d\_model, nhead) for \_ in range(num\_layers)

&#x20;       ])

&#x20;   def forward(self, src):

&#x20;       for layer in self.layers:

&#x20;           src = layer(src)

&#x20;       return src

class TransformerDecoder(nn.Module):

&#x20;   def \_\_init\_\_(self, num\_layers, d\_model, nhead):

&#x20;       super().\_\_init\_\_()

&#x20;       self.layers = nn.ModuleList(\[

&#x20;           nn.TransformerDecoderLayer(d\_model, nhead) for \_ in range(num\_layers)

&#x20;       ])

&#x20;   def forward(self, tgt, memory):

&#x20;       for layer in self.layers:

&#x20;           tgt = layer(tgt, memory)

&#x20;       return tgt

\# 示例:输入形状 (batch\_size=2, src\_len=5, d\_model=512)

encoder = TransformerEncoder(num\_layers=6, d\_model=512, nhead=8)

src = torch.randn(2, 5, 512)

encoder\_output = encoder(src)  # 形状 (2, 5, 512)

\# 示例:解码器输入形状 (batch\_size=2, tgt\_len=10, d\_model=512)

decoder = TransformerDecoder(num\_layers=6, d\_model=512, nhead=8)

tgt = torch.randn(2, 10, 512)

decoder\_output = decoder(tgt, encoder\_output)

在上述代码中,TransformerEncoder类定义了 Transformer 架构的编码器,包含多个TransformerEncoderLayer层。TransformerDecoder类定义了 Transformer 架构的解码器,包含多个TransformerDecoderLayer层。在使用时,首先创建编码器和解码器的实例,然后将输入数据传递给编码器,得到编码器的输出,再将编码器的输出和解码器的输入传递给解码器,得到解码器的输出。

七、结论与展望

7.1 研究总结

本研究深入剖析了 Transformer 架构,全面揭示了其内部工作机制和应用方式。Transformer 架构凭借其独特的自注意力机制,能够有效捕捉序列中的长距离依赖关系,在自然语言处理、计算机视觉等众多领域展现出卓越的性能。

Transformer 架构的编码器通过多层自注意力和前馈网络,逐步提取输入序列的上下文表示,实现了对全局语义和语法关系的有效捕捉。编码层间传输的数据包含丰富的上下文感知特征、残差信息和归一化结果,确保了模型能够稳定学习长距离依赖关系。

解码器则以自回归方式,基于编码器输出的上下文信息和已生成的词,逐步生成目标序列。在训练阶段,解码器输入为右移后的目标序列,通过掩码机制确保自回归性;在推理阶段,输入则逐步扩展,基于已生成的词预测下一个词。

编码层与解码层之间通过交叉注意力机制实现交互,编码器输出作为解码器交叉注意力层的 Key 和 Value,为解码器提供上下文信息,实现源 - 目标对齐。在推理过程中,解码器输入由起始符和模型逐步生成的词构成,生成策略决定下一个词的选择方式。

7.2 未来研究方向

尽管 Transformer 架构已取得显著成果,但仍存在一些挑战和可改进的方向,未来研究可从以下几个方面展开:

模型效率优化:随着模型规模和数据量的不断增大,计算资源和时间成本成为限制 Transformer 应用的重要因素。未来研究可致力于开发更高效的算法和架构,如稀疏注意力机制、基于低秩近似的矩阵运算等,以降低计算复杂度,提高模型的训练和推理速度。此外,模型量化、剪枝等技术也可进一步探索,以减少模型存储空间,提升部署效率。

可解释性研究:Transformer 模型作为一种复杂的深度学习模型,其决策过程和内部机制相对难以理解,这在一些对可解释性要求较高的应用场景中(如医疗、金融等)限制了其应用。未来研究可探索有效的可视化方法和分析工具,深入剖析 Transformer 模型的工作原理,揭示其如何捕捉和处理信息,从而提高模型的可解释性和可信度。

多模态融合:目前 Transformer 主要应用于单模态数据处理,但在实际应用中,多模态数据(如图像、文本、语音等)包含更丰富的信息。未来研究可关注如何将 Transformer 扩展到多模态领域,实现不同模态数据的有效融合和协同处理,以提升模型在多模态任务中的性能和效果。

适应复杂任务和场景:随着人工智能应用的不断拓展,面临的任务和场景也越来越复杂。未来研究可探索如何进一步优化 Transformer 架构,使其能够更好地适应复杂任务和场景的需求,如动态环境下的实时处理、多任务学习、强化学习与 Transformer 的结合等,为解决实际问题提供更强大的技术支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值