拓展阅读

图解 Transformer

从文字、向量到一层网络,建立模型内部的直觉。

推荐阅读 01 / 12本地中文导读

对应资料:The Illustrated Transformer [S006]

沿着对象与状态理解本章

本章可以分成两种动作:同一位置内部改变特征,与不同位置之间混合信息。X乘参数表属于前者,注意力份额乘V属于后者。先在下图指出“输入数据”“参数”“本次结果”,再读多层公式,避免把W与Q/K/V当成同一种东西。

下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。

动态图解 · F11

Q/K/V:先算从哪读,再算读进多少

Query、Key、Value各自是什么数,为什么分三条路径?

计算某个位置的新表示时,它是接收者;所有可见位置都是潜在信息提供者。Query与Key决定各提供者的读取份额,Value提供实际被混合的数。可以借“提问—匹配—取内容”记住分工,但Q不是自然语言问题,K不是数据库主键,V不是正确答案。

X本次进入注意力的数值表示;不等于Token编号。
Wq/Wk/Wv已给定的三张投影参数表。
Q/K/VX经三张表计算后的三份中间表示。
读取份额本轮通过softmax算出的权重,区别于参数W里的权重。

输入与适用条件:沿用F11正文的独立两位置算例:X=[[1,1],[1,−1]]。本图省略偏置、RoPE、归一化和多头。所有Q/K/V和输出都由配套程序计算。

1 / 5 · 同一输入,三条参数路径

第1步,共5步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

Q/K/V:先算从哪读,再算读进多少:同一输入,三条参数路径同一个输入 X我11爱1-1参数 Wq0.50.5-0.50.5参数 Wk0.50.50.5-0.5参数 Wv5105-10生成 Q生成 K生成 V

先不打分。两行输入分别代表“我”和“爱”;Wq、Wk、Wv是三张乘法系数表。它们不是另外三份文字。

本步状态由图形与说明共同给出。

默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。

为什么需要

让匹配特征与被传递内容分开学习,给模型不同的变换能力。

怎样实现

先分别投影每行,再跨位置打分、屏蔽、softmax、混合V。

可能的代价与误解

“注意力最大”不直接证明模型最终回答的因果原因;若只有一个可见Key,softmax永远为1,不能用来展示竞争。

如何判断是否做对

核对六行投影、两项分数、份额和输出;改变Wv不应在本层直接改变由Q/K算出的份额。

从“输入一句话”到“网络中的矩阵”

本篇对应《图解Transformer》的主题,用本书自编案例建立直觉,不是原文逐句翻译。先把三个层次分开:字符串是人类输入,Token ID是离散符号,隐藏向量是网络计算使用的表示。向量维度没有预先规定的中文释义,不能把它想成一个存满事实的表格。[S006][S007]

假设教学Tokenizer把“检查路径过滤”分成三个Token,ID是7、12、3。真实Tokenizer未必如此切分,这里只为了追踪流程。查Embedding矩阵后得到三个向量,组成3×d矩阵。之后每层根据位置、上下文关系和非线性变换更新表示。

为什么“同一个词”会因上下文改变

代码里的root可以是目录根、树根,也可以是某个对象名。初始词向量提供学习到的统计起点;上下文中的函数调用、注释与类型线索影响后续表示。网络不是先查一个“root唯一意思”再固定使用,而是在多层计算中形成适合当前输入的表示。[S010][S008]

但表示能消歧,不等于模型已经执行语言解析器。真实代码中root绑定哪个变量、函数是否被调用,仍可能需要LSP、源码和运行证据。这说明底层能力与工程工具是互补关系。

一个完整层怎样工作

注意力让当前位置从其他可见位置组合信息;前馈网络对每个位置做非线性变换;残差提供跨子层的信息通路;归一化处理数值尺度。不同模型的顺序与具体组件可能不同,不能用原始2017年结构图描述所有现代模型。[S008][S009]

教学结构可以写为:

输入表示 X
  → 注意力变换 + 残差
  → 前馈变换 + 残差
  → 下一层表示

原始Transformer包含编码器和解码器。编码器可以形成源序列表示,解码器结合已生成前缀与源表示继续生成。GPT类Decoder-only模型则以因果前缀生成作为主要结构。理解两者共同组件,同时保留结构差异。[S002][S008]

为什么需要位置与因果限制

“排除A,保留B”与“保留A,排除B”使用相近词汇,但顺序改变含义。位置编码让网络获得顺序信息;因果掩码限制生成位置不能读取未来答案。位置编码不是长期记忆,掩码也不是用户权限控制,它们发生在模型内部计算层。

训练时,目标序列已知,因此可以并行计算多个位置的预测损失;生成时,下一个Token依赖前一个已选结果,通常存在串行依赖。不要把“Transformer可以并行”误解为“所有回答都是一次无依赖生成”。[S008]

用一个反例检查理解

模型看到“测试通过”四个字,不代表测试真的运行过。网络能处理这段文本,却不知道它是工具事实、用户陈述还是模型猜测,除非输入与训练行为帮助区分。工程系统必须保留来源和真实状态。

查看参考答案

练习答案:如果Agent修改后只说“应该能通过”,应记录为推测,不能升级成验证结果。底层理解告诉我们模型输出如何形成,工程验证告诉我们输出是否对应现实。

继续深入:第1章 · 模型内部 或阅读拓展阅读目录1.1的逐项讲义。所有链接均为本地内容。

运行示例 · G01

一个两位置单层Decoder,从输入一直算到词表概率

输入与条件。采用教学pre-norm Decoder:X=[[1,0],[0,2]];LayerNorm的ε=1e−5,γ=1、β=0;Wq=Wk=Wv=Wo=I;因果注意力;FFN(z)=0.5×ReLU(z);最后再LayerNorm并乘词表头 [[1,0,-1],[0,1,0.5]]。不使用RoPE和bias。

步骤与对象内部动作中间结果 / 新状态
1输入归一化逐行Norm,不跨位置约 [[0.999980,−0.999980],[−0.999995,0.999995]]。
2生成Q/K/V本例投影是单位矩阵三者都等于归一化输入;这是为方便计算而选的特例。
3算因果注意力第1位置只能看自己,第2位置可看两处第2行权重约 [0.055810,0.944190],加权输出约 [−0.888377,0.888377]。
4第一次残差把注意力输出加回原X第2位置变 [−0.888377,2.888377]。
5Norm与FFN第2位置归一化约 [−0.999999,0.999999]ReLU与0.5缩放后约 [0,0.499999],再加残差得 [−0.888377,3.388376]。
6生成分数最后Norm后乘词表头logits约 [−0.999999,0.999999,1.499998],概率约 [0.048611,0.359188,0.592201]。

把过程连起来。模型内部每一个“层名”都对应一份实际新数组。词表概率出现在最后投影之后,而不是Attention权重直接变成词。

边界与反例。全部数值来自随包程序同一条前向链,展示值经舍入;这是未训练微型结构,不是任何商业模型的架构或输出。

依据与适用范围:[SDPA]。示例输入和场景由本书明确设定。

记录保存在本机浏览器。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。