Transformer架构的工作原理

1. 整体架构概览

Transformer遵循编码器-解码器结构,但和传统的RNN或CNN不同,它完全基于注意力机制,没有循环或卷积。整体架构如下图所示(可自行想象):

  • 编码器(Encoder):由多个相同的层堆叠而成(原论文为6层)。每一层包含两个子层:

    1. 多头自注意力(Multi-Head Self-Attention)

    2. 前馈神经网络(Feed-Forward Neural Network,FFN)

      每个子层周围都有残差连接(Residual Connection),随后进行层归一化(Layer Normalization)。

  • 解码器(Decoder):同样由多个相同的层堆叠而成(也是6层)。每一层包含三个子层:

    1. 掩码多头自注意力(Masked Multi-Head Self-Attention)------防止看到未来的词。

    2. 交叉注意力(Cross-Attention)------将编码器的输出与解码器的当前状态进行交互。

    3. 前馈神经网络。

      每个子层同样有残差连接和层归一化。

  • 输入处理:输入序列首先通过词嵌入(Word Embedding)转换为向量,然后加上位置编码(Positional Encoding)以注入序列顺序信息。


2. 核心组件详解

2.1 自注意力机制(Self-Attention)

自注意力是Transformer的核心,它允许模型在处理每个词时,动态地关注输入序列中所有其他词的相关性。对于每个输入向量,自注意力计算它与序列中所有向量的注意力权重,然后用这些权重加权求和得到输出。

计算步骤:

对于输入序列 X=(x1,x2,...,xn)X=(x1​,x2​,...,xn​),每个 xixi​ 是一个 dmodeldmodel​ 维的向量。自注意力机制通过三个可学习的权重矩阵 WQ,WK,WVWQ,WK,WV 将每个 xixi​ 映射为查询(Query)、键(Key)和值(Value)向量:

Qi=xiWQ,Ki=xiWK,Vi=xiWVQi​=xi​WQ,Ki​=xi​WK,Vi​=xi​WV

通常,Q,K,VQ,K,V 的维度为 dkdk​,且 dk=dmodel/hdk​=dmodel​/h,其中 hh 是多头注意力的头数。

然后,对于每个查询 QiQi​,计算它与所有键 KjKj​ 的点积,得到注意力分数:

scoreij=Qi⋅Kjscoreij​=Qi​⋅Kj​

这些分数除以 dkdk​​ 进行缩放(防止点积过大导致梯度消失),然后通过Softmax函数归一化为概率分布:

αij=exp⁡(scoreij/dk)∑k=1nexp⁡(scoreik/dk)αij​=∑k=1n​exp(scoreik​/dk​​)exp(scoreij​/dk​​)​

最后,输出向量 zizi​ 是所有值向量 VjVj​ 的加权和:

zi=∑j=1nαijVjzi​=j=1∑n​αij​Vj​

这样,每个位置 ii 的输出融合了整个序列的信息,权重 αijαij​ 表示 ii 对 jj 的关注程度。

为什么用点积?

点积可以衡量两个向量的相似度,计算高效。缩放因子 dkdk​​ 是为了使Softmax的输入方差稳定在1左右,避免梯度饱和。

2.2 多头注意力(Multi-Head Attention)

单头自注意力可能只能捕捉一种类型的依赖关系。为了增强模型的表达能力,Transformer使用多头注意力:并行执行 hh 个不同的自注意力(每个头有不同的 WQ,WK,WVWQ,WK,WV),然后将所有头的输出拼接起来,再通过一个线性变换投影回 dmodeldmodel​ 维。

具体来说,对于每个头 ii,计算输出 headi=Attention(QWiQ,KWiK,VWiV)headi​=Attention(QWiQ​,KWiK​,VWiV​)。然后拼接所有头:

MultiHead(Q,K,V)=Concat(head1,...,headh)WOMultiHead(Q,K,V)=Concat(head1​,...,headh​)WO

其中 WOWO 是输出投影矩阵。

多头机制允许模型在不同子空间中关注不同的位置组合,比如一个头可能关注句法关系,另一个头关注语义相关性。

2.3 位置编码(Positional Encoding)

自注意力本身是置换不变的(即打乱输入顺序,输出也会相应打乱,但权重关系不变),因此必须显式地将序列的位置信息注入模型。Transformer使用位置编码(PE)添加到输入嵌入中。位置编码可以是固定的,也可以是可学习的。原论文使用正弦和余弦函数:

PE(pos,2i)=sin⁡(pos100002i/dmodel),PE(pos,2i+1)=cos⁡(pos100002i/dmodel)PE(pos,2i)​=sin(100002i/dmodel​pos​),PE(pos,2i+1)​=cos(100002i/dmodel​pos​)

其中 pospos 是位置索引,ii 是维度索引。这种编码方式使得模型能够容易地学习相对位置关系,因为对于固定偏移 kk,PEpos+kPEpos+k​ 可以表示为 PEposPEpos​ 的线性函数。

2.4 前馈神经网络(FFN)

每个编码器和解码器层中的自注意力子层之后,都跟着一个前馈网络。它是一个简单的全连接多层感知机,通常包含两个线性变换和一个非线性激活函数(如ReLU):

FFN(x)=max⁡(0,xW1+b1)W2+b2FFN(x)=max(0,xW1​+b1​)W2​+b2​

在Transformer中,FFN的中间维度通常比 dmodeldmodel​ 大(原论文中 dmodel=512dmodel​=512,FFN内部维度为2048)。这个子层对每个位置独立且相同地处理(即逐位置前馈网络),但在不同层之间参数不同。

2.5 残差连接和层归一化

每个子层(自注意力或FFN)的输出都会加上其输入(残差连接),然后进行层归一化。即:

Output=LayerNorm(x+Sublayer(x))Output=LayerNorm(x+Sublayer(x))

残差连接有助于缓解深度网络中的梯度消失问题,使梯度能直接流过子层。层归一化则对每个样本的特征维度进行归一化,稳定训练过程。


3. 编码器与解码器的具体工作流程

3.1 编码器

输入序列(如源语言句子)经过词嵌入和位置编码后,得到向量序列 XX。然后依次通过 NN 个编码器层:

  1. 多头自注意力:X′=LayerNorm(X+MultiHead(X,X,X))X′=LayerNorm(X+MultiHead(X,X,X))

    注意:在自注意力中,Q、K、V都来自同一个 XX,即自注意力。

  2. 前馈网络:X′′=LayerNorm(X′+FFN(X′))X′′=LayerNorm(X′+FFN(X′))

最终输出 EncoderOutputEncoderOutput 是一个同样长度的向量序列,每个向量编码了对应词及其上下文的信息。

3.2 解码器

解码器在训练时以目标序列(如目标语言句子)作为输入,但为了自回归生成,需要掩蔽未来信息。输入同样经过嵌入和位置编码得到 YY。然后逐层处理:

  1. 掩码多头自注意力

    Y′=LayerNorm(Y+MaskedMultiHead(Y,Y,Y))Y′=LayerNorm(Y+MaskedMultiHead(Y,Y,Y))

    这里的掩码(Mask)是为了防止当前位置关注未来位置。具体做法是在计算注意力分数时,将未来位置的分数设置为 −∞−∞(经过Softmax后权重为0)。这保证了预测第 tt 个词时只能使用前 t−1t−1 个词的信息。

  2. 交叉注意力

    Y′′=LayerNorm(Y′+MultiHead(Y′,EncoderOutput,EncoderOutput))Y′′=LayerNorm(Y′+MultiHead(Y′,EncoderOutput,EncoderOutput))

    这里,查询来自解码器的当前状态 Y′Y′,而键和值来自编码器的输出。这样解码器能够关注输入序列的相关部分。

  3. 前馈网络

    Y′′′=LayerNorm(Y′′+FFN(Y′′))Y′′′=LayerNorm(Y′′+FFN(Y′′))

经过 NN 层后,解码器的输出通过一个线性层(映射到词汇表大小)和Softmax,得到每个位置上的下一个词的概率分布。

在推理(生成)时,解码器采用自回归方式:一次生成一个词,将已生成的词作为输入继续预测下一个词。


4. 训练与损失函数

Transformer通常使用交叉熵损失函数进行训练。对于机器翻译,目标序列的每个位置都有真实词,模型输出概率分布,计算损失并反向传播。由于解码器是自回归的,训练时采用教师强制(Teacher Forcing):将真实目标序列作为解码器输入(但掩蔽未来),而不是使用模型自己预测的词。这样能加速训练并稳定收敛。

为了防止过拟合,还会使用Dropout、标签平滑(Label Smoothing)等技术。


5. 关键优势与影响

  • 并行计算:自注意力可以一次性计算所有位置的注意力,不像RNN需要逐步计算,因此训练速度更快。

  • 长距离依赖:自注意力直接连接任意两个位置,路径长度恒为1,更容易捕捉长距离依赖。

  • 可解释性:注意力权重可以可视化,帮助理解模型关注哪些部分。

  • 通用性:Transformer不仅用于NLP,还被扩展到计算机视觉(ViT)、语音处理等领域。


6. 总结

Transformer通过自注意力机制替代了循环和卷积,实现了高效的并行计算和对长距离依赖的建模。其核心组件包括多头自注意力、位置编码、前馈网络、残差连接和层归一化。编码器-解码器结构使其适用于序列到序列的任务,同时通过掩码支持自回归生成。这一架构奠定了现代大规模预训练模型的基础,是深度学习领域里程碑式的工作。

相关推荐
神奇霸王龙8 小时前
Cursor 3 + Claude Opus 4.8 屠榜:5 编程基座 IDE 卡位
ide·人工智能·ai·aigc·agent·ai编程·ai写作
AI创界者8 小时前
IndexTTS 2.5 零样本语音克隆本地部署指南与实战避坑(附WebUI使用技巧)
人工智能·aigc
吴声子夜歌8 小时前
Java面试——HBase原理及应用
java·面试·hbase
美狐美颜SDK开放平台8 小时前
视频美颜SDK是什么?直播APP开发中美颜功能实现方式介绍
深度学习·架构·实时互动·音视频·视频美颜sdk
吴声子夜歌9 小时前
Java面试——ElasticSearch原理及应用
java·面试·es
吴声子夜歌9 小时前
Java面试——Spring原理及应用(一)
java·spring·面试
liangshanbo12159 小时前
Nginx 进程管理命令深度面试题解析
java·nginx·面试
柳絮飞祭奠10 小时前
Dify Windows Docker Desktop 部署文档
人工智能·深度学习·语言模型·数据分析·transformer·边缘计算·集成学习
咖啡星人k10 小时前
2026 AI Agent 长期记忆:为什么 AI 助手总“聊完就忘“?MonkeyCode 免费上手
人工智能·深度学习·机器学习·语言模型·自然语言处理
众人皆醒我独醉11 小时前
InferenceGraph:把多个推理服务编排成 DAG
面试·kubernetes·gpu