超详细Transformer架构解析:从分词到输出的完整流程

📅 2026/8/27 13:54:23
超详细Transformer架构解析:从分词到输出的完整流程
Transformer新型神经网络架构。在Transformer出现之前如如机器翻译等序列建模任务主要依赖循环神经网络RNN。然而RNN需要按时间步依次处理序列训练时难以在序列维度上并行化处理而且在建模长距离依赖时容易受到梯度消失等问题的限制尽管LSTM等结构有所缓解。Transformer完全摒弃了循环结构转而仅依靠位置编码、自注意力机制、全连接前馈网络来建模序列关系。这种设计使得模型在训练时能够高度并行化显著提升了训练效率为后续在大规模数据上训练大型语言模型奠定了重要基础。其实现在有很多很多文章来讲Transformer架构了这里主要记录下个人的一些理解用最简单的方式来说明Transformer的计算步骤。一、输入数据处理1、Tokenization分词首先模型是要将输入的句子拆分为token也就是分词只有分词后才能匹配对应的词向量将用户所输入的内容转换为矩阵的形式来做进一步计算处理。关于分词的说明我在《浅谈大模型的分词》中写过感兴趣的可以了解下。这里分词前后的区别如下// 分词前 我爱中国。 // 分词后变为一个数组 [我,爱,中国,。]2、Embedding词嵌入词嵌入是要将每个token都映射为一个d_model维的向量例如当d_model 512时每个token对应的向量就是512维。在这一阶段所获取的词嵌入向量是一个静态向量也就是说每个token对应的向量是固定的、与上下文无关的。例如“苹果手机”和“富士苹果”中的“苹果”二字只要被分词为相同的token其初始嵌入向量就完全一致。这种静态嵌入方式与Word2Vec这种传统词向量方法类似都是通过在一张静态嵌入表中查找来获得向量表示。为了获取上下文之间的关联性Transformer模型会在后续的自注意力层中基于上下文对这些静态向量进行动态调整从而生成上下文感知的表示。因此尽管初始嵌入是静态的模型最终仍能有效建模词语在不同语境下的语义差异。// 输入的token数组 [我,爱,中国,。] // 查表得到的512维词嵌入向量示例 [[0.1,0.2,0.3,...,0.2] [0.7,0.4,0.1,...,0.1] [0.4,0.2,0.5,...,0.8] [0.9,0.3,0.2,...,0.9]]上面是嵌入式向量维度的简单示例但实际上在这个阶段的是一个这种形状的张量(batch_size, seq_len, d_model)。seq_len对应的是token数例如切分后的句子有4个token的那么seq_len为4。d_model就是上面所说的嵌入式向量的维度了例如嵌入式向量有512维的那么d_model就对应为512。而这里的batch_size是为了提高运算效率将多个输入序列进行并行运算但是这些序列在计算过程中是完全独立、互不影响的只是一种工程上的优化方式。3、Positional Encoding位置编码位置编码是一个由确定公式计算出来的向量用于与词嵌入向量相加的。这是因为词向量是没有上下文顺序信息的而且Transformer架构是并行的运算的为了表示输入序列的顺序位置信息就需要加上这个位置编码。这个位置编码在Transformer论文里的计算公式是这样的公式中的pos是指这个token在序列中的位置如0、1、2这种取值。而i的部分即2i、2i1指的是维度索引其中0≤i d_model/2这里分为2i和2i1是为了表示维度索引为偶数时使用sin计算而维度索引为奇数时使用cos来计算。最后得到的位置编码矩阵与前面的词嵌入矩阵相加这样每个token的向量表示就同时包含了是什么token embedding和在哪个位置Positional Encoding的信息。输入到Encoder的向量 token_embedding positional_encoding二、Encoder经过上述处理后的词向量将进入Encoder模块。在标准Transformer架构中通常堆叠6层Encoder其最终输出的上下文表示会被传递给Decoder模块作为Key(K)和Value(V)用于Decoder中的cross-attention计算。由于Encoder在训练和推理阶段均可对整个输入序列并行处理因此计算效率高。这也是为何仅包含Encoder的BERT系列模型在推理时速度较快——它们无需像Decoder那样进行自回归式的逐token生成。1、Multi-Head AttentionMulti-Head Attention是Encoder中的一个关键组件它使模型能够有效捕捉输入序列中各token之间的上下文依赖关系。要深入理解Multi-Head Attention需依次掌握其核心概念Scaled Dot-Product Attention基础注意力计算、Self-AttentionQ、K、V均来自同一输入的注意力机制以及Multi-Head机制通过并行多个注意力头来联合建模不同表示子空间的信息。1Scaled Dot-Product Attention和Self-AttentionScaled Dot-Product Attention是一种通过计算QueryQ与KeyK的缩放点积因为需要除以K向量的维度dk的平方根所以名叫Scaled来衡量其相关性并利用softmax归一化后的注意力权重矩阵对ValueV进行加权求和的注意力机制。Self-Attention则是该注意力机制的一种应用形式其中Q、K和V均来自同一个输入序列X首先将输入X分别通过可训练的权重矩阵Wq、Wk、Wv线性投影为Q、K、V然后将其送入Scaled Dot-Product Attention进行计算。计算公式如下公式中的dk是KeyK向量的维度在计算注意力分数时除以该值的平方根是为了进行缩放避免因为Q和K点积结果的方差过大导致传入softmax计算后仅有少数位置的注意力权重接近1其余大多数位置的注意力权重接近0而几乎不会出现0.2、0.5等中间值存在的情况会给后续计算产生梯度消失的影响。因为softmax的计算公式是如下的当某个数值相对较大时就会发生指数增长与较小的数据差异将会更大。以e为底的指数函数图像2Multi-Head机制前面讲的Self-Attention就是自注意力了而Transformer中使用的是多头自注意力机制即Multi-Head Self-Attention。首先对于进入Encoder模块的矩阵X乘以权重矩阵Wq、Wk、Wv计算得到Q、K、V。然后对Q、K、V按照词嵌入向量的维度进行均分例如本来是512维的词嵌入向量分为4个头Q1、K1、V1、…、Q4、K4、V4每个头对应的向量有128维。再分别计算每个头各自的注意力AttentionQ1、K1、V1、…、AttentionQ4、K4、V4注意公式中要除以的dk从512变为128了然后将结果按顺序拼接为一个大矩阵拼接后的大矩阵一般还会使用另一个权重矩阵W做一次线性变换。多头机制本质上是为了让模型能够同时从多个不同的表示子空间中学习信息交互从而提升表达能力和建模灵活性。计算公式如下3残差连接Layer Normalization在Transformer架构示意图上可以看到进入Multi-Head Attention前的张量X会和经过Multi-Head Attention计算后的输出相加这个加和操作称为残差连接。这么设计是因为在深层网络中反向传播时梯度容易因多层导数连乘而急剧衰减即梯度消失。残差连接提供了一条梯度直接回传的路径使得底层参数仍能有效更新。在本质上此时模型学习的是输入与输出之间的“残差”即变化量而非完整的映射这降低了模型优化的难度。同时原始输入信息可以通过残差连接无损地传递到后续层避免在多层非线性变换中被过度扭曲或丢失。在Transformer中每个子层后都采用了残差连接包括Encoder中的Multi-Head Attention和Feed-Forward Network以及Decoder中的Masked Multi-Head Attention、Multi-Head Cross-Attention和Feed-Forward Network。残差连接的计算公式如下Layer Normalization层归一化就是Transformer架构图中的Norm节点如果接触过传统机器学习中的数据预处理会发现这个Norm节点的数学公式与普通机器学习中标准化的计算公式在数学形式上是一模一样的。只是Layer Normalization中是对同一个token向量所对应的各个维度的数值进行标准化计算也就是如果token向量有512维的那么针对这512个数值进行下面的标准化计算得到一个新的向量值。公式中的x_i 是token嵌入向量的第i个维度的值而H是该向量的维度总数例如若嵌入向量为512维则H512。在《Attention Is All You Need》论文中Transformer使用的是Post-Layer NormalizationPost-LN结构即在Multi-Head Attention、Feed-Forward Network等子层的输出与输入进行残差连接之后再应用Layer Normalization。然而经过一些算法大佬们后续研究发现如果将Layer Normalization移至这些子层之前即先对输入做Norm再送入子层计算然后将计算结果与原始输入做残差相加称为Pre–Layer NormalizationPre-LN结构模型训练过程会更加稳定收敛速度也更快因此许多现代Transformer变体采用了Pre–Layer Normalization的设计。下图是《Attention Is All You Need》中的Post-LN结构与开头图片中的Pre-LN结构有所区别// Post-LN结构 x → Sublayer → Add(x) → LayerNorm → output // Pre-LN结构 x → LayerNorm → Sublayer → Add(x) → output2、Feed-Forward NetworkEncoder模块中除了Multi-Head Attention之外还有一个前馈神经网络。这个网络实际上是一个包含一个隐藏层的两层全连接网络在两个线性变换之间使用ReLU等非线性激活函数用于进一步提升每个token中维度位置的表达能力。经过这个FFN处理后的输出将保持和输入的序列长度和维度不变。在Post-LN结构中FFN的输出会与其输入进行残差连接即相加然后通过Layer Normalization得到该子层的最终输出。经过Attention和FFN两个子层后一个完整的Encoder层完成计算。多层Encoder堆叠后的最终输出将作为Key和Value输入到Decoder的Cross-Attention层中。三、DecoderDecoder主要包含Masked Multi-Head Self-Attention、Multi-Head Cross-Attention和Feed-Forward Network这三个层其中Encoder模块的输出结果是用于Multi-Head Cross-Attention中进行计算的。1、Masked Multi-Head Self-Attention在模型训练时Decoder的Masked Multi-Head Self-Attention层的输入被称为Shifted Target Sequence移位的目标序列它是将真实目标序列需要包含结束标记向右平移一位并在开头添加起始标记得到的。例如若目标序列为[“我”,“很”,“好”,“”]则对应的Shifted Target Sequence为[“”,“我”,“很”,“好”]。训练时Decoder通过Masked Self-Attention确保下面4个预测在同一时间步一次前向传播中并行计算完成// 并行训练 位置0只能看见“sos”预测“我” 位置1只能看见“sos我”预测“很” 位置2只能看见“sos我很”预测“好” 位置3只能看见“sos我很好”预测“eos”而在模型推理时因为没有完整的Shifted Target SequenceDecoder模块则是串行地循环生成下一个字其初始的输入必定是这样的起始标志然后按顺序循环进行生成例如预测目标是“我很好”时生成步骤如下// 串行推理 时间步1输入“sos”预测“我” 时间步2输入“sos我”预测“很” 时间步3输入“sos我很”预测“好” 时间步4输入“sos我很好”预测“eos”生成结束。Masked Multi-Head Self-Attention层的计算和Multi-Head Self-Attention很像因此这部分完全可以参考前面Multi-Head Self-Attention中的Self-Attention、Multi-Head、残差连接、Layer-Norm的描述唯一区别在于在计算多头注意力Attention时会加上一个上三角矩阵causal mask例如对于长度为5的序列Causal Mask的掩码矩阵如下-inf负无穷在经过softmax后会变成0从而屏蔽掉未来位置的信息[[0., -inf, -inf, -inf, -inf], [0., 0., -inf, -inf, -inf], [0., 0., 0., -inf, -inf], [0., 0., 0., 0., -inf], [0., 0., 0., 0., 0.]]2、Multi-Head Cross-AttentionMasked Multi-Head Self-Attention的输出经过残差连接和Layer Normalization后作为Query(Q)输入到Multi-Head Cross-Attention层而该Cross-Attention层的Key(K)和Value(V)则来自Encoder模块的最终输出。可知Cross-Attention与Self-Attention的主要区别是Self-Attention是Q、K、V同源的同一序列内部交互而Cross-Attention的Q来自DecoderK和V来自Encoder用于实现跨序列的信息融合。Transformer架构中每预测一个token就会经过一次decoder step每次decoder step中输入会依次通过所有堆叠的Decoder层但encoder的输出在整个decoding过程中是固定不变的即K和V不随decoder step改变而Q在每个decoding step都会更新。经过Multi-Head Cross-Attention层计算后的结果同样需要经过残差连接和Layer-Norm然后进入一个两层Feed-Forward Network这方面的计算和Encoder模块上的一样。四、输出数据处理Decoder最终输出的是一个形状为L × D的张量L表示当前已生成的token序列长度D是模型的隐藏维度与输入内容的词嵌入token embedding的维度是一致的。该张量随后通过一个线性层输出投影层Linear其权重矩阵大小为D × VV为词表大小则计算得到一个L × V的张量。接着这个张量的每一行即每个位置独立应用Softmax函数将其转换为概率分布。最终得到的L × V概率矩阵中第i行表示在第i个位置上选择词表中各个token的概率示例如下// 概率矩阵中每行之和为 1代表该位置对词表中 5 个 token 的预测概率 // 这里可以根据数值选择选概率最大的那个词 // 也可以通过调节Top-k、Top-p、temperature等进行采样 [ [0.215 0.205 0.226 0.185 0.169] [0.175 0.260 0.210 0.155 0.200] [0.230 0.170 0.260 0.210 0.130] ]最后唠两句为什么AI大模型成为越来越多程序员转行就业、升职加薪的首选很简单这些岗位缺人且高薪智联招聘的最新数据给出了最直观的印证2025年2月AI领域求职人数同比增幅突破200% 远超其他行业平均水平整个人工智能行业的求职增速达到33.4%位居各行业榜首其中人工智能工程师岗位的求职热度更是飙升69.6%。AI产业的快速扩张也让人才供需矛盾愈发突出。麦肯锡报告明确预测到2030年中国AI专业人才需求将达600万人人才缺口可能高达400万人这一缺口不仅存在于核心技术领域更蔓延至产业应用的各个环节。那0基础普通人如何学习大模型 深耕科技一线十二载亲历技术浪潮变迁。我见证那些率先拥抱AI的同行如何建立起效率与薪资的代际优势。如今我将积累的大模型面试真题、独家资料、技术报告与实战路线系统整理分享于此为你扫清学习困惑共赴AI时代新程。我整理出这套 AI 大模型突围资料包【允许白嫖】✅从入门到精通的全套视频教程✅AI大模型学习路线图0基础到项目实战仅需90天✅大模型书籍与技术文档PDF✅各大厂大模型面试题目详解✅640套AI大模型报告合集✅大模型入门实战训练这份完整版的大模型 AI 学习和面试资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】①从入门到精通的全套视频教程包含提示词工程、RAG、Agent等技术点② AI大模型学习路线图0基础到项目实战仅需90天全过程AI大模型学习路线③学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的④各大厂大模型面试题目详解⑤640套AI大模型报告合集⑥大模型入门实战训练如果说你是以下人群中的其中一类都可以来智泊AI学习人工智能找到高薪工作一次小小的“投资”换来的是终身受益应届毕业生‌无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型‌非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界‌。业务赋能 ‌突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型‌。获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】