为什么 ML 是概率游戏
一个分类器看到一张图说「这是猫」,它真正在做的是输出一组概率:
LLM 生成下一个 token 也一样——给词表里每个 token 都打一个概率,再从里面采样。所有现代 ML 模型的输出本质都是一个分布,不是「答案本身」。
要训练这种模型,就必须能回答:
- 怎么衡量「这个分布有多不确定」? → 熵
- 怎么衡量「模型预测的分布和真实分布有多接近」? → 交叉熵 / KL 散度
- 怎么从数据里反推出最好的分布参数? → 最大似然估计
- 怎么把「先验信念」融合进来? → 贝叶斯 / MAP
这些量是分类、生成、强化学习几乎所有损失函数的底料。这篇把它们一个个画清楚。
分布:一个形状
把一个离散概率分布画成柱状图——每个柱子的高度就是那个事件发生的概率。这些柱子加起来必须等于 1。
骰子是均匀分布(6 个等高柱子)。一个有偏好的预测(比如「这张图大概率是猫」)是尖的(一根柱子很高,其他很矮)。
「分布」这个词听起来抽象,但几何上就只是一个形状。这个形状可以被参数控制——调参数就是在捏形状。接下来我们看几个 ML 里最常见的形状。
常见概率分布
机器学习里反复出现的分布就那么几个,每个都对应一种典型的现实场景。
伯努利分布(Bernoulli):最简单的分布,只有两个结果——「成功」和「失败」。一个参数 就够了:
一枚硬币(可能是歪的)、一封邮件是不是垃圾邮件、一个病人有没有得病——凡是「是/否」问题,底层都是伯努利。Logistic 回归输出的那个概率 ,就是一个伯努利分布的参数。
高斯分布(Gaussian / Normal):连续世界的主角。两个参数:均值 和标准差 。概率密度函数(PDF):
几何上就是一个钟形曲线: 决定钟的中心在哪, 决定钟有多宽。 越小,钟越窄越尖——「我基本确定答案就在 附近」; 越大,钟越扁越宽——「我也不太确定,答案可能在很大范围内」。
拖动滑块感受:
高斯分布为什么在 ML 里无处不在?一个原因是中心极限定理:大量独立随机变量之和趋向于高斯分布。另一个原因是它的数学性质特别好——高斯的线性变换还是高斯,高斯的条件分布还是高斯,这让很多推导有解析解。
多项式分布(Multinomial):伯努利从两个结果推广到 个结果。 个概率 ,加起来等于 1。一次实验从 个类别里选一个。
分类器输出的 softmax 向量就是一个多项式分布的参数。LLM 最后一层给词表里每个 token 打的分数,也是多项式分布。当 时,它退化回伯努利。
记住这个对应关系:模型的输出形态,决定了它背后假设的分布形态。回归假设高斯,二分类假设伯努利,多分类假设多项式。这个对应关系后面在 MLE 里会变得很重要。
期望、方差、协方差
分布是一个形状,那怎么用一个数字来总结这个形状?这就需要几个「统计量」。
期望(Expectation)就是「按概率加权的平均」:
几何上,期望是柱状图的重心——如果每个柱子是一坨质量,期望就是平衡点。如果你从分布里反复抽样、取平均,根据大数定律,这个平均值会趋近于期望。所以期望也是「长期来看,平均每次能拿到多少」。
方差(Variance)衡量分布的铺开程度——柱子离重心有多远:
方差的平方根是标准差 ,它和原变量同单位,更直观。在高斯分布里, 就是那个控制钟宽度的参数——68% 的数据落在 内,95% 落在 内。
方差在 ML 里有一个很具体的含义:偏差-方差权衡(bias-variance tradeoff)。一个模型如果方差大,说明它对训练数据过度敏感——换一批数据,学到的东西就变了。这就是过拟合的概率本质。
协方差(Covariance)衡量两个随机变量一起变化的程度:
协方差为正,说明 大时 也倾向于大(同向变动);为负则反向;为零则(线性上)无关。把 个特征两两之间的协方差排成矩阵,就得到了协方差矩阵 ——它描述了特征之间的线性依赖关系。
协方差矩阵在 ML 里反复出现:PCA 就是对它做特征分解,找到数据变化最大的方向;高斯分布的多元版本 的形状完全由协方差矩阵决定—— 的特征值控制每个主轴的伸展长度,特征向量控制主轴的朝向。
贝叶斯定理
概率论里最有用的一条定理。它回答的问题是:
我已经有一些信念(先验),现在来了新证据,我该怎么更新信念?
公式本身很简洁:
用 ML 的语言翻译:
- 先验 :在看数据之前,你对参数的信念。比如「大多数 coin 大概是公平的」。
- 似然 :给定参数,数据出现的概率。这就是「模型解释数据的能力」。
- 后验 :看了数据之后,更新后的信念。
- 证据 :所有可能参数下数据的总概率——一个归一化常数,保证后验加起来等于 1。
一句话总结:后验 ∝ 先验 × 似然。
几何直觉:想象一个面积图。整个方块代表所有可能的结果。先验把方块切成「A 发生」和「A 不发生」两块。似然把每块再切成「B 发生」和「B 不发生」的子块。后验就是在「B 发生了」的条件下,A 那块占多大比例。
经典的例子:一种病发病率 5%,检测的真阳性率 95%、假阳性率 10%。一个人检测阳性——他真的有病的概率是多少?直觉上很多人会说「95%」,但正确答案只有约 33%。这是因为先验(发病率)太低,假阳性的绝对数量反而比真阳性更多。
面积图 · 联合概率
P(病|+) = P(病) × P(+|病) / P(+)
= 5.0% × 95.0% / 14.3%
后验 P(病|+)
33.3%
即使检测阳性,由于先验很低,健康的可能性仍然更大——这就是「基础概率谬误」。
贝叶斯定理在 ML 里的地位:它是贝叶斯学派整个框架的基石。和它对应的是频率学派——后者认为参数是固定的未知数,用 MLE 去估计就够了。两种视角各有千秋,我们马上就会看到。
熵:意外的平均
一个事件的「意外感」(self-information)就是:
概率越小,意外越大。 「明天太阳升起」, bit,一点不意外;「今天 GPT-7 发布」, bit,信息量大。底数取 2 让单位就是熟悉的 bit。
把意外按概率加权平均,就是分布的熵:
直觉一句话:熵 = 平均每次抽样,你需要花多少 bit 才能描述结果。
- 均匀分布 → 完全猜不准 → 熵最大(N 个等概率事件,熵 = )。
- 一点冲突都没有(某事件概率 1)→ 闭着眼都能猜中 → 熵 = 0。
拖滑块感受:
熵 H(P)
2.10 bit
最大值 = log₂6 ≈ 2.58 bit(完全均匀时)
几乎能猜中 → 熵很低
熵是信息论的「主角色」。它不是抽象的——Shannon 在 1948 年证明, 就是用最优编码压缩这个分布的样本所需的平均比特数。换句话说,熵给出了「这个分布最少需要多少存储空间」的下界。
交叉熵:用 Q 描述 P
现在场景换一下:
真实分布是 ,但我们手上只有一个估计的分布 (模型的预测)。如果用为 设计的编码去压缩 的样本,平均每次要花多少 bit?
答案就是交叉熵:
- 如果 ,——最优情况,等于真分布的熵。
- 如果 ,——你用了错的编码,被惩罚了多余的 bit。
- 永远 ≥ (这就是著名的 Gibbs 不等式)。
这就是为什么 ML 里分类的损失函数就是交叉熵:
真实标签是 one-hot,比如「猫」对应 。这时:
「最小化交叉熵」就翻译成了一句话:让模型预测真实类别的概率尽量大。LLM 训练里的 next-token loss 也是同一个公式,只是「类别」从「猫狗鸟鱼」换成了「词表里的几万个 token」。
试试调一下模型分布 Q,看 cross-entropy 怎么变:
Q 押注哪一类?
H(P) · 真实分布的熵
1.28 bit
H(P, Q) · 交叉熵
1.36 bit
KL(P ∥ Q) · 差距
0.07 bit
押对类但不够自信 → KL 还能更低
KL 散度:两个分布的差距
把交叉熵和真分布的熵相减,得到一个非常有用的量:
这就是 KL 散度(Kullback–Leibler divergence)。
直觉上:
KL 是「用 而不是 来描述 时,多浪费了几个 bit」。
它有三个值得记住的性质:
- ,等于 0 当且仅当 。所以可以当「距离」用。
- 不对称:。所以不是真正的距离——选哪个方向有讲究。
- 训练分类器最小化交叉熵 = 最小化 KL 散度——因为 在数据集固定时是常数。
第二条的不对称很微妙: 强迫 覆盖 的所有支持区域(否则 );而 反过来,允许 只「贴」到 的某个模态上。前者叫 mode-covering,后者叫 mode-seeking——这在 VAE、扩散模型、GAN 里是核心的设计差异。
最大似然估计
到现在为止,我们一直在讨论「给定分布,怎么衡量它好不好」。但 ML 的核心问题是反过来的:给定数据,怎么找到那个最好的分布?
最大似然估计(Maximum Likelihood Estimation, MLE)的思路极其朴素:
找一组参数 ,让已经看到的数据出现的概率最大。
假设我们有 个独立同分布(i.i.d.)的数据点 ,似然函数是:
MLE 就是找 。
因为连乘容易溢出,实际操作中取对数——对数似然:
MLE = 最大化对数似然 = 最小化负对数似然 。
这个「负对数似然」就是 ML 里几乎所有损失函数的概率起源。来看三个关键例子:
硬币问题(伯努利 + MLE):抛 10 次硬币,7 次正面。 的 MLE 是多少?对数似然 ,求导令其为零,得到 。直觉完全吻合——正面出现的频率就是 MLE 的估计。
线性回归(高斯 + MLE):假设 ,其中 是高斯噪声。那么每个数据点的条件概率是:
取负对数似然,忽略常数项,就得到了:
最小化 MSE 等价于高斯噪声假设下的 MLE。 这就是为什么线性回调用 MSE——不是随便选的,而是「假设误差是高斯的」这个前提下,MLE 自然给出的答案。
分类(多项式 + MLE):真实标签 one-hot,模型输出 softmax 概率。负对数似然就是交叉熵。最小化交叉熵等价于多项式分布下的 MLE。
统一的视角:选损失函数 = 选分布假设 + 做 MLE。MSE 对应高斯,交叉熵对应伯努利/多项式。损失函数不是拍脑袋的——它有严格的概率理由。
MAP 与正则化
MLE 有一个问题:它完全信任数据。数据少的时候,MLE 容易给出极端的估计——抛 3 次硬币全正面,MLE 就说 。这显然不合理。
最大后验估计(Maximum A Posteriori, MAP) 的解决办法:给参数加一个先验信念,然后用贝叶斯定理更新。
取负对数:
这个公式揭示了 ML 里一个深刻的对应关系:
MAP = MLE + 正则化。 正则化项就是先验的负对数。
具体来说:
| 先验 | 负对数先验 | 对应的正则化 |
|---|---|---|
| 高斯先验 | L2 正则化(Ridge) | |
| 拉普拉斯先验 | L1 正则化(Lasso) |
L2 正则化说「参数应该在零附近,但不用精确为零」——这恰好是高斯先验的信念。L1 正则化说「参数应该大部分是零」——拉普拉斯分布在零点有一个尖峰,鼓励稀疏。
(或 )控制先验的强度。 大 → 先验宽松 → 正则化弱; 小 → 先验紧凑 → 正则化强。调正则化系数,就是在调「我有多相信先验」。
数据量也决定了先验的影响力:数据少时,先验主导,MAP 远离 MLE;数据多时,似然主导,MAP 趋近 MLE。这就是为什么大数据时代,MLE 和 MAP 的差异越来越小——但在小样本或微调场景下,正则化(先验)仍然至关重要。
到这里,整个概率框架就闭环了:
- 分布描述数据生成的形状
- MLE 从数据里反推最好的参数
- MAP 加入先验信念,得到更稳健的估计
- 熵 / 交叉熵 / KL 衡量分布之间的差距,定义损失函数
- 贝叶斯定理把所有这些统一在一个框架下
下一篇我们会把这些工具用到具体的模型上——线性回归和 logistic 回归正是 MLE 在两种分布假设下的经典案例。