目录
一、前言
二、Transformer介绍
2.1 RNN 的困境:为什么需要 Transformer?
2.2 Transformer 的整体架构:编码器-解码器双塔结构
2.3 Transformer 的输入
2.3.1 单词嵌入(Word Embedding)
2.3.2 位置嵌入(Positional Embedding)
2.4 自注意力机制:Transformer的“心脏”
2.4.1 Q、K、V的由来与计算
2.4.2 注意力分数的计算
2.4.3 多头注意力
2.5 Encoder-编码器结构
2.5.1 子层一:多头自注意力
2.5.2 子层二:前馈网络(Feed Forward)
2.5.3 多层堆叠形成 Encoder
2.6 Decoder-解码器结构
2.6.1 掩码自注意力
2.6.2 编码器-解码器注意力
2.6.3 输出层
三、总结
参考文献
摘要:Transformer是Google团队于2017年提出的序列建模架构,彻底摒弃了循环神经网络(RNN)的顺序处理模式,开创性地采用纯自注意力机制,实现了序列数据的并行化计算与长距离依赖的有效建模。本文系统介绍了Transformer的设计动机、整体编码器-解码器架构、输入表示(单词嵌入与正弦-余弦位置编码)、自注意力机制中查询(Q)、键(K)、值(V)的计算与多头注意力的融合方式,并详细拆解了编码器中的残差连接、层归一化与前馈网络,以及解码器中掩码自注意力、编码器-解码器交叉注意力和最终的softmax输出层。通过逐步图解与公式推导,揭示了Transformer如何同时解决RNN的并行效率瓶颈与梯度消失问题。理解这一架构是掌握GPT、BERT、T5等大语言模型的技术基石。
关键词:Transformer;自注意力机制;编码器-解码器;多头注意力;位置编码;大语言模型
一、前言
在当今大语言模型(LLM)百花齐放的时代,几乎所有的先进模型——从 GPT 到 BERT,从 T5 到 LLaMA——都离不开一个共同的架构基石:Transformer。这篇由 Google 团队于 2017 年在论文《Attention is All You Need》中提出的模型,彻底改变了自然语言处理的格局。本文将带你系统性地拆解 Transformer 的设计思想、核心组件和工作原理。
二、Transformer介绍
2.1 RNN 的困境:为什么需要 Transformer?
在Transformer诞生之前,处理序列数据(如文本、语音)的主流方案是循环神经网络(RNN)。循环神经网络(Recurrent Neural Networks, RNN) 是一种专用于处理序列信息的神经网络。RNN的核心思想是让信息沿着时间步循环传递:当前时刻的隐藏状态s_t同时依赖于当前输入x_t和上一时刻的隐藏状态s_{t-1}。这种链式结构天然契合序列的顺序性。
图1:基本RNN流程
然而,RNN存在两个致命缺陷:
顺序计算的效率瓶颈:由于
t时刻的计算必须等待t-1时刻完成,RNN无法并行处理序列中的元素。当序列长度达到数百甚至数千时,训练速度极为缓慢。长期依赖的失效:在反向传播过程中,梯度需要沿着时间步逐层回传。随着序列变长,梯度要么指数级衰减(梯度消失),要么爆炸(梯度爆炸),导致模型难以捕捉相隔较远位置之间的依赖关系。
这些痛点促使研究者寻找一种既能并行计算、又能轻松建模长距离依赖的新架构。2017年,Google团队在《Attention is All You Need》中提出的Transformer,彻底抛弃了循环结构,给出了令人惊艳的答案。
2.2 Transformer 的整体架构:编码器-解码器双塔结构
Transformer是一种完全基于自注意力机制的神经网络,其宏观架构遵循经典的编码器-解码器模式。下图2展示了该模型用于中英文翻译时的结构:
编码器(Encoder):由6个相同的层堆叠而成。它负责将输入序列(如英文句子“I have a cat”)转化为一组富含上下文语义的向量表示。
解码器(Decoder):同样由6个相同的层堆叠而成。它根据编码器输出的语义向量,以及已经生成的目标序列前缀,逐步预测下一个单词(如中文“我有一只猫”)。
图2:Transformer 的整体结构,左图Encoder和右图Decoder
整个工作流程可以概括为三个步骤:
(1)构建输入表示:为输入句子中的每个单词生成一个融合了语义信息和位置信息的向量x
图3:Transformer输入
(2)编码阶段:将输入向量序列送入编码器,经过6层变换后,得到编码矩阵C。该矩阵的每一行对应输入序列中的一个单词,但此时已经融入了整个句子的上下文信息。
图4:Encoder block(编码器模块)
(3)解码阶段:解码器接收C,并结合已经生成的目标单词,逐步预测下一个单词。在预测第i+1个单词时,解码器会通过掩码机制屏蔽掉未来位置(i+1之后的单词),确保自回归生成的正确性。
图5:Decoder block(解码器模块)
上图Decoder接收了Encoder的编码矩阵C,然后首先输入一个翻译开始符"<Begin>",预测第一个单词"I";然后输入翻译开始符"<Begin>"和单词"I",预测单词"have",以此类推。
2.3 Transformer 的输入
由于Transformer不再具有循环结构,模型本身无法感知单词在序列中的顺序。因此,输入表示必须显式地注入位置信息。具体而言,每个单词的最终输入向量由两部分相加得到:单词嵌入+位置嵌入。
图6:Transformer 的输入表示
2.3.1 单词嵌入(Word Embedding)
单词嵌入将离散的词汇映射到连续的向量空间。这种映射可以借助预训练算法(如Word2Vec、Glove)获得,也可以在Transformer训练过程中端到端地学习。向量的维度d在原始论文中设为512。
2.3.2 位置嵌入(Positional Embedding)
位置嵌入用于编码单词在句子中的绝对或相对位置。Transformer采用一种固定公式生成位置编码,而非通过学习得到。公式如下:
对于偶数维度
2i:对于奇数维度
2i+1:
其中pos是单词的位置索引,d是嵌入维度。这种正弦-余弦函数的选择使得模型能够轻易学习到相对位置关系(因为PE(pos+k)可以表示为PE(pos)的线性函数)。
将单词嵌入与位置嵌入逐元素相加,即得到Transformer的最终输入矩阵X(形状为n × d,n为序列长度)。
2.4 自注意力机制:Transformer的“心脏”
自注意力是Transformer最核心的创新。它让每个单词在编码时能够动态地“关注”序列中所有其他单词,并根据相关程度聚合信息,从而生成上下文感知的表示。它允许序列中的每个位置在计算自己的新表示时,以加权和的方式聚合所有位置的信息——权重由该位置与其他位置的“相关性”决定。
图7:Transformer的结构
图8:Self-Attention的结构
2.4.1 Q、K、V的由来与计算
自注意力机制引入了三个辅助矩阵:查询(Query,Q)、键(Key,K)和值(Value,V)。对于输入矩阵X(每一行是一个单词的向量),通过三个不同的权重矩阵,
,
进行线性变换得到:
Q(查询):代表当前单词“想要询问什么”,它将与所有K进行匹配。
K(键):代表每个单词“能够被询问到的标签”,用于与Q计算相似度。
V(值):代表单词本身携带的实际信息,最终根据相似度权重进行聚合。
图9:Q,K,V计算
2.4.2 注意力分数的计算
自注意力的输出计算公式如下:
计算过程分为四步:
(1)计算相似度矩阵:得到一个
n×n的矩阵,其中第i行第j列的元素表示第i个单词的查询与第j个单词的键之间的点积相似度。
图10:计算
(2)缩放:除以(d_k是键向量的维度),防止点积过大导致softmax进入饱和区。
(3)归一化:对矩阵的每一行进行softmax操作,使每一行的权重和为1。这相当于为每个单词计算其对所有单词的关注概率分布。
图11:对矩阵的每一行进行 Softmax
(4)加权求和:将归一化后的权重矩阵与V相乘,得到输出矩阵Z。Z的第i行是V的所有行按照第i行的权重加权求和的结果,即第i个单词融合了全局信息后的新表示。
图12:Self-Attention 输出
图13:注意力机制最终输出
2.4.3 多头注意力
单次自注意力可能只捕捉到某种特定的依赖模式。为了让模型能够同时关注不同子空间的信息,Transformer采用了多头注意力(Multi-Head Attention)机制。
图14:Multi-Head Attention(多头注意力机制)
具体做法是:将原始的分别线性投影到h个不同的低维空间(h=8是常用值),在每个投影空间上独立执行自注意力计算,得到h个输出矩阵。然后将这
h个矩阵在特征维度上拼接起来,再通过一个线性变换融合成最终的输出Z。
图15:Multi-Head Attention的计算
图16:Multi-Head Attention的输出
多头注意力使得模型可以同时关注“语法关系”、“语义相关性”、“远距离依赖”等不同类型的模式,显著增强了表示能力。
2.5 Encoder-编码器结构
Transformer的每个Encoder Block由两个子层构成:多头自注意力层和前馈网络层。每个子层后面都紧跟着一个“Add & Norm”操作。
2.5.1 子层一:多头自注意力
输入经过多头自注意力得到
,然后执行Add & Norm(残差连接与层归一化)。
Add(残差连接):Add指X+MultiHeadAttention(X),是一种残差连接,通常用于解决多层网络训练的问题,可以让网络只关注当前差异的部分。将子层的输入直接与输出相加,即
X + Sublayer(X)。这种跨层连接可以有效缓解梯度消失问题,让网络更容易训练深层结构。
图17:残差连接
Norm(层归一化):Layer Normalization,通常用于RNN结构,Layer Normalization会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。
2.5.2 子层二:前馈网络(Feed Forward)
前馈网络是一个简单的两层全连接网络,第一层使用ReLU激活函数,第二层不使用激活函数。
输入和输出的维度保持一致(通常为 512),中间隐藏层维度较大(如 2048)。再次执行 Add & Norm:
堆叠 6 个这样的层后,编码器输出的矩阵 4便蕴含了每个单词丰富的上下文信息。
2.5.3 多层堆叠形成 Encoder
Transformer 的编码器由个相同的 Encoder Block 堆叠而成。其工作流程如下:
第一层输入:原始句子中每个单词的表示向量矩阵
(即词嵌入与位置嵌入之和);
逐层传递:第
层的输出
直接作为第
层的输入
;
最终输出:经过
层编码后,得到最终的编码信息矩阵
。
下图直观展示了这一堆叠过程:输入矩阵依次流过 6 个 Encoder Block,每个 Block 保持维度不变,最后输出富含上下文语义的编码矩阵。
图18:Encoder输出
这个矩阵中,每一行对应原始句子中一个单词的深度上下文相关表示——它不再是孤立的词向量,而是融合了整个序列中所有单词信息的高阶特征。后续,
将被传递给解码器(Decoder),为生成目标序列提供全局的源端语义依据。
2.6 Decoder-解码器结构
解码器(Decoder)比编码器(Encoder)多了一个编码器-解码器注意力子层,且第一个自注意力子层采用掩码(Masking),以防止未来信息泄露。解码器(Decoder)是Transformer中负责逐词生成目标序列的关键组件。与编码器相比,解码器在结构上有三点显著差异:
双重注意力层:解码器块内部包含两个多头注意力子层,而非编码器中的一个。
因果掩码:第一个注意力子层引入了“掩码”机制,确保当前位置无法窥视未来位置的信息。
交叉注意力:第二个注意力子层的键(K)和值(V)来源于编码器的输出矩阵C,而查询(Q)则来自解码器自身的输入。
下图展示了解码器块(Decoder Block)的内部结构,其中红色框标注了这些关键组件。
图19:Transformer的Decoder结构
2.6.1 掩码自注意力
在序列生成任务(如机器翻译)中,模型必须按照从左到右的顺序逐个输出单词:只有已知第1到第i个单词后,才能预测第i+1个单词。为了在训练时能够并行计算所有位置的损失,我们需要一种机制来防止模型“提前看到”未来位置的信息。这便是掩码自注意力(Masked Self-Attention)的作用。
掩码的具体实现步骤(以翻译“我有一只猫” → “I have a cat”为例):
(1)准备输入与掩码矩阵
训练时,解码器会一次性接收正确的目标序列前缀(例如["<Begin>", "I", "have", "a", "cat"],对应位置索引0~4)。同时构造一个上三角掩码矩阵,大小为5×5,其中上三角部分(j > i)的元素为负无穷(或0,在softmax前会被替换为极小的数),下三角部分(j ≤ i)为1。这样,位置i只能关注到0...i的位置,而无法看到i+1...4的未来信息。
图20:Decoder 预测
图21:输入矩阵与 Mask 矩阵
(2)计算注意力分数
与普通自注意力相同,首先通过输入矩阵X计算得到Q、K、V,然后计算获得原始注意力分数矩阵。
图22:注意力分数计算过程
(3)应用掩码
将掩码矩阵加到上:未来位置对应的分数被置为
-∞。随后进行softmax归一化,这些负无穷位置的权重将变为0。因此,每个位置i的注意力输出只依赖于它自身及其左侧(已生成)的位置。
图23:应用掩码计算过程
(4)加权求和
将归一化后的掩码注意力权重与V相乘,得到输出矩阵Z。例如,位置1(单词“I”)的输出向量仅聚合了位置0和位置1的信息,而完全不受位置2、3、4的影响。
图24:Mask 之后的输出
(5)多头拼接
与编码器类似,多个掩码自注意力头的输出会被拼接起来,再经过一次线性变换,形成最终的掩码多头注意力输出。
通过这种设计,解码器在训练时能够并行处理整个目标序列,同时严格保持自回归的因果约束。
2.6.2 编码器-解码器注意力
解码器中的第二个多头注意力层扮演着“桥梁”角色,其任务是将编码器提取的源语言语义信息融入当前生成过程。
K 和 V 的来源:来自编码器的最终输出矩阵C。这意味着源句子中每个单词的深层表示都可供查询。
Q 的来源:来自上一个解码器块(或最底层解码器块的输入)的输出Z。也就是说,解码器用当前已生成的目标序列前缀作为查询条件,去源序列中检索最相关的信息。
计算过程与普通自注意力完全一致:Attention(Q, K, V)。由于K和V来自编码器,而编码器已经处理了整个源序列,因此解码器的每个位置都可以无障碍地关注源序列中的所有单词(无需掩码)。这相当于在目标词生成时,动态地对源句子进行软对齐。
2.6.3 输出层
经过多个解码器块的逐层变换后,我们得到一个输出矩阵Z,其维度为m × d(m为目标序列长度,d为特征维度)。该矩阵的每一行对应目标序列中一个位置的高阶语义向量,且已融合了源端信息和目标端历史信息。
为了将这一连续向量转换为具体的单词,需要经过以下步骤:
(1)线性映射:将Z通过一个可学习的权重矩阵W_out(维度d × V,V为词汇表大小)投影到词汇空间,得到 logits 矩阵L(形状m × V)。L[i][j]表示第i个位置预测第j个单词的得分。
(2)Softmax 归一化:对L的每一行应用 softmax 函数:
输出为一个概率分布,表示当前位置生成每个候选单词的可能性。
(3)解码策略:根据任务需求,可以选择贪婪搜索(取概率最大的词)、束搜索(保留多条候选路径)或随机采样等策略,确定最终的输出单词。该单词将作为下一步解码器的输入(推理阶段),或用于计算交叉熵损失(训练阶段)。
图25:softmax预测单词
图26:最终输出
最后,通过一个线性层将Z映射到词汇表大小(假设为V),得到m × V的logits矩阵,再对每一行进行softmax归一化,得到每个位置上单词的概率分布。选择概率最高的词作为当前步的输出,并将该词作为下一步Decoder的输入,重复此过程直到生成结束符<end>。
如此,解码器通过掩码自注意力保证因果性,通过交叉注意力吸收源信息,最终借助 softmax 层完成从语义向量到自然语言的映射。
三、总结
Transformer通过彻底摆脱RNN的循环依赖,开创性地使用纯注意力机制,一举解决了并行计算和长距离依赖两大难题。其编码器-解码器架构、位置编码、多头注意力和残差连接等设计,共同构筑了一个强大而统一的序列处理框架。正是这些创新,使得Transformer成为后续BERT、GPT、T5等大模型的基础,并持续推动着人工智能的边界。
理解Transformer,就等于拿到了打开大模型时代大门的钥匙。在后续的文章中,我们将进一步探讨基于Transformer的各类大模型及其在脑机接口等前沿领域的应用潜力。
参考文献
[1] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention is all you need.Advances in Neural Information Processing Systems, 30, 5998–6008.
[2] Zhao, W. X., Zhou, K., Li, J., Tang, T., Wang, X., Hou, Y., Min, Y., Zhang, B., Zhang, J., Dong, Z., Du, Y., Yang, C., Chen, Y., Chen, Z., Jiang, J., Ren, R., Li, Y., Tang, X., Liu, Z., Liu, P., Nie, J.-Y., & Wen, J.-R. (2023). A survey of large language models.arXiv preprint, arXiv:2303.18223.
[3] Bommasani, R., et al. (2021). On the opportunities and risks of foundation models.arXiv preprint, arXiv:2108.07238.
[4] Shanahan, M. (2022). Talking about large language models.CoRR, abs/2212.03551.
[5] Qiao, S., Ou, Y., Zhang, N., Chen, X., Yao, Y., Deng, S., Tan, C., Huang, F., & Chen, H. (2022). Reasoning with language model prompting: A survey.CoRR, abs/2212.09597.
[6] Radford, A., Wu, J., Child, R., Luan, D., Amodei, D., & Sutskever, I. (2019). Language models are unsupervised multitask learners.OpenAI Blog, 1(8), 9.
[7] Dosovitskiy, A., Beyer, L., Kolesnikov, A., Weissenborn, D., Zhai, X., Unterthiner, T., Dehghani, M., Minderer, M., Heigold, G., Gelly, S., et al. (2020). An image is worth 16x16 words: Transformers for image recognition at scale.arXiv preprint, arXiv:2010.11929.
Tips:下一讲,我们将进一步探讨,脑电信号分析的其他内容。
以上就是深入浅出Transformer:颠覆 RNN 的自注意力革命的全部内容啦~
我们下期再见,拜拜(⭐v⭐) ~
(Ps:有代码实现需求,请见下列【微信名片】或【主页信息】,谢谢支持!~)