期望、方差与协方差 -- 数据的数字特征
期望 = 中心在哪。方差 = 散得有多开。协方差 = 两个变量如何联动。
概念解析
期望 E[X]
加权平均 = 「长期平均结果」
\( \mathbb{E}[X] = \sum x_i P(x_i) \)
方差 Var(X)
数据分散程度
\( \mathbb{E}[(X - \mu)^2] \)
协方差 Cov(X,Y)
两个变量的联动关系
\( \mathbb{E}[(X-\mu_X)(Y-\mu_Y)] \)
协方差矩阵
d 维随机向量的协方差矩阵是 d×d 对称矩阵:\( \Sigma_{ij} = \text{Cov}(X_i, X_j) \)。
- 对角元 = 各特征的方差
- 非对角元 = 特征之间的协方差
生活例子
两个班级的平均分
A 班和 B 班数学平均分都是 75。但 A 班所有人都在 70~80,B 班有人 30 有人 100。
期望相同,但方差完全不同——方差揭示了「稳定性」的差异。
Python 动手实践
实例
data = np.random.normal(5, 2, 10000)
print(f"均值={np.mean(data):.3f}, 方差={np.var(data):.3f}, 标准差={np.std(data):.3f}")
# 协方差
x = np.random.randn(1000)
y1 = 0.8*x + np.random.randn(1000)*0.3 # 正相关
y2 = -0.8*x + np.random.randn(1000)*0.3 # 负相关
print(f"Cov(X, Y+): {np.cov(x,y1)[0,1]:.3f} (正)")
print(f"Cov(X, Y-): {np.cov(x,y2)[0,1]:.3f} (负)")
# 协方差矩阵
data_3d = np.random.randn(100, 3)
print("\n协方差矩阵:\n", np.round(np.cov(data_3d.T), 3))
print("对称:", np.allclose(np.cov(data_3d.T), np.cov(data_3d.T).T))
输出:
均值=4.990, 方差=4.008, 标准差=2.002 Cov(X, Y+): 0.846 (正) Cov(X, Y-): -0.860 (负) 协方差矩阵: [[ 1.03 0.035 0.033] [ 0.035 0.89 -0.066] [ 0.033 -0.066 0.933]] 对称: True
AI 中的应用场景
Batch Normalization 的数学
对每个 mini-batch 计算均值 μ_B 和方差 σ²_B,然后标准化 \( \hat{x} = (x - \mu_B) / \sqrt{\sigma^2_B + \epsilon} \)。这里用到了期望(均值)和方差两个统计量。\( \epsilon \) 是防止除零的小常数(通常 1e-5)。
PCA 降维 = 协方差矩阵特征分解
PCA 的第一步:计算数据的协方差矩阵 \( \Sigma \)(d×d 对称矩阵)。第二步:对 \( \Sigma \) 做特征分解,取前 k 个最大特征值对应的特征向量作为主成分方向。这些方向上的方差最大 → 保留了最多信息。
权重初始化的方差控制
Kaiming 初始化:\( Var(W) = 2/n_{in} \)(ReLU 网络)或 Xavier:\( Var(W) = 2/(n_{in}+n_{out}) \)(tanh 网络)。精确控制每层输出的方差,使得前向传播时激活值方差不变,反向传播时梯度方差不变。初始化不当会导致训练初期就梯度消失/爆炸。
Adam 优化器的二阶矩估计
Adam 维护梯度平方的指数移动平均 \( v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 \)。这本质上是对「梯度在每个参数方向上的方差」的在线估计。方差大的方向(震荡剧烈)给更小的学习率,方差小的方向(稳定下降)给更大的学习率。
