配套视频
YouTube · StatQuest · 统计与机器学习 —— 贝叶斯、分布、最大似然都有单集,B 站搜「StatQuest」有搬运
可汗学院 · 可汗学院 · 概率与统计(中文) —— 条件概率、贝叶斯定理、期望方差讲得最细
讲义 · 斯坦福 CS229 · 概率论复习讲义(PDF) —— 和线代讲义配套,覆盖随机变量与常见分布
⭐ 重点
大模型的本质是概率模型:它输出的不是"答案",而是"下一个词的概率分布"
条件概率 P(A|B):给定上下文 B,下一个词是 A 的概率——这就是语言模型的定义
最大似然估计(MLE):训练目标"让真实数据的概率最大",推导到最后就是交叉熵损失
temperature / top-p:都是在"概率分布"上做文章,理解了分布就理解了采样参数
期望与方差:方差分析解释了为什么注意力要除以 \sqrt{ \mathrm{d} }
3.1 语言模型 = 条件概率的乘积
一个语言模型做的事,用一句话说就是:给定前面的词,预测下一个词的概率分布。
语言模型的定义
也就是说:一句话的概率 = 每个位置"预测下一个词"概率的连乘。这就是自回归生成的全部数学。
3.2 条件概率与贝叶斯公式
条件概率
(B 发生的前提下,A 发生的概率)
贝叶斯公式
后验 = 似然 × 先验 / 证据
💡 一句话理解:P(A|B) 和 P(B|A) 完全不是一回事。"下雨 → 地面湿"概率很高,但"地面湿 → 下雨"概率不高(可能是洒水车)。在大模型里,这个区别体现为:我们要建模的是 P(下一个词 | 上下文),而不是反过来。
3.3 三个必须认识的分布
3.4 期望与方差
定义
(期望 = 加权平均;方差 = 波动程度)
💎 方差的两条关键性质(后面推 \sqrt{ \mathrm{d} } 要用):
① 独立变量和的方差 = 方差的和:Var(X + Y) = Var(X) + Var(Y)(X、Y 独立) ② 常数倍的方差 = 常数平方倍:Var(cX) = c² Var(X)
3.5 最大似然估计:训练目标从哪来
模型参数 θ 该怎么学?最大似然的思想很朴素:让"训练数据出现的概率"尽可能大。
第 1 步 · 写出似然函数(假设样本独立)
第 2 步 · 取对数(连乘变连加,避免数值下溢)
第 3 步 · 取负号,变成"最小化"问题
第 4 步 · 关键发现:这就是负对数似然(NLL)——也正是一个样本上的交叉熵!
⭐ 结论(必须记住):对固定训练数据的 categorical 条件分布,最大化似然等价于最小化负对数似然,也就是经验交叉熵:把数据看作来自固定分布 p 时,最小化 H(p,q) 又等价于最小化正向 KL:D_KL(p‖q)。
这些等价关系依赖"目标与分布固定"等条件。交叉熵是自回归预训练的自然选择,但现代训练还可能加入正则项、辅助损失或偏好优化目标。
3.6 temperature 与 top-p:在分布上做手脚
模型输出 logits(未归一化的分数),先除以 temperature 再 softmax:
带温度的 softmax
top-p(核采样):先把词按概率从大到小排序,累加到累计概率超过 p(如 0.9)就截断,只在这个"核"里采样。这样能砍掉长尾里的垃圾词,又保留多样性。
代码:亲手观察 temperature 如何改变分布
import numpy as np
# 假设模型对下一个词给出了 5 个候选的 logits
logits = np.array([3.0, 2.0, 1.0, 0.5, 0.1])
words = ["好", "不错", "棒", "可以", "还行"]
def softmax(z, T=1.0):
z = z / T
e = np.exp(z - z.max()) # 减去 max 防止溢出(工程惯例)
return e / e.sum()
for T in [0.2, 1.0, 2.0]:
p = softmax(logits, T)
dist = " ".join(f"{w}={pi:.3f}" for w, pi in zip(words, p))
print(f"T={T}: {dist}")
# T=0.2: 好=0.993 不错=0.007 棒=0.000 ... ← 几乎只选"好"
# T=1.0: 好=0.610 不错=0.224 棒=0.083 ... ← 原始分布
# T=2.0: 好=0.401 不错=0.243 棒=0.147 ... ← 明显被压平
# 结论:T 越小越确定,T 越大越随机。本质是在调整分布的"熵"。
评论区