Skip to content

底层数学概念速查(零基础版)

这份文档假设你只记得初中数学——函数、坐标系、百分比、平均数。其他所有概念从零讲起,用生活中的例子建立直觉。

碰到看不懂的公式或术语,Ctrl+F 搜。不需要从头读。


目录

  1. 热身:数字、列表、函数
  2. 向量:把一堆数字捆在一起
  3. 对数(log)和指数(e^x):换个角度看数字
  4. 概率:用数字量化"可能性"
  5. 熵:量化"不确定性"
  6. 交叉熵:比较"预测"和"现实"的差距
  7. Softmax:把任意数字变成概率
  8. Sigmoid:把任意数字压到 0 到 1 之间
  9. 梯度:往哪个方向走能让结果变好?
  10. 矩阵:一张二维数字表
  11. 矩阵乘法:用表格做变换
  12. 秩:表格里有多少"真正独立"的信息
  13. KL 散度:两个概率分布"有多不像"
  14. 附录:概念速查表

热身:数字、列表、函数

单个数字 → 一组数字 → 叫得出名字的数字组

单个数字:  42
一组数字:  [3, 7, 2, 9, 1]
带标签的:  {"温度": 25, "湿度": 0.6, "风速": 12}

LLM 里到处都是"一组数字"(向量)。比如一个词被表示成 4096 个数字,每个数字描述这个词的某个侧面——可以理解为一个超长的"特征列表"。

函数:一台数字加工机

函数就是喂一个数进去,吐一个数出来的机器。比如:

f(x) = x + 5      →  喂 3 → 吐 8
f(x) = x²         →  喂 4 → 吐 16
f(x) = "x 的个位数"  →  喂 37 → 吐 7

LLM 内部的每一步计算都可以看作是一个函数:输入一组数字,输出另一组数字。


向量:把一堆数字捆在一起

从菜市场讲起

你买水果:

  • 苹果 3 斤,香蕉 2 斤,橘子 5 斤
  • 记成 [3, 2, 5] ——这就是一个三维向量

下周买了不同的量:

  • 苹果 1 斤,香蕉 4 斤,橘子 2 斤
  • 记成 [1, 4, 2]

两个向量"像不像"?

直觉上,[3, 2, 5][1, 4, 2] 哪个更像 [3, 3, 6]?这就需要一种衡量方法。

方法一:对应位置相乘再相加(点积)

45 > 21,所以 [3, 2, 5][3, 3, 6] 更"像"。

直观理解:如果两个人买水果的斤两差不多,点积就大;差很多,点积就小。这就是 Attention 里用点积算"相关度"的原因——两个词的"特征列表"越相似,点积越大,越值得关注对方。

方法二:空间距离(欧氏距离)

把向量想象成地图上的两个点。欧氏距离就是两点之间的直线距离:

方法三:夹角大小(余弦相似度)

不看绝对大小,只看"方向"。[3, 2, 5][6, 4, 10] 方向完全相同(后者是前者的 2 倍),余弦相似度 = 1.0。

其中 (向量的长度)。分子是点积,分母是两者长度的乘积——所以只看方向不看大小。长度为 1 的向量(单位向量)之间,余弦相似度 = 点积。

RAG 检索时用余弦相似度而非欧氏距离,因为两个文本块可能"在说同一件事但篇幅差很多"——余弦只看语义方向,不看文本长度。

详细对比见第二阶段第二站的"余弦相似度与欧氏距离"小节。


对数(log)和指数(e^x):换个角度看数字

先忘掉公式,用直觉理解

指数与对数曲线

指数):把小差异放大。

e^1 ≈ 2.72
e^2 ≈ 7.39   ← 只差了 1,结果翻了近 3 倍
e^3 ≈ 20.09  ← 再差 1,又翻了近 3 倍
e^5 ≈ 148.41 ← 差 2,结果差了 20 倍

指数函数的特点是"越大的数,增长越猛"。这就像一个评分系统:考 90 分和 91 分只差 1 分,但 e^91 和 e^90 的差距比 91-90=1 大得多。指数会"奖励"高分选手。

对数):指数的逆运算。把放大的数字缩回去。

ln(2.72) ≈ 1
ln(7.39) ≈ 2
ln(20.09) ≈ 3
ln(148.41) ≈ 5

对数的特点:数字越大,增长越慢。ln(100) ≈ 4.6,ln(1000) ≈ 6.9,ln(10000) ≈ 9.2。每翻 10 倍,ln 只加约 2.3。

对数在 AI 里干什么?

交叉熵损失(第三阶段详讲)的核心就是 ,其中 是模型认为正确答案的概率。

p = 0.95 → -ln(0.95) ≈ 0.051  (模型很确定,惩罚很小)
p = 0.50 → -ln(0.50) ≈ 0.693  (模型不太确定,中等惩罚)
p = 0.01 → -ln(0.01) ≈ 4.605  (模型几乎猜错,重罚!)

注意:概率从 0.01 变成 0.1(差了 0.09),损失从 4.6 降到 2.3(降了 2.3)。概率从 0.9 变成 0.99(也差了 0.09),损失只从 0.105 降到 0.01(降了 0.095)。对数会让"差生"进步时奖励很大,"优等生"的小改进奖励很小——这恰恰是训练模型需要的行为。

那 e 是什么?

e ≈ 2.71828...,和 π 一样是一个到处出现的"自然常数"。你不用记它的值,只需要知道:

  • 永远为正(保证了概率非负)
  • 的增长率等于它自己(计算方便)
  • 对数 默认以 e 为底(所以才和 互为逆运算)

日常类比:地震里氏震级就是对数尺度。6 级比 5 级能量大 32 倍(不是 1.2 倍),因为对数把"倍数"映射成"加法"。AI 里用对数也是类似思路——把乘法变成加法,计算好处理。


概率:用数字量化"可能性"

基本规则

概率是一个 0 到 1 之间的数字:

  • 0 = 绝对不可能
  • 0.5 = 一半可能
  • 1 = 铁定发生

所有可能的事件的概率加起来必须等于 1。比如掷骰子,6 个面各 1/6,加起来 = 1。

概率分布

概率分布 = "把所有可能结果及其概率列出来"。

公平骰子: [1/6, 1/6, 1/6, 1/6, 1/6, 1/6]  ← 均匀分布
灌铅骰子: [0.5, 0.1, 0.1, 0.1, 0.1, 0.1]  ← "6"的概率最大

LLM 每次预测下一个词,就是在输出一个概率分布——词表里每个词被认为是下一词的概率。

条件概率

(事件B | 前面发生了A) = "在 A 已经发生的前提下,B 发生的概率"

LLM 的整个工作原理就是条件概率:

比如:P("狗" | "我家养了一只") 应该比 P("狗" | "公园里有只") 更确定——因为上文不同,概率就不同。


熵:量化"不确定性"

一句话

熵 = 一个系统有多"不确定"。越不确定,熵越高。

例子

熵的直观对比

情况 A:明天 100% 会下雨          → 熵 = 0    (完全确定)
情况 B:50% 下雨,50% 不下雨       → 熵 = 中等 (有点不确定)
情况 C:10 种天气各 10% 概率       → 熵 = 很高 (完全不知道明天啥天)

计算公式

用情况 B 算一遍(50% 下雨,50% 不下雨):

自然语言的固有熵大约在 2-3 之间——同一个上文可以自然接多种不同的下文。所以即使"完美"模型,困惑度(PPL)也做不到 1.0。

为什么叫"熵"?

这个词从热力学借来的。一盒气体分子杂乱无章地运动 → 高熵。所有分子整齐排列 → 低熵。信息论借了这个概念:信息越混乱不确定,熵越高。


交叉熵:比较"预测"和"现实"的差距

一句话

交叉熵 = 用你的预测去描述真实情况会"浪费"多少信息。

计算走读

假设真实情况是"答案是狗"(100% 概率给狗),你的模型预测:

模型的预测 Q = [猫: 0.1, 狗: 0.6, 鱼: 0.2, 鸟: 0.1]
真实情况 P   = [猫: 0.0, 狗: 1.0, 鱼: 0.0, 鸟: 0.0]

交叉熵 = 对每种情况,用真实的概率 × (预测的概率),再求和。但因为真实情况只有狗是 1,其他都是 0,所以:

如果模型预测狗的概率是 0.95:交叉熵 = (好得多!) 如果模型预测狗的概率是 0.01:交叉熵 = (巨差!)

和熵的关系

交叉熵 ≥ 熵(真实分布的熵)。差的越多,模型越不准。

如果交叉熵 = 熵 → 模型预测 = 真实分布 → 模型完美。


Softmax:把任意数字变成概率

问题

模型输出了一组数字,比如 [2, 3, 1, -1],怎么把它们变成概率?直接每个除以总和?不行——有负数(-1),除完还是负数,"概率为负"没意义。

Softmax 的做法

Softmax 变换对比

分两步:

第 1 步:每个数取 e 的次方(消除负数、放大差异)

[2, 3, 1, -1]
  ↓ 取 e^x
[e², e³, e¹, e⁻¹]
= [7.39, 20.09, 2.72, 0.37]

第 2 步:每个除以总和(保证加起来等于 1)

总和 = 7.39 + 20.09 + 2.72 + 0.37 = 30.57

[7.39/30.57, 20.09/30.57, 2.72/30.57, 0.37/30.57]
= [0.24, 0.66, 0.09, 0.01]

现在四个数都是正数,加起来等于 1——合法的概率分布!原来的 3 变成了概率 0.66,原来的 2 变成了 0.24——"赢家通吃"效应让最大的数获得不成比例的高概率。

为什么不直接按比例分配?

如果不用 e^x,直接除总和:

[2, 3, 1, -1] → 总和 = 5 → [0.4, 0.6, 0.2, -0.2]  ← 有负数!

用 e^x 之后再除就全是正数了。

Temperature:控制 Softmax 的"尖锐度"

第四阶段讲到 API 的 temperature 参数,它的数学本质就是在 Softmax 的 之前先除以一个数 T:

用上面的例子 [2, 3, 1, -1] 来看不同 T 的效果:

T 值效果各选项概率
T=0.3扩大差异,赢家通吃[0.03, 0.96, 0.01, 0.00]
T=1.0标准 Softmax[0.24, 0.66, 0.09, 0.01]
T=2.0拉平差异,人人有机会[0.29, 0.43, 0.17, 0.11]

直觉:T < 1 时,分数差距被放大,最高分的那个几乎独占概率 → 输出确定性强。T > 1 时,分数差距被缩小,低分选项也有了可观概率 → 输出更多样、更随机。T=0 是极端情况:所有概率全给最高分的那一个(完全确定)。


Sigmoid:把任意数字压到 0 到 1 之间

一句话

Sigmoid 是 Softmax 的"二选一"版本——只有两个选项时。

Sigmoid S曲线

数值走一遍

x = -5  →  σ(-5) = 1/(1 + e⁵) = 1/(1 + 148.4) ≈ 0.007  ≈ 0
x = -2  →  σ(-2) = 1/(1 + e²) = 1/(1 + 7.39) ≈ 0.12
x =  0  →  σ( 0) = 1/(1 + 1) = 0.5
x =  2  →  σ( 2) = 1/(1 + e⁻²) = 1/(1 + 0.135) ≈ 0.88
x =  5  →  σ( 5) = 1/(1 + e⁻⁵) ≈ 0.993 ≈ 1

特点:

  • 输入很大 → 输出接近 1("门开着")
  • 输入很小 → 输出接近 0("门关着")
  • 输入是 0 → 输出 0.5("半开半闭")

在 AI 里,Sigmoid 常用作"门控"——分数差距大时门打开(信号通过),差距小时门关着。


梯度:往哪个方向走能让结果变好?

用爬山类比

梯度下降示意图

你在浓雾中站在一座山上,想去山脚。你看不到全景,只能感受到脚下地面的倾斜方向。你往最陡的下坡方向迈一小步,停下来重新感受坡度,再迈一小步……重复无数次,最终到达山脚。

这就是梯度下降:

  • 损失函数 = 山的高度(越低越好)
  • 梯度 = 脚底下的坡度(往哪个方向走高度下降最快)
  • 学习率 = 每一步迈多大

不用微积分怎么理解"梯度"?

假设你只有一个旋钮可以调(比如学习率),你想知道往哪个方向转能让误差变小。

做法:把旋钮往右转一丁点,看误差变大还是变小。

  • 误差变大 → 旋钮应该往左转
  • 误差变小 → 旋钮应该往右转

梯度就是把这个思路推广到几亿个旋钮同时调整。每个旋钮都有一个"往左还是往右"的建议。所有建议组成的列表就是梯度

更新公式(人话版)

新参数值 = 旧参数值 - 学习率 × 梯度
  • 梯度告诉你"往哪个方向调整"
  • 学习率告诉你"这一步迈多大"
  • 负号是因为梯度指向"上升"方向,我们要"下降"

矩阵:一张二维数字表

就是 Excel 表格

列表 [3, 7, 2] 是一维的。矩阵就是多行多列的数字表:

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

这是一个 3 行 3 列的矩阵。一般描述成 3×3。

LLM 里的权重矩阵就是这样的表格。比如一个 4096×4096 的权重矩阵,就是 4096 行、4096 列的巨型数字表,共有 4096×4096 ≈ 1678 万个数字。每个数字都是训练过程中"学到的"参数。

转置

把行和列互换:

原矩阵:          转置后:
[1, 2, 3]        [1, 4, 7]
[4, 5, 6]   →    [2, 5, 8]
[7, 8, 9]        [3, 6, 9]

行变列,列变行。记作


矩阵乘法:用表格做变换

怎么算:行 × 列

矩阵乘法可视化

矩阵乘法就是:第一个矩阵的每一行,和第二个矩阵的每一列,做点积(对应位置相乘再相加)。

    [a, b, c]
[1, 2, 3]  ×  [d, e, f]  =  [1×a+2×d+3×g, 1×b+2×e+3×h, 1×c+2×f+3×i]
    [g, h, i]

第一行和第一列点积 → 放(1,1)位置
第一行和第二列点积 → 放(1,2)位置
第一行和第三列点积 → 放(1,3)位置

为什么要做矩阵乘法?

在 LLM 里,输入是一个向量 [x1, x2, ..., xn](一行),权重是一个矩阵 (一个数字表)。做乘法后得到一个新向量:

输入向量 × 权重矩阵 = 输出向量
[1×n]   ×   [n×m]   =  [1×m]

这相当于对输入做了"变换"——旋转、拉伸、投影到另一个空间。矩阵里的数字决定了变换的具体方式,这些数字就是在训练中学到的。


秩:表格里有多少"真正独立"的信息

用数学考试理解

三个学生参加三场不同难度的数学考试——简单卷、中等卷、困难卷。成绩如下:

        简单卷  中等卷  困难卷
学生甲     95      80      65
学生乙     80      65      50
学生丙     65      50      35

观察规律:不管哪个学生,中等卷 = 简单卷 − 15,困难卷 = 简单卷 − 30(或者说每升一档难度,分数掉 15 分)。三场考试的成绩完全由"这个学生数学好不好"这一个因素决定——知道某人的简单卷分数,剩下两场自动确定。三列数据看似三种信息,其实只有一种。

这个矩阵的 秩 = 1

这很符合直觉:三场考的都是数学,只是难度不同。难度对所有人都产生相同的分差,不提供关于学生能力的任何额外信息。

再看另一份数据——这次考了两项独立能力,再加一个总分:

        数学能力  做题速度  综合评分
学生甲      95       70      165
学生乙      80       85      165
学生丙      65      100      165

数学能力和做题速度彼此独立(数学好不一定做得快)。但综合评分 = 数学能力 + 做题速度——第三列完全由前两列相加得到,不提供新信息。这个矩阵的 秩 = 2

一句话:秩 = 表格里真正独立、无法被其他列拼出来的列数

在 AI 里的意义

LLM 的权重矩阵理论上有 4096 列。但很多列之间存在类似"配方 F = D + E"的关系——不是数学上完全相等,而是高度相关、近似冗余。真正独立的信息维度远小于 4096。

这就是 LoRA(低秩适配)能工作的根本原因:微调时不需要修改全部 4096 维,只在一个很小的"瓶颈"(比如 16 维)里调整,就能覆盖大部分有效改动——因为权重矩阵的"独立配方"本来就只有那么多。


KL 散度:两个概率分布"有多不像"

一句话

KL 散度 = 如果用分布 A 来近似分布 B,会比直接知道 B 多费多少"信息"。

数值例子

真实分布 B:明天天气 [雨: 0.8, 晴: 0.2]

你的预测 A:[雨: 0.6, 晴: 0.4](不太准)

如果预测完全准(A=B):每项都是 ,总 KL = 0。 预测越不准,KL 散度越大。

在 RLHF 里的作用

PPO 训练时,KL 散度用来保证"新模型不能和 SFT 模型差太远"。如果新模型输出的概率分布和原来一样,KL=0,不扣分;如果差很多,KL 大,从奖励分里扣掉。——就像一个"别乱来"的约束带。


附录:概念速查表

你看到的中文名一句话解释出现在哪里
向量 vector向量一组有序的数字第二阶段·Embedding
点积 dot product点积对应位置相乘再相加,衡量"像不像"第二阶段·Attention
Softmax把任意数字变成和为 1 的概率第二阶段·Attention 权重
Temperature温度参数Softmax 前除以 T,控制输出"尖锐度"第四阶段·API 参数
Sigmoid S 型函数把任意数字压到 0~1 之间第三阶段·奖励模型
对数 自然对数把大差距变成小差距的函数第三阶段·交叉熵
指数 指数函数把小差距变成大差距的函数第三阶段·困惑度
概率分布概率分布所有可能结果的概率列表第三阶段·交叉熵
熵 entropy信息熵一个系统有多"不确定"第三阶段·困惑度
交叉熵 cross-entropy交叉熵预测和现实的差距有多大第三阶段·损失函数
PPL困惑度模型平均在几个选项中纠结第三阶段·评估指标
梯度 gradient梯度"往哪走能改善结果"的方向第三阶段·训练
学习率 lr学习率每一步调整的幅度第三阶段·优化器
矩阵 matrix矩阵二维数字表第二阶段·Q/K/V 权重
矩阵乘法矩阵乘法行×列做点积第二阶段·Attention 计算
秩 rank矩阵的秩表格里真正独立的信息量第三阶段·LoRA
KL 散度KL 散度两个概率分布有多不像第三阶段·PPO 约束

Released under the MIT License.