本文通过图解方式详细拆解了Transformer模型的复杂结构重点讲解了注意力机制、编解码器的工作原理以及位置编码等关键概念。文章适合零基础读者旨在帮助读者深入理解Transformer的工作方式从而更好地应用于机器翻译等任务。网上讲 Transformer 的文章很多但要说最通俗易懂、看完真能懂的Jay Alammar 这篇《Illustrated Transformer》绝对是排得上号的——作者用一步步的图解把复杂的注意力机制、编解码结构拆解得明明白白零基础也能跟上想入门 Transformer 别错过这篇。原文链接https://jalammar.github.io/illustrated-transformer/正文开始这篇文章主角是Transformer——它靠注意力机制加速模型训练在特定任务上性能比当年谷歌的神经机器翻译模型还更好。但 Transformer 最大的好处其实是天生适合并行计算。谷歌云甚至官方推荐把它作为 Cloud TPU 的参考模型。那咱们就拆开来看看它到底怎么工作。Transformer 出自论文 Attention is All You Need。TensorFlow 实现已经在 Tensor2Tensor 包里了。哈佛 NLP 团队还做了带注释的指南附了 PyTorch 实现。这篇文章里我尽量把概念拆碎一步一步讲希望没那么多背景知识也能看懂。整体概览我们先把整个模型看成一个黑箱。做机器翻译的话输入一种语言的句子输出另一种语言的翻译。打开黑箱里面有三部分**编码器encoder**堆、**解码器decoder**堆还有它们之间的连接。编码器堆就是好几个编码器摞起来——论文里摞了六个数字六没什么神奇的你想换别的数量也可以。解码器堆也是同样数量的解码器摞起来。所有编码器结构一样但不共享权重。每个编码器拆成两个子层编码器输入先过自注意力层——这一层在编码某个单词的时候能让它同时看到输入句子里其他单词。这个我们后面细说。自注意力层的输出再过一个前馈神经网络。每个位置的向量都独立地过同一个前馈网络。解码器也有这两层但中间多了一个注意力层用来帮解码器聚焦输入句子里相关的部分——和 seq2seq 模型里注意力干的活差不多。张量视角现在我们知道了大体结构看看各种向量/张量是怎么在组件之间流动最终把输入变成输出的。和所有 NLP 任务一样第一步我们先用词嵌入把每个单词转成向量。每个单词嵌入完是一个 512 维向量。我们就用小方框来表示它们。嵌入只在最底下那个编码器做。所有编码器都接收一个 512 维向量列表——最底层是词嵌入上面的编码器接收底下编码器的输出。列表长度是超参数就是你训练集里最长句子的长度。输入序列嵌入完每个单词依次过编码器的两个子层。这里能看到 Transformer 一个关键特点每个位置的单词在编码器里走自己的路径。自注意力层里这些路径之间有依赖但前馈层没有依赖所以过前馈层的时候可以并行算。下面我换个短句子做例子一步步看编码器每个子层到底干嘛。开始编码编码器接收向量列表先过自注意力再过前馈神经网络然后输出给上一层编码器。每个单词都先做自注意力再过前馈——每个向量独立走同一个网络。自注意力是什么别被这个名词唬住我一开始读论文的时候也没听说过。一句话说清楚它干了啥。假设我们要翻译这句话“The animal didn’t cross the street because it was too tired”动物没过马路因为它太累了这句话里的it指的是谁是 street 还是 animal对人来说太简单了但对算法来说可不简单。模型处理it的时候自注意力让它把it和animal关联起来。模型处理每个单词输入序列每个位置的时候自注意力允许它看输入序列其他位置找线索帮自己更好编码当前词。如果你熟悉 RNN想想 RNN 是怎么把之前处理过的词的信息揉进当前隐藏状态的。自注意力就是 Transformer 用来把其他相关词的理解揉进当前词的方法。比如我们在第五个编码器堆顶那个编码it的时候一部分注意力就会跑到The Animal那里把它的表示揉进it的编码里。你可以去这个 Tensor2Tensor notebook 自己玩加载个 Transformer 模型用交互式可视化看看。自注意力细节我们先看怎么用向量算自注意力再看实际怎么用矩阵实现。第一步从编码器输入向量也就是每个词的嵌入变出三个向量Query、Key、Value。每个词都有这三个向量就是用嵌入乘以三个训练出来的权重矩阵得到的。注意这三个向量比原来嵌入向量维度小。嵌入和编码器输入输出是 512 维这三个是 64 维。不一定非要更小这是架构选择让多头注意力计算量基本保持不变。输入 x1 乘以 WQ 得到 q1就是这个词的 Query 向量。最后我们给输入句子每个词都变出 Query、Key、Value 三个投影向量。这三个向量到底是什么它们就是帮我们计算注意力的抽象概念。看完计算过程你就懂它们各自的作用了。第二步算分数。假设我们现在算第一个词 “Thinking” 的自注意力我们要给输入里每个单词打个分。分数代表编码当前词的时候要给其他位置放多少注意力。分数就是 Query 向量点乘你要打分那个词的 Key 向量。所以处理位置 1 的词第一个分数就是 q1 ⋅ k1第二个分数是 q1 ⋅ k2以此类推。第三步分数除以 8论文里 Key 向量是 64 维√64 8。这么做为了梯度更稳定其他值也可以8 是默认然后过一遍 softmax。Softmax 把分数归一化让所有分数都是正数加起来等于 1。Softmax 分数就是当前位置对每个词的权重代表这个词占多少比例。显然当前位置得分最高但有时候关注相关的其他词也很有用。第五步每个 Value 向量乘以 softmax 分数。思路就是留住你想关注的词的值把不相关的淹没掉比如乘个 0.001 就没了。第六步加权后的 Value 向量加起来就是当前位置自注意力层的输出第一个词。到这自注意力计算就完了得到的向量送给前馈神经网络。实际实现里为了更快用矩阵一次性算完。我们看过单词级别直觉后现在看看矩阵版本。自注意力的矩阵计算第一步还是算 Query、Key、Value 矩阵。我们把所有词嵌入打包成矩阵 XX 乘以三个权重矩阵 WQ、WK、WV 就得到了 Q、K、V 三个矩阵。X 每一行对应输入一个词。这里你能看到嵌入512 维图里画四个框和 q/k/v64 维图里三个框尺寸的区别。最后因为是矩阵运算我们可以把二到六步压缩成一个公式直接算出自注意力层输出多头注意力论文又进一步改进了自注意力加了多头注意力机制。它从两个方面提升性能扩展了模型关注不同位置的能力。比如上面那个例子it 的编码里多少带了其他词但主要还是它自己。如果是 “The animal didn’t cross the street because it was too tired”我们需要知道 it 具体指谁多头就有用了。给注意力层多个表示****子空间。多头注意力不只有一组 Q/K/V 权重Transformer 用了八个头所以就是八组。每组训练完都会把输入或者下层来的向量投影到不同的表示子空间。所以每个头都有自己独立的 Q/K/V 权重得到不同的 Q/K/V 矩阵。和之前一样X 乘以权重得到三个矩阵。然后我们重复八次不同权重矩阵的自注意力计算最后得到八个不同的 Z 矩阵。但这里有个问题前馈层不想要八个矩阵它只想要一个矩阵——每个词对应一个向量。所以我们需要把八个矩阵压缩回一个矩阵。做法就是把八个矩阵拼起来再乘以一个额外的权重矩阵 WO 就好了。多头自注意力基本就是这些了。我知道矩阵有点多我尽力把它放一张图里方便看。说完注意力头我们回到之前那个例子看看编码 “it” 的时候不同注意力头都关注哪编码 “it” 的时候一个头主要关注 “the animal”另一个关注 “tired”——所以模型对 “it” 的表示已经融合了 “animal” 和 “tired” 的信息这正是我们想要的。要是把所有头都画出来反而就不太好读了。位置编码怎么表示序列顺序现在我们讲的模型里还差一样东西怎么记录输入序列单词的顺序Transformer 解决方法是给每个输入嵌入加一个位置编码****向量。这些向量遵循模型能学会的特定模式帮助模型确定每个词的位置还有不同词之间的距离。直觉是把这些值加到嵌入上当投影到 Q/K/V 做点积注意力的时候嵌入向量之间会有有意义的距离区分。简单说就是加位置编码让模型知道单词顺序。位置编码长什么样呢如果嵌入维度是 4实际位置编码大概长这样每行一个位置实际例子是 20 个单词行嵌入维度 512列每行 512 个值在 -1 到 1 之间。我们上色之后就能看到 pattern从中间对半分左半部分用正弦生成右半部分用余弦生成拼起来就是每个位置编码向量。位置编码公式论文在 3.5 节写了生成代码看 get_timing_signal_1d()。这不是唯一的位置编码方法但好处是可以处理比训练集更长的句子——见过的长度你会算没见过的你也会算。2020 年 7 月更新上面展示的是 Tensor2Tensor 实现里的位置编码。论文里方法有点不一样不是直接拼接而是把两个信号交织起来。下图就是那种样子这里是生成代码。残差连接讲完了讲编码器架构里一个细节每个子层自注意力、前馈网络外面都有一个残差连接然后接层****归一化。要是把向量和层归一化画出来就是这样。解码器子层也一样。如果想象一个两层编码器两层解码器的 Transformer大概长这样。解码器编码器我们讲完了解码器组件其实我们差不多都知道了现在看看它们怎么配合工作。编码器先处理输入序列顶层编码器输出变成一组 KKey和 VValue注意力向量给每个解码器的“编码器-解码器注意力”层用帮助解码器聚焦输入序列合适的位置。编码完开始解码解码每一步输出输出序列的一个元素就是我们例子里的英文翻译。重复这个过程直到输出特殊的句子结束符号就完成了。每一步输出送给下一个时间步的最底层解码器然后结果一路往上和编码器一样。而且和编码器输入一样我们也要对解码器输入做嵌入加上位置编码告诉模型每个词的位置。解码器里自注意力层工作方式和编码器有点不一样在解码器里自注意力只允许关注当前位置之前的位置。方法就是在 softmax 之前把未来位置都 mask 掉设成负无穷这样它们就不会被算进来。编码器-解码器注意力层和多头自注意力工作原理差不多区别就是 Query 矩阵是下层来的Key 和 Value 矩阵用编码器栈的输出。最后一步线性层 Softmax解码器栈输出一个浮点数向量怎么把它变成一个单词这就是最后线性层加Softmax 层干的活。线性层就是一个简单的全连接神经网络把解码器输出投影到一个非常宽的向量叫做 logits 向量。假设我们模型训练的时候学了 10000 个唯一的英语单词这就是输出词汇表那 logits 向量就有 10000 格每一格对应一个单词的分数。这就是线性层输出怎么解读。Softmax 把分数转成概率都正加起来是 1概率最高那格对应的单词就是当前时间步的输出。该图从底部开始初始是解码器栈输出的向量然后再将其转换为输出词。训练过程回顾现在训练好的模型前向传播我们走完一遍我们简单回顾一下训练是咋回事。训练的时候没训练的模型也走一模一样的前向传播。但我们是在有标签的数据集上训练所以可以把输出和正确答案比一比。举个例子假设输出词汇表只有六个词“a”, “am”, “i”, “thanks”, “student”, “”句子结束。输出词汇表是训练前预处理就做好的。定义好之后每个单词用一个独热向量表示——比如单词 “am” 就是对应位置是 1其他都是 0。看完这个我们说说损失函数——训练阶段我们优化的目标最后靠它得到训练好准确的模型。损失函数假设我们现在训练第一步训练一个简单例子把 “merci” 翻译成 “thanks”。意思就是我们希望模型输出单词 “thanks” 的概率高。但模型还没训练不可能一下就对。因为参数都是随机初始化没训练的模型每个单词都给个随机概率。我们把预测概率和真实概率比一比然后反向传播调所有参数让输出慢慢接近期望输出。怎么比两个概率分布直接减了算交叉熵或者 KL 散度就行具体可以看交叉熵cross-entropy和 KL 散度Kullback–Leibler divergence的介绍。我这是过度简化了实际句子都比一个词长。比如输入 “je suis étudiant”期望输出 “i am a student”。实际意思是我们希望模型连续输出概率分布满足每个概率分布向量宽度是词汇表大小我们例子是 6实际一般 30000 或 50000第一个概率分布单词 “i” 概率最高第二个概率分布单词 “am” 概率最高…直到第五个输出是 “” 符号10000 词词汇表里也有它位置。训练例子里我们就是对着这些目标概率分布训模型。数据集够大训练够久之后我们希望出来的概率分布长这样训练完我们就希望输出正确翻译。当然如果这个句子在训练集里也不能说明啥交叉验证了解一下。注意即使某个位置不太可能输出softmax 也会给一点概率这个性质对训练很有帮助。现在因为模型一次输出一个词我们可以选概率最高那个词扔掉剩下的这叫贪心解码。另一种方法是保留比如前两个词比如 “I” 和 “a”下一步跑两次模型一次假设第一个位置输出是 “I”一次假设输出是 “a”哪个版本在考虑两个位置后误差更小就留哪个。这个过程对位置 2、3…一直重复这叫集束搜索beam search我们例子里 beam_size 是 2就是任何时候内存里留两个未完成翻译假设top_beams 也是 2最后返回两个翻译结果。这两个都是超参数你可以自己调。最后2026 年春节前后国内大模型迎来史无前例的集体爆发与同台竞技。短短不到一个月主流厂商几乎全部登场字节跳动 Seedance 2.0 刷屏科技圈各大互联网公司纷纷推出 AI 红包新玩法一场场精心准备的“大模型春晚”轮番上演吸引无数 AI 爱好者围观喝彩。大模型赛道竞争如此激烈普通人到底该怎么入局抢占未来 10 年的行业红利如果你还不知道从何开始我特别整理了一套全网最全、最细的大模型零基础教程。我也是一路自学走过来的太清楚小白前期学习的痛点没人带、没方向、没资源真的很难学进去下面这套资料就是我专门为零基础、想转行、想提升的同学准备的全套学习方案。扫码免费领取全部内容资料包分享1、大模型完整学习路线图2、从 0 到进阶大模型视频教程从入门到实战全套视频都整理好了跟着学效率更高3、入门必看精选书籍 核心文档PDF 版市面上技术书太多我已经帮你筛选出最值得看的一批还有大量补充资料不在图里一并打包给你4、AI大模型最新行业报告2026 年最新行业报告系统分析各行业现状、趋势、痛点与机会帮你看清哪些行业最适合落地大模型哪里才有真正的机会。5、面试试题/经验【大厂 AI 岗位面经分享107 道】【AI 大模型面试真题102 道】【LLMs 面试真题97 道】6、大模型项目实战配套源码适用人群四阶段学习规划共90天可落地执行第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…扫码免费领取全部内容3、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】