看懂 Transformer,从一次可视化开始

0 阅读9分钟

image.png 最近在学习大模型和 Agent 开发时,我越来越明显地感觉到一件事:

很多概念只看文字和公式,其实很难真正理解。

比如 Transformer 里经常被反复提到的这些词:

  • Token
  • Embedding
  • Attention
  • Q / K / V
  • Softmax
  • MLP
  • Logits
  • Next Token Prediction

单独看每一个概念,好像都能理解一点。但一旦把它们串起来,问自己一句:

一个输入文本到底是怎么一步步变成下一个 token 的?

很多地方就会变得模糊。

所以我最近整理并部署了一个可在线访问的 Transformer 可视化学习项目,方便自己反复学习,也方便有同样困惑的人直接打开浏览器体验。

在线地址:

wangzi6224.github.io/transformer…

项目仓库:

github.com/wangzi6224/…

为什么要做这个页面

Transformer 的学习资料很多,但常见资料有一个问题:要么过于数学化,要么过于抽象。

比如 Attention 公式大家可能都见过:

Attention(Q, K, V) = softmax(QKᵀ / √d) V

但问题是,真正学习的时候,我们更关心的是:

  • Q、K、V 到底从哪里来?
  • 为什么要算 QKᵀ?
  • Softmax 之后的分数表示什么?
  • 每一层 Transformer Block 对 token 做了什么?
  • 最后为什么可以预测下一个 token?
  • 模型内部的信息流到底是怎么流动的?

这些问题仅靠静态公式和文字描述,很容易停留在“好像懂了”的状态。

这个项目的价值就在于,它把 Transformer 的推理过程做成了一个可以交互观察的页面。你可以输入文本,然后一步步看模型内部发生了什么。

它不是只展示最终答案,而是把中间过程拆开给你看。

它适合谁

我觉得这个项目比较适合下面几类人:

1. 刚开始学习 Transformer 的开发者

如果你已经知道大模型很重要,也看过一些关于 Transformer 的文章,但总觉得 Attention、Embedding、MLP 这些概念没有完全连起来,这个页面会比较适合你。

它可以帮助你把这些概念从“名词”变成“流程”。

2. 想转向 AI / Agent 开发的工程师

现在很多开发者都在从传统 Web、后端、数据工程转向 AI 应用开发。

在做 RAG、Agent、Tool Calling、Memory、Context Engineering 时,我们不一定每天都要手写 Transformer,但理解模型的基本工作方式还是很重要。

比如你要理解:

  • 为什么上下文长度很重要;
  • 为什么 prompt 的前后顺序会影响输出;
  • 为什么模型是逐 token 生成;
  • 为什么模型有时候会“看起来理解了”,但其实只是在概率上续写;
  • 为什么 attention 机制会影响模型对上下文的关注方式。

这些东西如果只从 API 层理解,会比较浅。看一下模型内部流程,会更容易建立直觉。

3. 想给别人讲清楚 Transformer 的人

如果你需要给同事、朋友或者团队成员讲 Transformer,这种可视化页面比纯 PPT 更直观。

很多时候,讲清楚一个概念不难,难的是让别人知道这个概念在整个模型流程里处于什么位置。

这个项目刚好可以作为辅助讲解工具。

它主要展示了什么

这个项目围绕 GPT-2 这类 Decoder-only Transformer 的推理过程展开。

打开页面后,你可以看到输入文本如何经过模型一步步处理,大致包括:

输入文本
  ↓
Tokenizer 分词
  ↓
Token Embedding
  ↓
Transformer Block
  ↓
Attention
  ↓
MLP
  ↓
Logits
  ↓
Softmax
  ↓
预测下一个 Token

这里面比较有价值的是,它不是只给一个总流程图,而是允许你观察更细的中间状态。

比如:

  • 每个 token 如何被编码;
  • Attention 如何在不同 token 之间建立关系;
  • 每一层的向量如何继续传递;
  • 最终 logits 如何转成下一个 token 的概率分布。

对学习者来说,这种“看见中间过程”的体验非常重要。

我自己学习时最有帮助的几个点

1. 更直观地理解“模型是在预测下一个 token”

很多人刚接触大模型时,会下意识把它当成一个问答系统。

但从底层看,它本质上是在做 next token prediction。

也就是说,模型不是一次性生成完整答案,而是根据当前上下文,不断预测下一个最可能出现的 token。

这个项目把这个过程展示出来之后,会明显感觉到:

大模型输出文本,其实是一步一步滚动生成的。

这对理解流式输出、上下文窗口、temperature、top-k、top-p 等概念都有帮助。

2. Attention 不再只是一个公式

Attention 这个词很容易被讲得很玄。

但可视化以后会更容易理解:它本质上是在当前 token 和其他 token 之间计算关系权重。

也就是说,模型在处理某个 token 时,并不是孤立地看它,而是会结合上下文中其他 token 的信息。

这也是 Transformer 能够处理上下文关系的关键。

公式当然重要,但在学习初期,先建立“信息如何流动”的直觉,可能比一开始就陷入矩阵推导更有效。

3. Q / K / V 的角色更清楚

Q、K、V 是很多人学习 Attention 时最容易卡住的地方。

简单说:

  • Q 可以理解成当前 token 想要找什么信息;
  • K 可以理解成每个 token 提供的匹配特征;
  • V 可以理解成真正被聚合的信息内容。

当然,这不是严格数学定义,但作为学习直觉很有用。

通过可视化,你可以更容易看到:Attention 不是凭空产生的,它是通过 Q 和 K 计算相关性,再用这个相关性去加权 V。

这比单独背公式要有效很多。

4. Softmax 和概率分布更容易理解

最后模型会输出一组 logits,然后通过 softmax 转换成概率分布。

这一步决定了模型下一步更倾向于生成哪个 token。

如果只看文字,很容易把 logits、probability、token prediction 混在一起。

但可视化以后,可以更清楚地看到:

模型内部输出分数
  ↓
转换成概率
  ↓
选择或采样下一个 token

这也能帮助理解为什么同一个 prompt 在不同参数下可能得到不同输出。

为什么我要把它部署到 GitHub Pages

原项目本身已经是一个很好的学习工具,但如果每次都要本地启动,对日常学习来说还是有点麻烦。

我更希望它是一个随时能打开的页面。

比如:

  • 写文章时可以打开看一下流程;
  • 学 Attention 时可以随手验证;
  • 和别人讨论 Transformer 时可以直接发链接;
  • 面试前复习大模型基础时可以快速过一遍;
  • 做 Agent 开发时回头补底层直觉。

所以我把它部署到了 GitHub Pages。

现在只要打开这个地址就可以访问:

wangzi6224.github.io/transformer…

这个项目的运行方式

这个页面不是传统意义上的后端服务。

它主要是在浏览器里运行:

浏览器加载页面
  ↓
加载模型相关资源
  ↓
在前端执行推理和可视化

这也意味着它比较适合作为静态学习工具部署到 GitHub Pages 上。

不过也正因为模型和 tokenizer 资源需要在浏览器侧加载,所以首次打开可能会稍微慢一点。尤其是在网络环境不稳定时,可能需要等待一会儿。

如果页面打开后模型长时间 loading,可以优先检查网络环境,或者刷新重试。

我推荐的学习方式

如果你是第一次打开这个项目,我不建议一上来就追求把每个细节都看懂。

更推荐按下面这个顺序学习:

第一步:先看整体流程

先不要纠结每个矩阵的具体数值,先搞清楚:

输入文本是如何一步步流向最终预测结果的

只要这个主线建立起来,后面的细节就有位置可以放。

第二步:重点看 Attention

Attention 是 Transformer 的核心,也是最值得反复看的部分。

可以重点关注:

  • 当前 token 关注了哪些 token;
  • 不同 token 之间的权重有什么变化;
  • 权重变化如何影响后续表示。

第三步:再看 MLP 和输出预测

很多人学习 Transformer 时只关注 Attention,但 MLP 也很重要。

Attention 更像是在 token 之间交换信息,MLP 则是在每个 token 的表示内部做进一步变换。

最后再结合 logits 和 softmax,就能把整个推理链路串起来。

一点个人感受

我现在越来越觉得,学习大模型不能只停留在“会调用 API”。

API 很重要,工程落地也很重要,但如果完全不了解模型的基本工作机制,很容易在做 Agent、RAG、上下文工程时遇到瓶颈。

比如:

  • 为什么模型会忽略某些上下文;
  • 为什么 prompt 稍微换个顺序结果就变了;
  • 为什么长上下文不是简单地“塞更多内容”;
  • 为什么模型会产生幻觉;
  • 为什么工具调用前后需要组织好 observation;
  • 为什么最终答案质量和上下文选择强相关。

这些问题表面上是应用层问题,但背后都和模型的生成机制有关。

所以我觉得,这类可视化工具的意义不只是“科普 Transformer”,而是帮助开发者建立更底层的判断力。

总结

这个项目的定位很简单:

用可视化的方式,帮助开发者更直观地理解 Transformer 的内部工作流程。

它不替代论文,也不替代系统学习,但非常适合用来建立直觉。

如果你正在学习大模型、Transformer、RAG 或 Agent 开发,可以打开体验一下:

wangzi6224.github.io/transformer…

也可以看项目源码:

github.com/wangzi6224/…

后面我也会继续围绕 AI 应用开发、Agent 工程化、上下文工程这些方向做一些整理。