离散随机变量 -- 从掷骰子到概率质量函数
随机变量把「随机事件」形式化为数学工具。离散随机变量取值有限或可数。
概念解析
随机变量
随机变量 = 取值不确定的变量,每个取值有对应的概率。
PMF(概率质量函数)
\[ P(X = x_k) = p_k, \quad \sum_k p_k = 1 \]伯努利分布
一次试验,两种结果:P(成功)=p,P(失败)=1-p。二分类问题的数学建模。
二项分布
\[ P(X=k) = \binom{n}{k} p^k (1-p)^{n-k} \]n 次独立伯努利试验,成功 k 次的概率。
生活例子
掷骰子:X 是点数,P(X=1)=1/6, P(X=2)=1/6, ...。
掷 10 次硬币,正面次数 X 服从二项分布 Binomial(10, 0.5),最可能是 5 次。
Python 动手实践
实例
import numpy as np
# 掷骰子 PMF
rolls = np.random.randint(1, 7, size=10000)
for v in range(1, 7):
print(f"点数{v}: {np.mean(rolls==v):.4f}")
# 伯努利
print(f"\n伯努利 p=0.3, 1000次试验, 成功率={np.random.binomial(1,0.3,1000).mean():.3f}")
# 二项分布 Binomial(10, 0.3)
samples = np.random.binomial(10, 0.3, 10000)
k_best = np.bincount(samples).argmax()
print(f"二项分布 n=10,p=0.3: 最可能 k={k_best} (理论=np=3)")
# 掷骰子 PMF
rolls = np.random.randint(1, 7, size=10000)
for v in range(1, 7):
print(f"点数{v}: {np.mean(rolls==v):.4f}")
# 伯努利
print(f"\n伯努利 p=0.3, 1000次试验, 成功率={np.random.binomial(1,0.3,1000).mean():.3f}")
# 二项分布 Binomial(10, 0.3)
samples = np.random.binomial(10, 0.3, 10000)
k_best = np.bincount(samples).argmax()
print(f"二项分布 n=10,p=0.3: 最可能 k={k_best} (理论=np=3)")
运行输出:
点数1: 0.1628 点数2: 0.1661 点数3: 0.1686 点数4: 0.1686 点数5: 0.1637 点数6: 0.1702 伯努利 p=0.3, 1000次试验, 成功率=0.295 二项分布 n=10,p=0.3: 最可能 k=3 (理论=np=3)
二项分布 PMF 交互图表
二项分布 Binomial(n=10, p=0.3) 的概率质量函数(PMF)。调整滑块观察不同 p 值下的分布形态:
AI 中的应用场景
二分类标签 = 伯努利分布
逻辑回归和二元分类器将标签 y ∈ {0,1} 建模为伯努利分布:P(y=1|x) = \sigma(wx+b),P(y=0|x) = 1-\sigma(wx+b)。二元交叉熵损失就是在此假设下的负对数似然。这就是为什么二分类任务的输出层用 Sigmoid + BCE。
多分类 = 类别分布(多项分布的一次试验)
多分类中标签是 one-hot 向量,Softmax 输出的每个类别概率之和为 1。这等价于一次 n 面的「骰子」试验,每面概率不同。交叉熵损失在此假设下等于负对数似然。
Dropout 正则化 = 伯努利试验
训练时每个神经元以概率 p 被保留(伯努利试验),以概率 1-p 被丢弃。这相当于每次迭代训练一个不同的子网络,起到了集成学习的效果。测试时所有神经元都激活但输出乘 p 做缩放补偿。
强化学习中的探索 = 从离散分布采样
DQN 中常使用 ε-贪心策略:以 ε 概率随机选动作(伯努利),以 1-ε 选最优动作。这是最简单的探索策略,确保智能体不会永远困在次优策略中。
