在正式深入Transformer的奥秘之前,我们先花点时间搞定一些必不可少的数学概念。别担心,我会用最直白的方式把它们讲清楚,确保你没有任何基础也能跟上。

第一部分:数学基础铺垫
向量、矩阵、张量
什么是向量?
简单来说,向量就是一组数字排成一排。我们可以把它想象成一张“特征身份证”。
比方说,你想描述一个人:身高175cm,体重70kg,年龄25岁。把这些数字排成一排:[175, 70, 25],这就构成了一个向量。向量里的数字个数就是它的“维度”,所以这是一个3维向量。
为什么计算机非得用向量?因为计算机不认识“苹果”或“快乐”这种文字,它只认数字。向量,本质上就是把文字“翻译”成计算机能理解的语言。它就像一张特征身份证,把复杂的世界用数字的形式记录下来。
向量的维度:向量中有多少个数字,就是多少维。[175, 70, 25] 是 3 维向量。
为什么计算机需要向量? 因为计算机不认识"苹果"、"快乐"这样的文字,但它认识数字!向量就是把文字"翻译"成数字的方式。
什么是矩阵?
矩阵就是把多个向量堆叠在一起,形成一个数字表格。你可以直接把它想象成Excel表格。
比如,我们有三个人的信息:
身高体重年龄
小明 → [175,70,25]
小红 → [165,55,23]
小刚 → [180,85,30]
这就构成了一个3行3列的矩阵,它的形状用 (行数, 列数) 表示,也就是 (3, 3)。再举个例子,GPT-2的词汇嵌入矩阵是 (50257, 768),这意味着它有50257个词,每个词用一个768维的向量来表示。
什么是张量?
张量是更广义的数据容器,是向量和矩阵的“高阶版”。
- 一个单独的数字(比如
5),是标量,也是0维张量。 - 一排数字(比如
[1,2,3]),是向量,也是1维张量。 - 一个表格(上面的例子),是矩阵,也是2维张量。
- 一叠表格,就变成了3维张量。
用书来打个比方就很好理解了:一个字是标量,一行字是向量,一页纸是矩阵,整本书就是3维张量。这就是理解AI数据流动的基础框架。
矩阵运算
1. 矩阵转置
转置的操作很简单,就是把矩阵“翻转”一下,原来的行变成列,原来的列变成行。
原矩阵 A: 转置后 Aᵀ:
┌─────────┐ ┌─────────┐
│ 1 2 3 │ │ 1 4 │
│ 4 5 6 │ → │ 2 5 │
└─────────┘ │ 3 6 │
(2×3) └─────────┘
(3×2)
记忆技巧:想象沿着对角线折叠纸张。它在Transformer中很关键,因为计算注意力分数时,Query矩阵需要和Key矩阵的转置相乘。
2. 矩阵乘法
矩阵乘法是整个Transformer的核心运算,没有之一。
规则:行 × 列,逐个相乘再相加。
A (2×3) B (3×2) C = A × B (2×2)
┌─────────┐ ┌───────┐ ┌─────────┐
│ 1 2 3 │×│ 7 8 │=│ 58 64 │
│ 4 5 6 │ │ 9 10 │ │ 139 154 │
└─────────┘ │ 11 12 │ └─────────┘
└───────┘
计算过程(以 C[0,0] = 58 为例):
C[0,0] = 1×7 + 2×9 + 3×11 = 7 + 18 + 33 = 58
↑ ↑ ↑
A第1行的每个元素 × B第1列的对应元素,再相加
形状规则:两个矩阵相乘,第一个矩阵的列数必须等于第二个矩阵的行数。也就是说,形状为 (m, n) 的矩阵只能与形状为 (n, p) 的矩阵相乘,结果形状是 (m, p)。
3. 点积
点积可以看作是向量的“相似度计算器”。把两个向量对应位置的数字相乘,然后再把所有的乘积加起来,就是点积。
向量 A = [1, 2, 3]
向量 B = [4, 5, 6]
点积 = 1×4 + 2×5 + 3×6 = 4 + 10 + 18 = 32
它的几何意义更直观:结果反映了两个向量的方向是否一致。角度为0(完全同向),点积最大;角度为90度(垂直),点积为0;角度为180度(完全反向),点积为负的最大值。
在Transformer注意力中,Query向量和Key向量做点积,分数越高,就表示这两个词越“相关”。比如“她”的Query和“小红”的Key点积很大,说明“她”很可能指的就是“小红”。
4. 缩放
你可能会问,为什么注意力公式里要除以 √d?
问题:点积结果可能变得很大。 假设我们处理的是768维的向量,每个元素值落在[-1, 1]之间。768个这样的数相乘后再相加,结果可能大到离谱(比如±100)。这么大的数字扔给softmax函数,会把它“压扁”成极端值,要么接近0,要么接近1,模型根本没法好好学习了。
解决:除以 √768 ≈ 27.7。 经过缩放,数值范围会变得温和很多,softmax的输出也更平滑,模型训练起来也更稳定。这就好比,我们不想用测量火山熔岩的温度计去量室温,我们需要一个更合适的量程。
归一化
为什么需要归一化?
归一化的目的是让数据保持在合理的范围内,帮助模型稳定训练。想象一下,你同时测量年龄(25-35岁)和收入(5万-8万),收入的数值比年龄大几千倍。模型可能会错误地认为收入这个特征“更重要”,但这只是单位不同造成的假象。
层归一化
Transformer使用层归一化,它是对每一层的所有神经元数据进行标准化。过程很简单:先算均值和方差,然后用每个值减去均值,再除以标准差,最后再加上两个可以学习的参数γ和β进行缩放和偏移,让模型自己决定最好的数据分布。
归一化前:[100, 200, -50, 0, 300] ← 数值范围大,不稳定
归一化后:[-0.2, 0.5, -1.1, -0.4, 1.2] ← 数值在小范围内,稳定
Softmax 函数
Softmax就像一个“概率生成器”,能把任意一组数字转换成加起来为1的概率分布。
它的公式很简单:先对每个输入数字求e的幂次,然后用每个幂次除以所有幂次的总和。这样一来,大的数字会变得更大,小的数字变得更小,而且所有输出都在0到1之间,并且总和为1。
输入分数:[2.0, 1.0, 0.1]
e^2.0 = 7.39, e^1.0 = 2.72, e^0.1 = 1.11
总和 = 11.22
输出概率:[7.39/11.22, 2.72/11.22, 1.11/11.22] = [0.66, 0.24, 0.10]
↑ 总和 = 1(这就是概率分布!)
温度对Softmax的影响:我们还可以通过一个“温度”参数T来控制概率分布的“锐利”程度。温度越低,模型越倾向于选择概率最大的那个答案(更确定);温度越高,各个选项的概率分布就越平均(更随机、更有创意)。
残差连接
残差连接是一个天才的想法。它的公式简单到难以置信:输出 = 层的输出 + 原始输入。
为什么需要它? 深度学习网络层数一深,就容易出现“梯度消失”问题。就像传话游戏,信息每传一个人就损失一点,传到第12个人时,原始信息可能已经完全失真了。残差连接就像是给每个人配了一条“直通热线”,即使中间传话有损失,原始信息也能直接传递到后面,保证了深度网络的训练可行性。
激活函数:GELU
激活函数是为了给神经网络引入“非线性”。如果没有它,无论堆叠多少层,网络本质上都只能学习线性关系,这显然无法应对现实世界的复杂问题。
Transformer使用的是GELU,而不是传统的ReLU。ReLU是“非0即1”的硬转折,在0点处有个“尖角”。而GELU是一条平滑的曲线,可以理解为一种“概率性门控”:对于很大的正数,几乎100%让它通过;对于很小的负数,几乎100%把它卡住;对于接近0的值,则“模棱两可”,部分通过。这种平滑的特性让模型训练起来更稳定高效。
第二部分:语言模型基础概念
什么是Token?
Token是AI处理文本的最小单位。它可以是一个完整的词,也可以是词的一部分。比如“I love programming”可能会被分成 ["I", "love", "program", "ming"]。这样做的好处是,可以用更少的基础“积木”拼出更多的词,避免词汇表过于庞大。GPT-2的词汇表就有50257块这样的“乐高积木”。中文也是如此,“数据可视化”可能会被切成 ["数据", "可视", "化"]。
什么是嵌入向量?
嵌入向量是将文字转化为数字的“魔法”,它的核心思想是:让意思相近的词,在数字空间里也相互靠近。在二维平面中,苹果和橙子都处于“水果”区域,距离很近;而西兰花和白菜则处于“蔬菜”区域。GPT-2将每个词嵌入到一个768维的向量里,虽然人类无法想象768维空间,但对计算机来说,这只是常规操作。
第三部分:Transformer 架构详解
好了,数学和概念铺垫完毕,我们来揭晓Transformer的核心工作原理!
Transformer 的目标
它的核心任务听起来很简单:预测下一个词。输入“今天天气真”,它就会计算输出“好”(概率85%)、“糟”(概率10%)等。本质上,它和猜朋友下一句话要说什么的智力游戏是一样的。
三大核心组件
整个结构可以看成三个部分:先是嵌入层,把文字变成数字;然后是12层Transformer Block(核心理解层);最后是输出层,预测下一个词。
嵌入层
嵌入层的工作分四步:
- 分词: 把句子切成Token。
- Token嵌入: 通过一个巨大的矩阵查表,把每个Token变成对应的768维向量(矩阵乘法)。
- 位置编码: 给每个位置加上独一无二的“位置信息”。因为“我爱你”和“你爱我”的词完全一样,但意思完全不同,模型需要知道词的先后顺序。
- 最终嵌入: 把Token嵌入和位置编码加起来,得到最终的输入向量。
注意力机制详解
这是Transformer最核心的发明。
注意力机制—— “谁跟谁相关?” 它的目标是让每个词都能“看到”句子中的其他词,并理解它们之间的关系。比如“小明把苹果给了小红,她很开心”,当读到“她”时,注意力机制会计算“她”与“小明”、“苹果”、“小红”的相关度,发现“小红”最相关(80%),从而判断“她”指代的是“小红”。
Q、K、V是什么? 我们可以用搜索引擎来完美类比:
- Query (Q): 你在搜索框里输入的内容(“我想找什么?”)
- Key (K): 每个网页的标题(“我是什么内容?”)
- Value (V): 网页的实际内容(“我包含什么具体信息?”)
注意力计算过程就是:Q与所有K做匹配(点积),得到注意力分数,分数越高,说明两者越相关。然后用这个分数作为权重,去加权求和所有V,最终得到输出。分数越高的V,在输出中所占的份额就越大。
完整计算过程: 1. 对输入矩阵做线性变换,得到Q、K、V三个矩阵。 2. 计算Q和Kᵀ的矩阵乘积,得到注意力分数矩阵。 3. 为了不让模型“偷看”未来的词,需要加上一个掩码矩阵,把未来位置的值设为负无穷。 4. 用Softmax将所有分数归一化为概率。 5. 将概率矩阵与V矩阵相乘,得到加权后的输出。
多头注意力
为什么需要“多头”?因为一个头只能从一个角度看问题。多头注意力就像同时请了12个专家,从不同角度分析同一段话:有的关注语法关系,有的关注语义关系,有的关注位置关系。最后大家把意见汇总起来,形成一个更全面、更深刻的理解。
实现上很简单,就是把768维的Q、K、V矩阵切分成12份,每份64维,分给12个“头”各自计算注意力,最后把所有头的输出拼接起来,再经过一次线性变换融合。
MLP 层
MLP层是对每个词进行独立的“深度加工”。它会先把词向量的维度从768扩展到3072(扩大4倍),做一次头脑风暴,然后再压缩回768维。这个过程就像写作文:先把所有想法都写下来,再提炼出最精华的观点。
输出层
经过12层Transformer Block处理后,模型取出最后一个Token的输出向量,做一次线性变换,映射到词汇表的大小(50257个分数)。然后通过Softmax转换成概率,最后根据温度、Top-k、Top-p等策略采样,生成下一个词。
第四部分:采样策略
Temperature(温度) 温度控制着输出的“随机性”或“创造性”。温度越低(<1),模型越保守,倾向于选概率最高的词;温度越高(>1),模型越“天马行空”,选择更多样。
Top-k 和 Top-p 采样 这两种方法都旨在提高生成质量。Top-k是只从概率最高的前K个词里选。Top-p则是选出一个最小的候选集,使其累加概率超过设定值p(比如0.9),然后只从这个集合里选。
第五部分:总结
一路看下来,Transformer的精髓其实就是一整套层层递进的数学运算。从嵌入开始,经过12层包含注意力、MLP、残差连接的模块,最后输出概率,预测下一个词。整个过程涉及矩阵乘法、转置、点积、缩放、Softmax、归一化、残差连接以及GELU激活函数这些核心操作。
以GPT-2 (small)为例,这个模型总共有大约1.24亿个参数,正是这些精心设计的数学运算和庞大的参数,让它具备了理解和生乘人类语言的能力。
