Skip to content

大数定律与中心极限:平均会老实,而且长成铃铛

WARNING

🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。

估计θ^ 是随机变量。本章回答两个「然后呢」:大数定律(LLN)——n 大时 X¯ 贴向 EX中心极限定理(CLT)——贴的方式是 n(X¯μ) 长成高斯,即使原来的 X 根本不是高斯。这是「用训练集平均代替真实风险」、以及误差条画成 ±1.96σ/n 的许可证。前置:常见分布


一、大数定律

Xi i.i.d.,E|X1|<,则

X¯n=1ni=1nXi  μ=EX1

(依概率;还有几乎处处的强形式,这里不展开)。直觉就一句:独立噪声在平均里互相抵消,中心留下来。

抛币 p=0.6,运行均值会从乱抖收成一条贴着 0.6 的线——demo 左图抽 n=400 次。它保证分布是高斯,只保证中心找对。

机器学习里把损失的期望换成样本平均,靠的就是 LLN。SGD 的 minibatch 是「小 n 的 LLN」:平均大致朝真梯度,但每次仍抖——抖的幅度大约是 σ/BB 是 batch size。

保姆级数字例。 伯努利 p=0.6 的方差 p(1p)=0.24。样本均值的标准差是

σn=0.244000.490200.0245.

所以 n=400 时,X¯ 典型地落在 0.6±0.02 这一带,不会还在 01 之间乱跳。单次抛币的标准差是 0.240.49,平均之后稳了约 400=20 倍。

卡点。 LLN 要的是期望存在。Cauchy 分布没有期望,样本均值会继续乱走——「平均一定收敛」不是宇宙定律。相关样本(马尔可夫链、同一篇文章里的相邻词)让有效样本量变小,收敛变慢,公式里的 n 不能按条数傻数。

逐步推导:为什么 Var(X¯)=σ2/n,以及 Chebyshev 如何推出 LLN(点击展开)

Xi i.i.d.,EXi=μVar(Xi)=σ2<。均值的期望

E[X¯n]=1niEXi=μ

——平均作为估计量是无偏的。方差用独立可加:

Var(i=1nXi)=nσ2,Var(X¯n)=Var(1nXi)=1n2nσ2=σ2n.

标准差按 n 变小,不是按 n。想把误差再压一半,样本量要乘 4——这是蒙特卡洛、A/B 测试、误差条里同一条账。

Chebyshev:对任意随机变量(只要方差有限),P(|YEY|ε)Var(Y)/ε2。把 Y=X¯n 代进去:

P(|X¯nμ|ε)σ2nε2.

n 时右边 0。这就是依概率收敛(弱大数定律)的一种证法。界很松:伯努利 p=0.6n=400ε=0.05 时右边 =0.24/(4000.0025)=0.24,只告诉你「偏离超过 0.05 的概率 24%」;CLT 用高斯尾会给出紧得多的数。Chebyshev 的价值是:不需要 X 是高斯,只要方差有限。

指数分布 Exp(λ) 的期望 1/λ、方差 1/λ2。demo 取 λ=1,于是 μ=1σ2=1n=30Var(X¯)=1/300.0333。C++ 用最小 LCG 抽 Exp(1),就是在核对这一个数。


二、中心极限

Var(X1)=σ2<,则

n(X¯nμ) d N(0,σ2),

或等价地 X¯n 大约是 N(μ,σ2/n)。原分布可以是指数(右偏、只活在正半轴):n=1 时直方图还是折线,n=5 开始鼓包,n=30 已经像铃铛。

中心极限示意

图解说明:三档样本量。LLN 是「中心贴过去」;CLT 是「贴的误差长成高斯」。底栏:原分布不必是高斯。

标准化样本均值

Zn=n(X¯nμ)σ

在练习里手写。置信区间 X¯±1.96σ/n 就是在假装 ZnN(0,1):标准正态约 95% 的质量落在 [1.96,1.96]

保姆级数字例。 Exp(1) 本身:P(X>x)=exx0),右偏,众数在 0,均值 1。demo 重复 4000 次取平均:

nX¯ 的理论标准差 σ/n直方图看起来
11还是指数折线
51/50.447开始鼓包,仍略右偏
301/300.183已经像铃铛;经验方差应接近 1/300.0333

n=30 不是魔法阈值,只是「偏得不太离谱的分布」的经验尺。偏度极大(比如 Pareto 尾)时,30 远远不够。

卡点。 CLT 说的是 X¯ 的分布,不是「每个 Xi 变成高斯」。你不能把一张右偏的原始直方图平滑成铃铛,然后说「CLT」。另一个卡点:误差条 ±1.96σ/n 里的 σ 若用样本估,小 n 时应换成 t 分位数;demo 叠的是已知 σ 的理论高斯,用来对照形状。

逐步推导:从「独立和的方差」到标准化 ZnN(0,1)(点击展开)

第一步:位置和尺度。 X¯n 的均值是 μ,方差是 σ2/n。减掉 μ、再除以标准差,得到

Zn=X¯nμσ/n=n(X¯nμ)σ.

这样 EZn=0Var(Zn)=1,无论 n 是多少。CLT 多说的是:分布形状也变成标准正态。

第二步:为什么是高斯(特征函数速写)。Yi=(Xiμ)/σ,则 EYi=0Var(Yi)=1Zn=n1/2Yi。特征函数 φ(t)=EeitY10 附近

φ(t)=1t22+o(t2)

(二阶泰勒,用了均值 0、方差 1)。于是

EeitZn=[φ(t/n)]n=(1t22n+o(n1))net2/2,

右边正是 N(0,1) 的特征函数。这就是「很多独立、方差有限的小贡献加在一起,只留下均值和方差,更高阶被 n 洗掉」。

第三步:区间。ZnN(0,1),则

P(|Zn|1.96)0.95P(X¯n[μ1.96σn, μ+1.96σn])0.95.

Exp(1)n=301.96/300.36,所以 X¯ 大约有 95% 的机会落在 [0.64,1.36]。原指数变量 X 自己落在这个区间的概率远没有 95%——平均才有这个精度。

指数的偏度是 2,CLT 的「还你高斯」对偏度的修正阶是 1/n(Edgeworth)。n=52/50.89,直方图仍能看出右偏;n=302/300.37,肉眼就比较像铃铛了。这与 demo 三张图一致。

CLT 直方图

图解说明Exp(1) 的样本均值,n=1,5,30,各 4000 次重复。红线是 N(1,1/n),不是原指数密度。


三、代码在做什么

clt_lln.png:一条 p=0.6 的运行均值,横轴到 n=400clt_hist.png:指数样本均值的三档直方图,叠一条理论高斯。C++ 用最小 LCG 抽 Exp(1),印 n=30Var(X¯) 是否接近 1/30

LLN 运行均值

CLT 直方图

bash
cd docs/math/clt/code
python demo.py
g++ -std=c++17 demo.cpp -o clt_demo

四、小结

概念一句话
LLNX¯μ,中心找对;方差按 1/n
CLTn(X¯μ) 变高斯;原分布不必是高斯
σ/n均值比单点更稳,稳 n
1.96标准正态 95% 分位;误差条的来源
下游误差条、SGD 噪声、蒙特卡洛

下一章 优化与梯度:把「平均损失」写成 L(θ),参数怎么下山。

📥 Code

FileViewDownload
demo.pyOpenDownload
clt.hppDownload
demo.cppDownload
exercise.pyOpenDownload

参考

  1. Durrett, Probability: Theory and Examples(定理表述)
  2. Blitzstein & Hwang, Introduction to Probability(例题向)