all_lessons/数学的逻辑/34第 35 课 / 共 44 课

第九部分 · 概率、统计与信息

采样与蒙特卡洛:当积分算不出来

前两课我们把目标写成了漂亮的期望和积分——熵是 𝔼[−log p],贝叶斯后验里全是积分。可漂亮归漂亮,绝大多数时候它们根本算不出来。这一课,我们用一个看似耍赖的办法绕过去:不去算积分,去掷骰子。这就是蒙特卡洛。

线性回顾
上一课:信息论给了我们熵、交叉熵和 KL 散度,把"该最小化什么"钉死成了期望的形式——熵 H(p) = 𝔼[−log p],损失是某个分布上的期望,处处都是
留下的问题:第 32 课的贝叶斯后验、本课的期望,写出来容易,真要算出那个数却几乎不可能——分布太复杂没有解析解(积不出原函数),维度一高连数值积分也彻底失效(要在每个维度铺格点,d 维就要 网格数ᵈ 个点,第 24 课的"维度灾难"在这里要人命)。式子写得出,数算不出,怎么办?
本课新增:蒙特卡洛方法——把"算积分/期望"偷换成"随机采样再取平均"。它的合法性,恰恰由第 10 课的大数定律担保;它和第 08 课的积分是同一枚硬币的两面。
本课路线
(1) 先看清困境:期望就是积分,可积分常常算不出。(2) 蒙特卡洛的核心一招:期望 ≈ 样本平均,为什么这合法(大数定律)。(3) 经典例子:往方框里随机撒点估 π。(4) 误差怎么缩:1/√N 律——和维度无关,这才是它打败网格积分的杀手锏。(5) 难点:复杂分布怎么采样?MCMC 一句话直觉。(6) 它在机器学习里(贝叶斯、VAE、扩散)无处不在。

困境:期望就是积分,可积分算不出来

先把上一课留下的痛点摆清楚。一个随机量 f(x) 的期望,定义就是一个加权和(或积分):

𝔼[f(x)] = ∑ p(x)·f(x) 或连续时 𝔼[f(x)] = ∫ p(x)·f(x) dx

读作"f 的期望,等于把 f(x) 按概率 p(x) 加权后全部加起来(或积起来)"。第 08 课讲过,积分 就是"无穷细分再累加"。问题是:绝大多数积分写得出、却积不出来——找不到原函数,微积分基本定理这条捷径用不上。比如贝叶斯里那个分母 ∫ p(数据|θ)·p(θ) dθ(对所有可能参数 θ 积分),几乎从来没有解析解。

那退一步,用数值积分(把区间切成小格、逐格累加面积)行不行?低维可以。可一旦维度高,灾难来了:要在 d 维空间铺格点,每个维度切 100 格,总点数就是 100ᵈ——d = 10 就已是 10²⁰ 个点,宇宙的年龄都算不完。这正是第 24 课维度灾难的现身:高维空间大得没法用网格"填满"。而机器学习里的积分动辄成千上万维。网格的路,死了。

核心一招:期望 ≈ 样本平均

蒙特卡洛的想法朴素到像耍赖,却无比深刻:既然 𝔼[f(x)] 是"按分布 p 加权的平均",那我干脆从分布 p 里随机抽一大把样本,对它们求普通平均,不就估出来了吗?

𝔼[f(x)] ≈ (1/N)·∑ (i=1..N) f(xᵢ), 其中 x₁, x₂, …, x_N 是从 p 独立采样的

读作"f 的期望,约等于对 N 个采样点 f(xᵢ) 求算术平均"。注意这里我们完全不碰积分,只是抽样、代入、求平均。凭什么这么干是对的?凭第 10 课的大数定律:当样本数 N → ∞,样本平均必然收敛到真期望。当年大数定律说"掷得越多、正面比例越接近 0.5";这里我们把它反过来用——正因为样本平均会收敛到期望,我们就用样本平均去"反推"那个算不出来的期望。大数定律从一条关于频率的定理,摇身变成一台计算工具。

这一步是观念上的大转弯:把"做不出的解析计算"换成"做得到的随机实验"。它叫"蒙特卡洛",得名于摩纳哥的赌城——因为骨子里就是"靠掷骰子算数"。二战中冯·诺依曼、乌拉姆等人在研究中子扩散时把它发扬光大,如今它是科学计算与机器学习的主力。

看得见的例子:撒点估 π

最经典、也最直观的蒙特卡洛,是用随机点估圆周率 π。设想一个边长为 1 的正方形,里面嵌一个四分之一圆(半径 1,圆心在角上)。这两块的面积是:

正方形面积 = 1×1 = 1, 四分之一圆面积 = (1/4)·π·1² = π/4

所以"一个点落进四分之一圆"的概率正好是 π/4。现在往正方形里均匀随机N 个点,数一数有多少个落在圆内(满足 x² + y² ≤ 1,读作"到圆心的距离不超过 1")。落入比例就是上面那个概率的估计:

落入比例 = 圆内点数 / N ≈ π/4 ⇒ π ≈ 4 × (圆内点数 / N)

这里发生的事,正是上一节那条公式的具身版:我们想算的"积分"是四分之一圆的面积,被换成了"撒点—数比例—乘 4"这个随机实验。点撒得越多,估计越准——这又是大数定律在兑现。下面就让你亲手撒,看 π 一点点浮现。

蒙特卡洛估 π:往方框里随机撒点
每点一次按钮就向单位正方形里均匀撒一批点:蓝点落在四分之一圆内、灰点落在圆外。圆内比例 ×4 就是 π 的估计。点撒得越多,估计越往真值 3.14159… 收敛、误差越小——这就是大数定律当计算器用。
总点数 N
0
π 的估计
与真值的误差

误差律:1/√N,且与维度无关

玩一会儿你会发现:误差降得很慢。要把精度提高 10 倍,得多撒 100 倍的点。这不是偶然,而是蒙特卡洛的铁律——估计的误差大致按 1/√N 缩小(读作"一除以根号 N"):

误差 ∝ 1/√N (读作"误差正比于 N 的平方根分之一")

慢是它的缺点。但请看这条律里少了什么——它里面没有维度 d这才是蒙特卡洛真正的杀手锏:网格积分的代价随维度指数爆炸网格数ᵈ),而蒙特卡洛的误差只看样本数 N跟你在 3 维还是 30000 维里采样没关系。在低维,网格更准更快;可一旦维度高到机器学习那个量级,指数爆炸让网格彻底出局,而蒙特卡洛照常工作。它用"收敛慢"换来了"不怕高维"——这笔交易,在高维世界里稳赚。

真正的难点:怎么从复杂分布里采样

到这儿还藏着一个没说破的前提:我们一直假设"能从分布 p 里抽样"。从均匀分布、高斯分布采样很容易;可贝叶斯后验那种形状古怪、还只知道它正比于某个式子(连归一化常数都算不出)的分布,怎么抽?

这正是马尔可夫链蒙特卡洛(MCMC)要解决的。一句话直觉:与其一步到位地"抽",不如造一个随机游走——从当前点出发,随机提议一个邻近的新点,按"新点比旧点更可能"的程度决定接受还是退回。这样走出来的轨迹,会自动在概率高的区域多停留、概率低的区域少经过;走得够久,落脚点的分布就正好是目标分布 p。妙处在于:它只需要比较两点概率的比值,那个算不出来的归一化常数一约就没了。细节留给专门的课,这里只需记住:MCMC 让我们能对"几乎任何"分布做蒙特卡洛。

它在机器学习里无处不在

蒙特卡洛不是数值分析的角落里一个小技巧,而是现代 AI 的底层零件:

常见误解

一句话带走
当期望/积分算不出来(无解析解、高维让网格指数爆炸),蒙特卡洛就把"算"换成"采样再平均":𝔼[f] ≈ (1/N)∑ f(xᵢ),合法性由大数定律担保,误差按 1/√N 缩小且与维度无关——这正是它能在高维世界活下来的原因。复杂分布的采样交给 MCMC。从撒点估 π 到扩散模型生成图像,背后都是同一招。
下一步 · 转入第十部分「把它们拼起来」
到这里,第九部分(概率、统计、信息)连同前面的"表示与几何"、"学习就是优化",工具已经备齐了:把数据放进向量空间、用内积量相似、用梯度下降找最优、用概率给不确定建模、用交叉熵当损失、用蒙特卡洛估算不出的期望。是时候把它们拼起来,造出第一台真正能从数据中学习的机器了。最简单也最经典的那台——线性回归与逻辑回归——会一口气用上前面几乎所有零件:最小二乘是高斯噪声下的最大似然(合体 19+30),逻辑回归是 sigmoid + 交叉熵损失 + 梯度下降(合体 24/26/32)。→ 第 35 课《第一台学习机器:线性回归与逻辑回归》。