图解 Transformer,一文吃透工作原理
最近发现,大家在大厂面试的时候,会被问到很多AI 方面的基础知识,所以二哥这里也收录了一些经典的内容到知识库中,方便大家做个参考。尤其是准备和 AI 相关的面试的时候,可以利用语雀的 AI 提炼总结一些口述内容。
Attention —— 一种在现代深度学习模型中广泛使用的方法。Attention 的引入显著提升了神经机器翻译系统的性能。在这篇文章中,我们将进一步探讨 Transformer —— 一种以 Attention 为核心、加快训练速度的模型架构。Transformer 在某些任务中甚至超越了 Google Neural Machine Translation 模型。而 Transformer 最大的优势在于其结构非常适合并行化计算。事实上,Google Cloud 官方就推荐使用 Transformer 作为参考模型,充分发挥 Cloud TPU 的性能。
因此,接下来我们会一步步拆解这个模型,看看它是如何运作的。
Transformer 最初是在论文《Attention is All You Need》中提出的。它在 TensorFlow 中的实现可以通过 Tensor2Tensor 工具包获取,而哈佛大学 NLP 小组则基于该论文开发了 PyTorch 注解教程。在这篇文章中,我们会尝试对原理进行适当简化,逐步引入相关概念,帮助没有专业背景的读者更容易理解。
01、整体视角
我们先从高层角度看一下这个模型,把它当作一个黑盒来看。在机器翻译的应用中,它接收一段源语言的句子,输出目标语言的翻译结果。

如果我们“打开”这个像擎天柱一样强大的结构,会看到里面主要包括三个部分:一个编码器模块、一个解码器模块,以及它们之间的连接。

编码器模块由多个编码器堆叠而成(论文中是堆叠了六层编码器——这个数字并没有什么神奇之处,完全可以尝试其他层数的组合)。解码器模块也是相同数量的解码器堆叠而成。

每个编码器结构都完全相同(但它们之间并不共享参数)。每个编码器又被细分为两个子层:

编码器的输入首先会流经一个自注意力层(self-attention),这个子层的作用是,在编码当前词的时候,同时参考输入句子中的其他词,从而获得更丰富的上下文信息。我们稍后会详细介绍 self-attention 的工作原理。
self-attention 层的输出接着会传递给一个前馈神经网络(feed-forward neural network)。这个前馈网络在每一个位置上都是完全相同的,并且是独立应用的,也就是说每个位置单独计算,不共享信息。
解码器中也包含了这两种层(自注意力层和前馈网络层),但在它们之间还插入了一个额外的注意力层,用来帮助解码器专注于输入句子中与当前生成词相关的部分(这和传统 seq2seq 模型中的 attention 机制非常相似)。

02、引入张量的视角
现在我们已经了解了模型的主要组成部分,接下来我们开始关注向量(或张量)是如何在这些组件之间流动的,从而把一个训练好的模型输入,转化为输出。
就像大多数 NLP 应用中一样,首先我们要做的是将每个输入词转换为一个向量,这一步通常通过嵌入算法(embedding)完成。

每个词都会被嵌入成一个长度为 512 的向量。我们可以把这些向量用简化的方块来表示。
词嵌入只发生在最底层的编码器中。所有编码器的一个共同抽象是:它们接收的是一个由若干长度为 512 的向量组成的列表——在底层编码器中,这些向量是词嵌入;而在其他编码器中,这些向量则是下方编码器的输出。这个列表的长度是一个超参数,通常设定为训练数据中最长句子的长度。
在我们完成对输入序列中每个词的嵌入之后,它们就会依次通过编码器中的两个子层进行处理。

这时候我们开始看到 Transformer 的一个关键特性:每个位置上的词向量会沿着自己的路径在编码器中流动。在 self-attention 层中,这些路径之间是存在依赖关系的;但在后面的前馈层中,各条路径之间则没有依赖,因此这些路径可以并行计算,提高效率。
接下来我们会把例子换成一个更短的句子,来看看编码器中每个子层是如何处理的。
03、进入编码阶段
就像前面提到的,编码器的输入是一个向量列表。编码器的处理流程是:先把这些向量传入 self-attention 层,然后传入前馈神经网络,最后将处理后的结果输出,交给上方的下一个编码器继续处理。

每个位置上的词向量都会先经过一次 self-attention 处理,然后再分别通过一个前馈神经网络——注意,这个网络在所有位置上都是相同的,但每个向量是独立地通过它的。
04、高层次理解
别被我频繁提起 “self-attention” 这个词吓到了,好像这是大家都应该熟悉的概念。实际上,在我读《Attention is All You Need》这篇论文之前,我自己也从来没接触过这个概念。现在我们来简要提炼一下它的工作原理。
假设我们要翻译下面这个输入句子:
“The animal didn't cro...
未能定位到原文的划线
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复