现在位置: 首页 > AI 数学基础 > 正文

最大似然估计与最大后验估计

MLE 和 MAP 是统计推断的两种核心方法。训练神经网络的本质 ≈ 最大似然估计。


概念解析

假设你手里有一组观测数据,你相信这些数据来自某个已知类型的概率分布(比如正态分布),但不知道这个分布的参数(均值 μ 和标准差 σ)。

MLE 和 MAP 回答的是同一个问题:给定数据,最合理的参数值是多少?

两者的区别在于——MLE 只看数据本身,MAP 还会参考你对参数的先验认知。

似然 vs 概率:两个方向看同一件事

概率 P(数据|参数):参数固定,问「在这个参数下,观察到这些数据的概率多大?」

似然 L(参数|数据):数据固定,问「哪个参数值最可能产生这些数据?」

似然函数的值本身不归一(不要求和为 1),它的意义在于 比较不同参数值的相对合理性

MLE:什么参数最可能生成这些数据?

\[ \hat{\theta}_{\text{MLE}} = \arg\max_\theta P(D | \theta) \]

只看数据,选择最可能产生观测数据的参数。

为什么取 log?

  • 连乘变连加:数值更稳定(防止下溢)
  • 求导更容易:对数把乘法变成加法
  • 不改变极值点:log 是单调递增函数

MAP:引入先验知识

\[ \hat{\theta}_{\text{MAP}} = \arg\max_\theta P(\theta | D) = \arg\max_\theta P(D | \theta) \cdot P(\theta) \]

MAP = MLE + 先验 P(θ)。当先验是均匀分布时,MAP = MLE。

MLE 只看数据,MAP 还看先验。数据量大时先验影响被稀释,MAP 趋近 MLE。

数据量小时,先验起到「正则化」作用——L2 正则化 ≡ Gaussian 先验的 MAP。


生活例子

估计日均销量

网店连续 10 天日销量:[23, 25, 22, 24, 26, 23, 25, 24, 22, 24]。

假设销量服从正态分布,均值的 MLE 估计 = 这些数的平均值 ≈ 23.8。

直觉上你也会这样做——MLE 就是把直觉数学化了。


Python 动手实践

实例

import numpy as np

np.random.seed(42)
data = np.random.normal(5.0, 2.0, 100)  # 真实 μ=5, σ=2

# MLE: μ = 样本均值
mu_mle = np.mean(data)
print(f"MLE μ = {mu_mle:.3f} (真实=5.0)")

# MAP: 先验 μ ~ N(0, 1),向先验方向收缩
prior_mu, prior_var = 0.0, 1.0
n = len(data)
mu_map = (prior_mu/prior_var + n*mu_mle/np.std(data)**2) / (1/prior_var + n/np.std(data)**2)
print(f"MAP μ = {mu_map:.3f} (在MLE和先验0之间折中)")

运行输出:

MLE μ = 4.968 (真实=5.0)
MAP μ = 4.776 (在MLE和先验0之间折中)

AI 中的应用场景

损失函数设计 = MLE

最小化交叉熵损失 ≈ 在多项分布假设下做最大似然估计。最小化 MSE ≈ 在误差正态分布假设下做 MLE。损失函数不是随意选的——每种损失函数对应一个隐含的概率分布假设。

L2 正则化 = Gaussian 先验的 MAP

在损失中加 \( \lambda\|w\|^2 \),等价于假设权重 w 的先验是 \( N(0, 1/\lambda) \)。MAP 在数据似然和先验之间折中——数据少时先验主导(权重趋向 0),数据多时似然主导。

L1 正则化 = Laplace 先验的 MAP

在损失中加 \( \lambda\|w\|_1 \),等价于假设权重 w 的先验是 \( Laplace(0, 1/\lambda) \) 分布。Laplace 分布在 0 点尖锐——MAP 倾向于产生稀疏解(很多权重恰好为 0),实现了自动特征选择。

贝叶斯神经网络

普通神经网络的权重是确定的点估计(MLE/MAP)。贝叶斯神经网络给每个权重赋予一个概率分布(后验),输出也是概率分布——从而有天然的 uncertainty estimation。预测时可以对权重采样多次,看输出的方差来判断模型对自己预测的置信度。