概率论基础
概率论是机器学习的数学语言——从朴素贝叶斯分类器到扩散模型的噪声采样,所有核心算法都建立在概率分布、期望和条件概率之上。本页系统梳理机器学习所需的概率论基础。前置阅读:数值优化与数学基础。
把概率论想象成一套”不确定性度量工具箱”。当你说”明天降雨概率 70%“,概率论告诉你如何用数字精确描述这种不确定性,以及如何在不确定性之间做推理:
- 随机变量= 一场还没开奖的彩票。结果未知,但所有可能结果及其概率是确定的。
- 概率分布= 一张”可能性地图”。离散分布像条形图(每个值一根柱子),连续分布像平滑曲线(曲线下面积代表概率)。
- 期望= 如果你重复买同一张彩票无穷多次,平均每次赢多少钱——长期均值。
- 方差= 你实际收益围绕期望值的波动幅度——风险大小。
- 条件概率= 获得新信息后更新判断。知道”天空乌云密布”后,降雨概率从 30% 跳到 80%。
一个贯穿始终的直觉:机器学习的本质就是用数据去估计未知概率分布。线性回归估计 P(y|x),逻辑回归估计 P(类别|特征),扩散模型学习如何从噪声分布变换到数据分布。掌握概率论,就掌握了理解这些算法的万能钥匙。
随机变量与概率分布
Section titled “随机变量与概率分布”随机变量(random variable,即将随机实验结果映射为数值的函数)记作 X。它分两类:
- 离散型:取值可枚举(如骰子点数 1-6)。用概率质量函数(PMF,Probability Mass Function,即离散变量取各可能值的概率表)描述:P(X=x) 表示 X 取值为 x 的概率。所有概率之和为 1:
- 连续型:取值充满某个区间(如人的身高)。用概率密度函数(PDF,Probability Density Function,即描述连续变量在各点处”概率密集程度”的函数)描述,记作 f(x)。单个点的概率为零,但区间 (a, b) 内的概率等于 f(x) 在该区间上的积分:
整个曲线下的面积等于 1。注意 f(x) 本身不是概率,它可以大于 1(例如 [0, 0.1] 上的均匀分布的密度为 10),只有积分后才得到概率。
累积分布函数(CDF,Cumulative Distribution Function)记作 F(x) = P(X ≤ x),是 PDF 的积分(离散型则是求和):
CDF 总是从 0 单调递增到 1。它的一个有用性质是:P(a < X ≤ b) = F(b) - F(a),这在统计计算中极其常用。
类比:PMF 像一个”分蛋糕”的清单——每块蛋糕(每个取值)都标明了重量(概率);PDF 像一张”地形图”——海拔(密度)告诉你该地点的”拥挤程度”,但具体面积(概率)需要量算一块区域才能得出。
期望(expectation,即随机变量的”加权平均”或”重心”)也称为均值(mean):
- 离散型:
- 连续型:
直观理解:期望好比物理上的”重心”——如果概率分布是一根密度不均匀的杆子,期望就是让它平衡的支点位置。
期望是线性的:,无论 X 是什么分布都成立。这条性质在机器学习的损失函数推导中反复出现。
方差(variance,即随机变量围绕均值的”平均偏离程度”)的两种等价定义:
第二种形式 (“平方的均值减去均值的平方”)在实际计算中更方便,在推导 ML 损失函数时也用得更多。标准差 与原始数据同量纲,更直观。
延伸——偏度与峰度:除了方差,分布的形状还可用偏度(skewness,衡量分布的不对称性,正偏表示右侧有长尾)和峰度(kurtosis,衡量分布尾部”厚度”)来刻画。在金融风控和异常检测中,这些高阶矩往往比方差更重要。
常见概率分布
Section titled “常见概率分布”离散型:
- 伯努利分布(Bernoulli):单次实验只有两个结果(成功/失败),成功概率为 。如抛硬币。PMF:,。期望 ,方差 。
- 二项分布(Binomial): 次独立伯利实验中成功次数的分布。记 。PMF:
期望 ,方差 。这是逻辑回归(二分类)输出的离散化基础。
- 类别分布(Categorical):伯努利推广到 K 个结果(如掷骰子),每个结果有自己的概率。
- 泊松分布(Poisson):单位时间内随机事件发生次数的分布,参数为 (平均发生次数)。PMF:。期望和方差都是 。
连续型:
- 均匀分布(Uniform):区间 内每处密度相等:。最简单的连续分布,期望 ,方差 。在贝叶斯推断中常作为”无信息先验”(uninformative prior,即对参数不做任何偏好假设时的默认分布)。
- 正态分布(Normal / Gaussian):概率论最重要的分布,PDF 呈钟形曲线,参数为均值 和方差 :
大量自然现象(身高、测量误差)近似正态分布。当 、 时称为标准正态分布。任何正态分布可通过 标准化。标准化的技巧在 BatchNorm、梯度裁剪等深度学习技术中无处不在。
- 指数分布(Exponential):描述事件间隔时间,如两次地震之间的等待时间。(),“无记忆性”(memoryless,即已等待时间不影响未来等待时间)是其独特性质。
- Beta 分布:定义在 (0, 1) 区间上的连续分布,常作为概率本身的概率分布(贝叶斯推断中的共轭先验,conjugate prior,即先验和后验具有相同分布族)。PDF:
其中 、 是形状参数, 是归一化常数。直觉上, 偏大表示偏向 1, 偏大表示偏向 0。在 A/B 测试和汤普森采样(Thompson Sampling,一种强化学习中的探索策略)中广泛使用。
联合概率、边缘概率与条件概率
Section titled “联合概率、边缘概率与条件概率”两个随机变量 X 和 Y 的联合概率(joint probability,即多个变量同时取某些值的概率)记作 。对于连续型则用联合 PDF 。
边缘概率(marginal probability,即从联合分布中”消除”其他变量后得到的单变量分布):
这相当于”忽略”另一个变量的影响——就像从一张二维热力图(联合分布)中沿某一列(或行)求和,得到一维的边缘分布。
条件概率(conditional probability,即已知某事件发生后另一事件的概率):
这就是前面”获得新信息后更新判断”的数学表达。条件概率是整个贝叶斯框架和现代深度学习中最核心的运算——语言模型预测下一个 token,本质上就是计算条件概率 P(下一个词 | 上下文)。
贝叶斯定理(Bayes’ Theorem,即将条件概率”反转”的核心公式)是概率论最重要的公式之一:
其中:
- P(H) 是先验(prior,即看到数据前对假设 H 的初始信念)
- P(D|H) 是似然(likelihood,即在假设 H 成立时观察到数据 D 的概率)
- P(H|D) 是后验(posterior,即看到数据后更新过的信念)
- P(D) 是证据(evidence,即数据的边缘概率,起归一化作用)
直觉:你先有一个先验信念(“这个邮件 99% 不是垃圾邮件”),看到证据(“含’中奖’关键词”)后,用贝叶斯定理修正信念,得到后验概率。贝叶斯推断的核心就是”用数据不断更新信念”。详见贝叶斯推断。
独立性与链式法则
Section titled “独立性与链式法则”两个事件 A 和 B 独立(independent)意味着一个的发生不影响另一个:P(A, B) = P(A) · P(B)。不独立时用链式法则(chain rule,即把联合概率分解为一系列条件概率之积)展开:
这个分解方式是朴素贝叶斯、马尔可夫链、自回归语言模型的理论根基。例如,GPT 生成文本时,就是在计算并采样自这个链式分解中的每一步条件概率。
协方差与相关系数
Section titled “协方差与相关系数”协方差(covariance,即衡量两个随机变量”同涨同跌”程度的量):
正值表示同向变化,负值表示反向变化,零表示无线性关系。
相关系数(correlation coefficient,即标准化后的协方差):
取值在 -1 到 1 之间。ρ=1 完全正相关,ρ=-1 完全负相关,ρ=0 无线性相关(但不代表完全独立——可能有非线性关系)。标准化消除了量纲影响,使得不同变量的”线性关联强度”可比较。
协方差矩阵(covariance matrix)是多维随机变量的推广:Σ_ij = Cov(X_i, X_j)。对角线上是各变量的方差,非对角线是两两协方差。多元高斯分布完全由均值向量和协方差矩阵决定。在 PCA(主成分分析)中,我们通过对协方差矩阵做特征分解来找到数据方差最大的方向。
大数定律与中心极限定理
Section titled “大数定律与中心极限定理”大数定律(Law of Large Numbers, LLN):当样本量 n 趋于无穷时,样本均值会收敛到真实期望:
这就是”抛硬币次数越多,正面比例越接近 50%“的数学依据,也是蒙特卡洛方法(用大量随机采样的均值来近似期望)的理论基础。详见蒙特卡洛方法。
中心极限定理(Central Limit Theorem, CLT):无论原始分布是什么,只要样本量足够大,样本均值的分布趋近于正态分布:
注意方差缩小为 σ²/n——样本量越大,样本均值的波动越小。这解释了为什么正态分布在自然界中无处不在,也是统计假设检验的核心依据。深度学习中的 mini-batch 梯度下降,其梯度估计的可靠性也由大数定律保证——batch 越大,梯度估计越准。
信息论基础:熵与 KL 散度
Section titled “信息论基础:熵与 KL 散度”机器学习中频繁用到概率分布之间的”距离”度量:
熵(entropy,即描述一个分布”不确定性大小”的量):
均匀分布的熵最大(最不确定),确定性分布(如骰子只出 6)的熵为零。
KL 散度(Kullback-Leibler divergence,即衡量两个分布 P 和 Q 的”差异”程度):
KL 散度非负,且当且仅当 P=Q 时为零。变分推断(Variational Inference,即用简单分布近似复杂后验的方法)和VAE(变分自编码器)的核心损失函数 ELBO 就基于最小化 KL 散度。详见信息论基础。
概率论核心概念关系
Section titled “概率论核心概念关系”常见分布的用途地图
Section titled “常见分布的用途地图”numpy 模拟概率分布与大数定律
Section titled “numpy 模拟概率分布与大数定律”import numpy as np
# === 大数定律:抛硬币次数越多,正面比例越接近 0.5 ===print("=== 大数定律演示 ===")results = []for n in [10, 100, 1000, 10000, 100000]: # 模拟抛 n 次硬币(0=反面, 1=正面),取均值 mean = np.random.binomial(1, 0.5, size=n).mean() results.append((n, mean))for n, m in results: # 随着样本量增大,样本均值逐步逼近真实期望 0.5 print(f"抛 {n:>6} 次: 正面比例 = {m:.4f}")# 抛 10 次: 正面比例 ≈ 0.5000(波动大)# 抛 100000 次: 正面比例 ≈ 0.4998(收敛到 0.5)scipy 计算正态分布概率与条件概率
Section titled “scipy 计算正态分布概率与条件概率”import numpy as npfrom scipy import stats
# === 正态分布:已知身高 ~ N(170, 100),求超过 180 的概率 ===print("=== 正态分布概率计算 ===")height = stats.norm(loc=170, scale=10) # mu=170, sigma=10p_tall = 1 - height.cdf(180) # P(X > 180)print(f"身高超过 180 的概率: {p_tall:.4f}") # ≈ 0.1587
# === 贝叶斯定理:医疗检测经典案例 ===print("\n=== 贝叶斯定理:医疗检测 ===")p_disease = 0.01 # 先验:患病率 1%p_positive_given_disease = 0.95 # 似然:真阳性率 95%p_positive_given_healthy = 0.05 # 误报率:健康人假阳性 5%
# 全概率公式:检测阳性的总概率p_positive = (p_positive_given_disease * p_disease + p_positive_given_healthy * (1 - p_disease))
# 贝叶斯定理:检测阳性时真正患病的概率p_disease_given_positive = (p_positive_given_disease * p_disease) / p_positiveprint(f"检测阳性时真正患病概率: {p_disease_given_positive:.4f}") # ≈ 0.161# 结果只有约 16%!这就是"基础率忽视"谬误的数学根源
# === 中心极限定理:均匀分布的样本均值趋于正态 ===print("\n=== 中心极限定理演示 ===")samples = np.random.uniform(0, 1, size=(10000, 50)) # 每组 50 个均匀样本means = samples.mean(axis=1) # 每组取均值print(f"样本均值: 期望={means.mean():.3f}, 标准差={means.std():.3f}")# 期望 ≈ 0.5(均匀分布期望),标准差 ≈ 0.058(远小于原始 σ≈0.29)# 标准差理论值 = 1/sqrt(12*50) ≈ 0.041,实验值受采样波动影响
# === 协方差与相关系数 ===print("\n=== 协方差与相关系数 ===")np.random.seed(42)x = np.random.randn(1000) # 标准正态随机数y = 2 * x + np.random.randn(1000) * 0.5 # y 与 x 强正相关 + 噪声z = np.random.randn(1000) # 与 x 无关print(f"Corr(x, y) = {np.corrcoef(x, y)[0,1]:.3f}") # ≈ 0.97(强正相关)print(f"Corr(x, z) = {np.corrcoef(x, z)[0,1]:.3f}") # ≈ 0.00(无线性关系)PyTorch 中的概率分布与可微分采样
Section titled “PyTorch 中的概率分布与可微分采样”import torchimport torch.distributions as dist
# === PyTorch 概率分布支持自动微分(autograd),是深度学习的核心 ===# autograd(自动微分引擎,即自动计算梯度的系统)
# 定义一个可学习的正态分布(参数为可训练张量)mu = torch.tensor(0.0, requires_grad=True) # 均值,需要梯度sigma = torch.tensor(1.0, requires_grad=True) # 标准差,需要梯度
# 创建正态分布对象normal = dist.Normal(mu, sigma)
# 采样并计算对数概率(log probability,即概率密度的对数)samples = normal.rsample(sample_shape=(100,)) # rsample 使用重参数化技巧log_probs = normal.log_prob(samples) # 支持反向传播
# 模拟最大似然估计(MLE):最大化样本的对数概率之和loss = -log_probs.sum() # 负对数似然作为损失loss.backward() # autograd 自动计算梯度print(f"mu 的梯度: {mu.grad:.4f}") # 指向真实均值方向print(f"sigma 的梯度: {sigma.grad:.4f}") # 指向真实标准差方向
# === KL 散度:衡量两个分布的差异 ===p = dist.Normal(torch.tensor(0.0), torch.tensor(1.0)) # 标准正态q = dist.Normal(torch.tensor(1.0), torch.tensor(1.0)) # 偏移的正态kl_div = dist.kl_divergence(p, q) # D_KL(P || Q)print(f"\nKL 散度 D_KL(P||Q) = {kl_div:.4f}") # ≈ 0.5(有差异)# 当 Q=P 时 KL 为 0;差异越大 KL 越大蒙特卡洛积分:用采样近似复杂期望
Section titled “蒙特卡洛积分:用采样近似复杂期望”import numpy as np
# === 蒙特卡洛方法:估算圆周率 π ===# 原理:在边长为 2 的正方形内随机撒点,落入内切圆的比例 ≈ π/4print("=== 蒙特卡洛估算 π ===")for n in [100, 1000, 10000, 100000, 1000000]: # 在 [-1,1]×[-1,1] 正方形内均匀采样 points = np.random.uniform(-1, 1, size=(n, 2)) # 计算每个点到原点距离,判断是否在单位圆内 inside = (points[:, 0]**2 + points[:, 1]**2 <= 1).sum() pi_estimate = 4 * inside / n # 圆面积/正方形面积 = π/4 print(f"采样 {n:>8} 点: π ≈ {pi_estimate:.5f}")# 随着采样数增加,估计值逐步逼近真实的 π ≈ 3.14159...# 误差按 O(1/√n) 速度减小——这是蒙特卡洛方法的收敛速率
# === 重要性采样(Importance Sampling):用容易采样的分布估算难分布的期望 ===print("\n=== 重要性采样演示 ===")# 目标:估算 f(x)=x^2 在正态分布 N(0,1) 下的期望# 解析值 E[x^2] = Var(x) = 1(当 μ=0 时)target_dist = np.random.randn(100000)direct_estimate = np.mean(target_dist**2)print(f"直接采样估算 E[x²]: {direct_estimate:.4f}") # ≈ 1.0- 正态分布是默认假设:当你对数据分布一无所知时,假设正态分布通常是最安全的起点。中心极限定理保证了大量独立随机因素叠加的结果趋于正态。但在长尾场景(财富分布、词频)下,幂律分布更合适。
- 区分 PMF 和 PDF:离散分布的 P(X=x) 是真正的概率(0 到 1),连续分布的 f(x) 是密度,可以大于 1——只有积分才有概率含义。混淆两者是入门阶段最常见错误。
- 方差和标准差的单位不同:方差的单位是原始单位的平方(如身高的平方),标准差与原始数据同单位(厘米)。汇报”波动多大”时用标准差,做数学推导时用方差。
- 相关不等于因果:相关系数只衡量线性关联,ρ=0 也不能排除非线性关系。更不能把相关性等同于因果关系——经典例子:冰淇淋销量和溺水率正相关,但真正原因是”夏天到了”。
- 条件概率的顺序很关键:P(A|B) 和 P(B|A) 通常不相等。混淆两者是”检察官谬误”的根源,也是贝叶斯定理要解决的核心问题。
- 对数概率更数值稳定:在代码中计算概率连乘时(如语言模型的序列概率),直接相乘会下溢到 0。标准做法是在对数空间计算(log-sum-exp 技巧),这也是
torch.distributions默认提供log_prob而非prob的原因。
- 朴素贝叶斯分类器:用条件概率和特征独立假设做文本分类、垃圾邮件过滤——最经典的概率论应用。详见监督学习。
- 语言模型的下一个 token 预测:GPT 等大语言模型本质是在估计条件概率 P(下一个词 | 已有上下文)。链式法则将序列概率分解为各步条件概率之积。详见Transformer 架构。
- 扩散模型与 Flow Matching:Stable Diffusion 等生成模型的前向加噪和反向去噪过程,每一步都基于高斯分布采样。2023-2025 年间,Flow Matching(流匹配,一种通过学习向量场将简单分布变换为复杂数据分布的方法)和Continuous Normalizing Flows(连续标准化流)逐渐成为扩散模型的有力替代,在语音合成、视频生成等领域展现出更高的采样效率和更稳定的训练特性。核心数学仍然是概率分布之间的变换。详见扩散模型。
- 变分自编码器(VAE):用 KL 散度约束编码器输出的分布接近标准正态分布,实现生成式建模。ELBO(Evidence Lower Bound,证据下界)的目标函数直接源自概率论的 Jensen 不等式。
- 蒙特卡洛估计:用大量随机采样来近似计算复杂积分或期望值,在强化学习、贝叶斯推断中广泛使用。详见蒙特卡洛方法。
- A/B 测试与假设检验:互联网产品做实验时,用概率分布判断”点击率提升是真实效果还是随机波动”——统计学的核心应用。Beta 分布在贝叶斯 A/B 测试中特别有用。
- 大语言模型的概率校准(Calibration):2024-2025 年的研究热点——模型输出的”90% 置信度”是否真的对应 90% 的准确率?GPT-4、Claude 等模型在置信度校准方面仍有显著改进空间,这是概率论在 LLM 安全性评估中的直接应用。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| numpy.random | Python | NumPy 随机采样模块,覆盖所有常见分布,支持大规模并行采样 |
| scipy.stats | Python | SciPy 统计模块,提供 PDF/CDF/分位数计算、假设检验等完整统计功能 |
| torch.distributions | Python | PyTorch 概率分布库,支持自动微分,用于变分推断和强化学习 |
| tensorflow_probability | Python | TensorFlow Probability,概率编程与贝叶斯推断的完整工具栈 |
| PyMC | Python | Python 概率编程框架,专注于贝叶斯统计建模与 MCMC 采样 |
| statsmodels | Python | 统计建模库,提供假设检验、回归分析、时间序列等经典统计方法 |
| JAX + numpyro | Python | JAX 生态的概率编程库,支持 GPU/TPU 加速和自动微分,2025 年概率建模研究主流工具之一 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 随机变量 | Random Variable | 将随机实验结果映射到数值的函数,分离散型和连续型两类 |
| 概率质量函数 | PMF | 离散型随机变量取某个值的概率,如 P(X=3)=0.2 |
| 概率密度函数 | 连续型随机变量的密度函数,曲线下面积代表概率,单点密度可大于 1 | |
| 累积分布函数 | CDF | P(X≤x),从 0 单调递增到 1 的函数 |
| 期望 | Expectation | 随机变量的长期平均取值,也称为均值 |
| 方差 | Variance | 随机变量围绕期望的波动程度,标准差是其平方根 |
| 联合概率 | Joint Probability | 两个或多个随机变量同时取某些值的概率 |
| 边缘概率 | Marginal Probability | 从联合分布中对其他变量求和(或积分)得到的单变量分布 |
| 条件概率 | Conditional Probability | 已知某事件发生后另一事件的概率,P(X|Y)=P(X,Y)/P(Y) |
| 贝叶斯定理 | Bayes’ Theorem | 用似然和先验计算后验的核心公式,P(H|D)∝P(D|H)P(H) |
| 独立性 | Independence | 两事件的联合概率等于各自概率之积,互不影响 |
| 协方差 | Covariance | 衡量两随机变量的线性同向/反向程度 |
| 相关系数 | Correlation Coefficient | 标准化后的协方差,取值 -1 到 1,只反映线性关系 |
| 熵 | Entropy | 衡量分布不确定性大小的量,H=-Σ P(x)log P(x) |
| KL 散度 | KL Divergence | 衡量两个概率分布差异的非对称度量,非负,当且仅当分布相同时为零 |
| 大数定律 | Law of Large Numbers | 样本量趋于无穷时,样本均值收敛到真实期望 |
| 中心极限定理 | Central Limit Theorem | 样本均值的分布随样本量增大趋近正态分布,无论原始分布如何 |
- Blitzstein & Hwang,「Introduction to Probability」(2nd Ed., 2019):哈佛大学经典概率论教材,从直觉出发推导严格,配套在线课程(Stat 110),入门首选。
- Casella & Berger,「Statistical Inference」(2nd Ed., 2001):统计推断领域的标杆教材,概率论与数理统计衔接清晰,适合进阶。
- Wasserman,「All of Statistics」(2004):专为机器学习读者编写的统计学精要,篇幅紧凑、重点突出,覆盖概率论到统计学习的完整链条。
- Murphy,「Probabilistic Machine Learning」系列 (2022/2023):Kevin Murphy 的概率机器学习百科全书,第二版分 Advanced Topics 和 Introduction 两卷,是连接概率论与深度学习最全面的参考。
- Jaynes,「Probability Theory: The Logic of Science」(2003):从贝叶斯视角重新构建概率论,强调概率作为”不确定性推理的扩展逻辑”,思想深刻但较难。
- 3Blue1Brown 概率论视频系列:可视化讲解概率分布、中心极限定理等核心概念,直觉建立的最佳辅助材料。
- Lipman et al., “Flow Matching for Generative Modeling” (ICLR 2023):提出 Flow Matching 框架的奠基论文,2024-2025 年已成为扩散模型领域最活跃的研究方向之一,是理解现代生成模型概率基础的必读文献。
- Seeing Theory (Brown University):交互式概率论可视化网站,用动态图形展示分布、采样、贝叶斯推断等概念,非常适合建立直觉。