Transformer 详解:从注意力机制到代码实战

前言 Transformer 是目前深度学习中最重要的一类架构。从 GPT、BERT 这类大语言模型,到 ViT 这类视觉模型,近几年绝大多数突破背后都有它的身影。可以说,理解 Transformer 是读懂当代 AI 的必修课。 本文假设你已经读过本站的《正向传播与反向传播:神经网络到底如何学习》,理解"网络是一串函数复合、训练时误差沿链式法则反向流动"这两条主线。我们会沿用同样的思路拆解 Transformer:信息如何向前流动,梯度如何向后流动。 本文会从"为什么需要 Attention"讲起,逐步推导公式,最后用一个从零手写的迷你 Transformer(PyTorch)把代码落地。涉及 softmax 的数学细节——梯度、数值稳定性、为什么注意力要除以 $\sqrt{d_k}$——会链接到本站 ai-math 专栏的配套文章,避免在这里打断主线。 为什么要 Transformer RNN 的局限 在 Transformer 之前,处理序列(文本、语音等)的主流架构是 RNN(循环神经网络)。RNN 像一条传送带,按顺序逐个处理 token,把之前看到的信息压缩在一个隐藏状态里。这个设计有三个天然的瓶颈: 无法并行:第 $t$ 步的计算依赖第 $t-1$ 步的隐藏状态,只能从左到右依次计算,GPU 的大规模并行能力完全用不上。 长距离依赖困难:信息每传一步都要经过一次变换,距离越远衰减越明显。处理长文本时,开头的词往往"传不到"结尾。 信息瓶颈:所有历史都被压缩进一个固定大小的隐藏向量,容量有限。 Transformer 的思路 Transformer 的做法截然不同:一次看完整条序列。它不再按顺序传递状态,而是让序列中的任意两个位置直接交互。 先解释一个词:token(词元,我实在不喜欢它的官方中译) 是文本被切分后的基本单位,可以是一个词、一个字符或一个子词片段。比如"我吃了一个红苹果"可以切成 6 个 token:我 / 吃 / 了 / 一个 / 红 / 苹果。 flowchart LR subgraph RNN["RNN:信息一站一站传"] direction LR r1["第 1 个"] --> r2["第 2 个"] r2 --> r3["第 3 个"] r3 --> r4["第 4 个"] end subgraph ATTN["Transformer:任意两个直接对话"] direction LR a1["第 1 个"] --- a2["第 2 个"] a1 --- a3["第 3 个"] a1 --- a4["第 4 个"] a2 --- a3 a2 --- a4 a3 --- a4 end 上图为两种架构的token之间的交互示意: 从图论的角度来说,RNN 是一个 有向路径图,包含 $n$ 个节点(代表隐状态 $h_t$)和 $n-1$ 条有向边($h_{t-1} \to h_t$);而 Transformer 是一个 完全图,包含 $n$ 个节点和 $\frac{n(n-1)}{2}$ 条无向边(每两个 token 之间都有一条边)。 ...

📅 August 3, 2026 · ⏱️ 48 min · 📝 约 7268 字 · 👁️ 次阅读

Large Language Models: 改变世界的语言革命

前言 2018 年 6 月,OpenAI 发布了首个基于 Transformer 架构的语言模型 GPT(Generative Pre-trained Transformer),标志着大语言模型(Large Language Models, LLM)时代的到来。 笔者接触 LLM 的时间很晚。笔者第一次了解到人工智能技术大约是在 2020 年,了解的是 Siri——一款 Apple 公司推出的智能语音助手。那时,笔者对人工智能的认知还停留在语音识别和图像识别这类传统的、基于规则或特定任务的 AI 技术上。 直到 2023 年,ChatGPT 的出现彻底打破了这种刻板印象。它不再是那种只会回答"对不起,我没听懂"的死板程序,而是展现出了令人惊叹的上下文理解与生成能力。直至 2024 年,LLM 已经跃升为人工智能领域的核心基础设施,并在自然语言处理、代码生成、知识问答等多个领域展现出强大的降维打击能力。 彼时,笔者第一次尝试使用 ChatGPT 进行代码生成,切身体验了 LLM 在编程辅助方面的巨大潜力。通过与 ChatGPT 的自然语言交互,笔者能够快速生成复杂的代码片段、精准调试报错程序。即使是面对晦涩的算法问题,它也能像一位不知疲倦的资深工程师一样,提供详细的逻辑拆解和替代方案。这种革命性的交互式编程体验,让笔者深刻认识到:我们正在经历一场软件工程范式的重构。 9.11 > 9.9 ?? 在大家惊叹于 LLM 无所不能的同时,也发生了一些令人啼笑皆非的"降智"事件。当时引发群众广泛讨论的一个有趣话题是:为什么询问 ChatGPT"9.11 和 9.9 哪个更大"时,它的回答往往是 9.11 更大? 人们尝试用不同的语气提问,甚至切换不同的语言,但早期的 LLM 几乎都会掉进这个陷阱。这一现象虽然看似荒诞,但却完美暴露了 LLM 底层运行逻辑的一个核心特征:它是一个"文字接龙"的高手,而不是一个内置了计算器的数学天才。 造成这个现象的原因主要有两个: 分词机制(Tokenization):LLM 看待世界的方式不是单个字母,而是"词元(Token)"。在切分 9.11 时,它可能会将其视为 9、.、11。在语言模型的潜意识里,整数 11 显然大于 9。 语料库的语义偏差:在人类互联网的海量文本中,带小数点的数字经常被用作"软件版本号"。从版本迭代的逻辑来看,v9.11 确实是 v9.9 之后发布的新版本。 这个经典的错觉引发了学术界和工业界对 LLM 逻辑推理边界的深刻反思,也成为了推动模型向"深度思考"和"强化学习"演进的催化剂。这让我们不禁要问:这些看起来像人的机器,到底是由什么构成的? ...

📅 June 22, 2026 · ⏱️ 20 min · 📝 约 3118 字 · 👁️ 次阅读
Comments