统计学
最大似然估计
最大似然估计(Maximum Likelihood Estimation, MLE) 是用来估计一个概率模型参数的一个方法。简单来说,MLE根据手中已有的数据(结果),来逆推最有可能产生这些数据的模型参数(原因),因此这是一种由果索因的方法。
无论是最简单的算平均值,还是训练ChatGPT,核心逻辑都是这么几步:
- 设计模型,即假设数据符合某种分布,如:\(P(x|\theta)\),\(\theta\) 是未知参数。
- 写似然(Likelihood):把所有数据的概率乘起来,求这组数据集体出现的概率
- 取对数(Log-Likelihood):为了好计算,把乘法变成加法
- 求最大值(Maximize):对于简单模型,可以直接求解析解;对于复杂模型,可以用梯度下降法逼近
正态分布案例
我们举一个正态分布的案例:你是某品牌橙汁工厂的厂长,你的瓶子上印着净含量:500ml。法律规定:不能超过1%的瓶子少于500ml,否则会被市场监管局重罚。(即不合格率不能超过1%)
现在,我们的机器是不完美的,有时候灌502ml,有时候498ml。机器上有两个旋钮:
- 目标设定值(\(\mu\)): 你设定机器瞄准多少毫升灌。
- 精度/稳定性(\(\sigma\)): 机器越贵、维护越好,波动越小(\(\sigma\) 越小)。
现在,我们刚修完机器,随机抽检了10瓶果汁,测量了他们的实际体积,测量结果如下(单位 ml):
现在你需要回答两个问题:
- 现在的机器状态是什么? (求 \(\mu\) 和 \(\sigma\))——因为维修后我们不知道机器状态。
- 我会不会被罚款? (计算 \(P(X < 500)\) 的概率)
第一步,模型假设与参数估计。
一眼看过去,好像都在 500 附近,平均值应该比 500 大一点点。但到底安不安全?靠眼睛看不出来。我们假设灌装误差是由无数个微小因素(电压波动、气压、机械磨损)叠加的。我们假设他们是服从正态分布(Normal Distribution) 的。模型公式记作:\(X \sim N(\mu, \sigma^2)\),这里有两个我们不知道的“参数”:
- \(\mu\)(均值): 代表机器的真实准星。
- \(\sigma\)(标准差): 代表机器的真实抖动幅度。
第二步,写似然函数。
既然这 10 个数据(502, 501...)已经实实在在地发生了,那么机器的参数(\(\mu\) 和 \(\sigma\)),一定就是让这组数据出现概率最大的那一组参数。换句话说,我们已经看到了一组结果,那么我们要反推的就是最可能导致这个结果的那一组参数(在这里就是\(\mu\) 和 \(\sigma\))。
在“由果索因”的逻辑下,似然函数(Likelihood Function) 的本质就是:把这 10 个数据同时发生的概率用公式写出来。既然我们假设每一瓶果汁的灌装是互相独立的,那么 10 瓶果汁同时出现这些特定数值的总概率,就是 每一瓶概率的乘积 。
对于任何一瓶果汁 \(x_i\),它出现的概率(概率密度)由正态分布公式决定:
们将这 10 个概率乘在一起。似然函数通常记作 \(L(\mu, \sigma)\):
用数学符号 \(\prod\)(连乘符号)表示就是:
为了方便你看清它的结构,我们利用指数的性质(底数相同,指数相加),把它展开:
整理合并后,这就是最终的 似然函数 :
(注:前面是 10 次方,但因为根号和平方的关系简化为了 5 次方;\(\exp\) 就是 \(e\) 的次方)
这个公式现在是一个关于 \(\mu\) 和 \(\sigma\) 的函数:
- \(x_i\) 是已知的: 就是你量出的那 10 个数(502, 501...)。
- \(\mu\) 和 \(\sigma\) 是变量: 它们就像收音机上的两个旋钮。
最大似然估计的任务就是: 我们要不断地旋转 \(\mu\) 和 \(\sigma\) 这两个旋钮,直到上面这个 \(L\) 的值达到 最大 。当 \(L\) 最大时,那一组 \(\mu\) 和 \(\sigma\) 就是我们要找的“最可能导致这个结果”的参数。
第三步,取对数
在数学上,我们要把这 10 个数据的概率乘起来。正态分布的概率密度函数 \(f(x)\) 含有 \(e\) 的指数。
如果你直接对这个连乘求导,你会算到怀疑人生。于是我们取 对数(\(\ln\)) ,利用 \(\ln(A \cdot B) = \ln A + \ln B\) 的性质,把“连乘”变“连加”:
整理一下:
第四步,求最大值
为了找到让概率最大的 \(\mu\),我们需要对 \(\mu\) 求导 ,并令导数为 0。
你会发现,式子中只有最后一项跟 \(\mu\) 有关。对 \(\mu\) 求偏导:
解方程:
这个结果说明:最佳的 \(\mu\) 就是样本平均值。
同理,对 \(\sigma^2\) 求偏导,可以解得:
这就是样本标准差。
我们把刚才的十个样本带入,求得\(\mu\)(均值):
\(\sigma\)(标准差)算出来大约是2.32。
现在我们可以得到结论:机器准星瞄在 501ml ,但由于维修后的稳定性问题,波动(标准差)达到了 2.32ml 。
那对于第二个问题,我们是否会被罚款呢?
计算 Z 分数 (看看 500 偏离了中心几个标准差):
查标准正态分布表:\(P(Z < -0.43) \approx \mathbf{33.36\%}\)
这表明我们的机器现在会产出33.36%的不合格产品,这是严重不合格的。
由于你现在的 \(\sigma = 2.32\) 太大,你面临两个选择:
- 维修机器: 把 \(\sigma\) 降到 0.43 以下(保持 \(\mu=501\) 不变)。
- 暴力加量: 保持 \(\sigma=2.32\) 不变,但把准星 \(\mu\) 调高到 505.4ml 以上。
理由:在正态分布中,如果我们希望左侧阴影面积(不合格率)只有 1% ,查标准正态分布表可以得到一个关键的常数: \(Z = -2.326\) 。这意味着: 500ml 必须位于均值 \(\mu\) 左侧至少 2.326 倍标准差(\(\sigma\))的地方 。公式表达为:
如果决定不改变准星(保持 \(\mu = 501\) ),而是通过维修机器来提高稳定性(减小 \(\sigma\) )。
我们将已知数代入公式:
结论: 如果你不想多送果汁给顾客(维持在 501ml),你就必须把机器的抖动(\(\sigma\))从原来的 2.32 降低到 0.43 。这说明你需要极大幅度地提升机器精度。
暴力加量的方案则是承认机器修不好(保持 \(\sigma = 2.32\) ),但为了不违法,你只能把准星调高(增加 \(\mu\) ),用“多送果汁”来换取合规。
我们将已知数代入公式:
解方程:
结论: 如果机器还是这么抖,为了保证 99% 的瓶子都超过 500ml,你的准星必须瞄准在 505.4ml 。这意味着你平均每瓶要多送 5.4ml 给顾客。