#010. 统计推断:MLE/MAP、熵、KL 与 Monte Carlo
#学习目标与概念起点
前两章主要回答“随机变量是什么、期望和方差怎么算”。本章开始回答统计推断问题:我们手上只有有限样本,想反推出背后的概率模型、比较两个分布的距离,并用随机模拟估计复杂数量。
学习目标
读完后,你应该能解释 MLE 和 MAP 的区别,能手算 Bernoulli 成功率的 MLE/MAP,能读懂熵、交叉熵、KL 的公式,并能说明 Monte Carlo 为什么几乎哪里都能用但收敛慢。
概念起点
概率论通常是假设分布已知,然后计算事件概率;统计推断反过来:我们观察到数据 \(D\),希望估计未知参数 \(\theta\),例如硬币正面概率、模型权重、收益分布均值。
面试主线
MLE/MAP 连接参数估计和正则化;交叉熵/KL 连接 LLM 训练目标;Monte Carlo 连接量化风险模拟、模型评测和 RL rollout。
符号先读清楚:\(D\) 表示观测数据集;\(\theta\) 表示模型参数;\(p(D\mid\theta)\) 读作“给定参数 \(\theta\) 时,看到数据 \(D\) 的概率”;\(p(\theta\mid D)\) 读作“看到数据 \(D\) 后,参数 \(\theta\) 的后验概率”。
为什么需要推断:真实世界不会把分布参数直接交给我们。我们看到的是样本,例如 100 次点击里有 12 次点击、10 天收益、语料里的下一个 token。统计推断就是把样本变成可用参数,并知道这个参数有多不可靠。
#似然:从“参数生成数据”开始
似然不是一个新分布,而是把同一个公式换一个观察角度。若模型参数是 \(\theta\),数据 \(D\) 出现的概率是 \(p(D\mid\theta)\)。当 \(D\) 已经固定时,我们把它看成关于 \(\theta\) 的函数,称为似然函数。
这里 \(L\) 是 likelihood 的缩写。分号 \(;\) 用来提醒你:\(D\) 是已经观察到的固定数据,\(\theta\) 才是我们正在调的变量。这个区别很重要:概率分布要求对所有可能数据求和为 1,但似然函数不要求对所有参数求和为 1。
假设你看到一枚硬币 10 次里 7 次正面。参数 \(p=0.7\) 比 \(p=0.1\) 更能解释这组数据。MLE 的思想就是:在所有候选参数里,选“最像是能生成这组数据”的那个。
如果样本独立同分布,联合概率可以拆成乘积:
乘积在计算机里容易下溢,求导也麻烦,所以实际优化通常取对数。因为 \(\log\) 是单调递增函数,最大化 \(L(\theta;D)\) 和最大化 \(\log L(\theta;D)\) 得到同一个参数。
#MLE:Bernoulli 成功率例题
最大似然估计选择让观测数据出现概率最大的参数:
\(\arg\max\) 读作“使右侧最大时的参数取值”。注意它返回的是参数,不是最大值本身。
一次 Bernoulli 试验只有两种结果:成功记为 1,失败记为 0。设成功概率为 \(p\)。现在观察到 10 次试验,其中成功 7 次、失败 3 次。求 \(p\) 的 MLE。
第一步,写出单个样本概率。若 \(x_i=1\),概率是 \(p\);若 \(x_i=0\),概率是 \(1-p\)。这可以合成一个公式:
第二步,写出 10 个独立样本的似然。成功 7 次给出 \(p^7\),失败 3 次给出 \((1-p)^3\):
第三步,取对数,把乘法变成加法:
第四步,求导并令导数为 0:
把式子移项:
所以 \(\hat p_{MLE}=0.7\)。一般地,若 \(n\) 次试验中成功 \(k\) 次,Bernoulli MLE 是 \(\hat p=k/n\)。
MLE 不是说真实成功率一定等于 0.7,而是说在没有额外先验信息时,0.7 是最能解释当前样本的点估计。样本越少,这个点估计越容易被偶然波动带偏。
#MAP:似然加先验
MLE 只看数据,不看参数本身是否合理。MAP 在 MLE 的基础上加入先验:参数在看到数据前就有一个信念 \(p(\theta)\)。根据 Bayes 公式:
做参数优化时,\(D\) 已经固定,分母 \(p(D)\) 不随 \(\theta\) 变化,所以 MAP 只需要最大化分子:
取 log 后,乘法变成加法:
仍然是 10 次试验成功 7 次。现在加入先验 \(p\sim Beta(2,2)\)。这个先验的直觉是:在看到数据前,我们温和地相信硬币不要太偏向 0 或 1。求 MAP。
\(Beta(\alpha,\beta)\) 是 Bernoulli 成功率的常用先验。它的密度与下面这个量成正比:
似然是 \(p^7(1-p)^3\),先验是 \(p^{2-1}(1-p)^{2-1}\)。二者相乘得到后验的形状:
这对应后验 \(Beta(9,5)\)。当 \(\alpha+k>1\) 且 \(\beta+n-k>1\) 时,Beta 后验的众数,也就是 MAP,为:
所以 MAP 是约 \(0.667\),比 MLE 的 \(0.7\) 更靠近中间。
可以把 \(Beta(2,2)\) 粗略理解成“先看过 2 个成功和 2 个失败的温和经验”,它会把小样本估计往先验中心拉。样本很大时,似然项增长得更快,先验影响会变小。
MLE 与 MAP 的区别:MLE 最大化 \(p(D\mid\theta)\),只问“哪个参数最能生成数据”;MAP 最大化 \(p(D\mid\theta)p(\theta)\),还问“这个参数本身在先验下是否合理”。
正则化连接:如果先验是 Gaussian,\(\log p(\theta)\) 会产生类似 \(-\lambda\|\theta\|_2^2\) 的惩罚;如果先验是 Laplace,会产生类似 \(L_1\) 的惩罚。MAP 是点估计,不等于保留完整后验分布。
#熵、交叉熵与 KL
信息论指标常被背成公式,但它们其实都在回答一个问题:当我们用某个概率分布来描述或编码样本时,需要付出多少“惊讶程度”或编码代价。
熵 \(H(p)\)
衡量真实分布 \(p\) 自己的不确定性。分布越平均,越难猜,熵越大;分布越集中,越容易猜,熵越小。
交叉熵 \(H(p,q)\)
样本来自真实分布 \(p\),但你用模型分布 \(q\) 去编码它。模型给真实高频事件的概率越低,交叉熵越大。
KL \(D_{KL}(p\|q)\)
衡量用 \(q\) 代替 \(p\) 多付出的额外代价。它不是距离,因为通常不对称。
这个公式读作:对每个可能结果 \(x\),先看它在真实分布中的概率 \(p(x)\),再乘上它的惊讶程度 \(-\log p(x)\),最后对所有结果加权平均。
交叉熵把惊讶程度里的 \(p(x)\) 换成了 \(q(x)\):真实样本按 \(p\) 出现,但模型按 \(q\) 给概率。若模型对真实常见结果给很小概率,\(-\log q(x)\) 会很大。
KL 可以拆成:
所以当真实分布 \(p\) 固定时,最小化交叉熵等价于最小化 \(D_{KL}(p\|q)\)。但要记住,KL 的方向有含义:\(D_{KL}(p\|q)\) 惩罚模型 \(q\) 漏掉真实分布 \(p\) 中高概率的地方。
设真实分布 \(p=(0.8,0.2)\),模型分布 \(q=(0.6,0.4)\)。用自然对数计算 \(H(p)\)、\(H(p,q)\) 和 \(D_{KL}(p\|q)\)。
真实熵:
交叉熵:
KL:
也可以直接算:
\(0.0915\) 不是准确率,也不是概率,而是用 \(q\) 代替 \(p\) 的额外平均 log 代价。模型 \(q=(0.6,0.4)\) 低估了第一类真实概率 0.8,所以会多付出编码代价。
#LLM 为什么训练 NLL/CE
语言模型训练的基本任务是:给定前文 \(x_{<t}\),预测下一个 token \(x_t\)。模型输出的是词表上每个 token 的概率 \(q_\theta(\cdot\mid x_{<t})\)。训练数据告诉我们真实下一个 token 是哪个。
NLL 是 negative log likelihood,读作负对数似然。最大化训练语料的条件似然:
等价于最小化负号后的 NLL。为什么又说它是交叉熵?因为在每个位置,训练标签通常是 one-hot 分布:真实 token 的概率是 1,其他 token 的概率是 0。交叉熵为:
当 \(p\) 是 one-hot,只有真实 token \(x_t\) 那一项不为 0,于是:
词表只有三个 token:A、B、C。真实下一个 token 是 B,所以标签分布是 \(p=(0,1,0)\)。模型给出的概率是 \(q=(0.2,0.7,0.1)\)。
如果模型只给 B 概率 0.1,损失会变成 \(-\log0.1\approx2.303\)。所以 CE 对“把真实 token 概率给得很低”惩罚很重。
LLM 的 CE/NLL 不是直接奖励“回答质量”,而是在每个 token 位置提高训练数据中真实 token 的概率。它学到语言、知识和格式,是因为这些都体现在大量 next-token 条件分布里。
#Monte Carlo:通用但慢
很多期望很难解析计算。例如复杂期权收益、策略回撤、模型多次采样表现、RL rollout 回报,都可以写成某个随机变量函数的期望:
Monte Carlo 的核心做法非常朴素:从 \(X\) 的分布中抽样 \(X_1,\ldots,X_n\),计算每个样本上的 \(f(X_i)\),再用平均值近似期望。
假设某策略的日收益模拟结果为 \(-1\%, 2\%, 0.5\%, -0.3\%, 1.2\%\)。用 Monte Carlo 估计“日收益为正”的概率。
定义函数 \(f(r)=1\) 表示收益 \(r>0\),否则 \(f(r)=0\)。五个样本对应:
样本平均为:
所以估计正收益概率为 60%。这只是基于 5 个样本的粗估计,样本量太小,误差会很大。
Monte Carlo 的通用性来自它只需要会采样、会计算 \(f(X)\),不要求你把积分解析算出来。它的慢来自标准误差缩小速度:
这里 \(\sigma\) 是 \(f(X)\) 的标准差。样本量增加 100 倍,标准误只缩小 10 倍;想把误差再砍半,通常需要 4 倍样本。这就是“通用但慢”的核心含义。
| 场景 | 随机样本是什么 | 估计的量 | 主要风险 |
|---|---|---|---|
| 量化风险 | 价格路径或收益路径 | VaR、CVaR、最大回撤 | 尾部样本稀少,分布假设错误 |
| LLM 评测 | 多次采样回答 | 通过率、平均评分、pass@k | 样本相关、prompt 泄漏、评分噪声 |
| RL | 环境 rollout | 策略期望回报 | 方差高,探索不足,环境非平稳 |
#误区、面试连接与检查清单
常见误区
不要把 likelihood 当成参数上的概率分布;不要说 MAP 等于完整 Bayesian inference;不要把 KL 当成对称距离;不要以为 Monte Carlo 样本翻倍误差就减半。
LLM 连接
预训练的 NLL/CE 是 token-level MLE;KL 常出现在 RLHF/PPO/DPO 类方法里,用来约束新策略不要偏离参考模型太远;采样评测要报告样本量和方差。
量化连接
MLE 用于拟合收益分布或波动模型;MAP/正则化用于小样本稳定估计;KL 可比较预测分布和经验分布;Monte Carlo 用于复杂路径依赖风险。
检查 1:你能解释 \(p(D\mid\theta)\) 和 \(p(\theta\mid D)\) 的区别吗?前者是似然的核心,后者是后验。
检查 2:你能从 \(L(p)=p^7(1-p)^3\) 推出 Bernoulli MLE 为 \(0.7\) 吗?关键步骤是取 log、求导、令导数为 0。
检查 3:你能说明 \(Beta(2,2)\) 先验为什么把 MAP 从 \(0.7\) 拉到 \(2/3\) 吗?关键是先验提供了额外偏好。
检查 4:你能说出 \(H(p,q)=H(p)+D_{KL}(p\|q)\) 的含义吗?当 \(p\) 固定时,最小化交叉熵就是降低额外编码代价。
检查 5:你能解释 LLM 的 CE 为什么等于 one-hot 标签下的 NLL 吗?因为只有真实 token 那一项留下 \(-\log q_\theta(x_t\mid x_{<t})\)。
检查 6:你能解释 Monte Carlo 为什么慢吗?因为标准误通常按 \(1/\sqrt n\) 缩小,而不是按 \(1/n\) 缩小。