最大似然与最大后验
手里有一把带噪声的读数,参数到底是多少?最大似然 (MLE) 的回答是:挑那个让"我真的看到这批数据"最不意外的值。噪声是高斯的,它就恰好等于最小二乘;噪声换成别的形状,就变成别的损失。如果你还有先验知识(地图、数据手册、上一次的标定),把它乘进去,就得到最大后验 (MAP),它在公式里表现为"正则项"。
1为什么机器人需要它
机器人的世界里到处是"从带噪声的数据里反推一个数":超声波传感器对着墙连测 20 次,墙到底有多远?轮子转了几千圈的日志,轮半径是多少?相机标定、陀螺仪零偏、电机常数、激光点云拟合出的墙面……每一个都是同一个问题:参数 \(\theta\) 未知,手里有数据 \(z_1,\dots,z_n\),怎么估?
最大似然给出一个有原则的统一回答,并解释了一件你可能一直当作"理所当然"的事:为什么大家默认用平方误差。因为那等价于假设噪声是高斯的。一旦传感器有野值(激光打到了路人的腿),高斯假设就错了,损失函数也该换。
再往前一步:机器人通常不是从零开始。地图说墙在 2.4 米外,数据手册说这个电机的转矩常数约 0.05。最大后验把这些先验和数据放在同一个公式里,数据少时靠先验兜底,数据多时让数据说话。这也是 4.7 节贝叶斯滤波与 4.8 节卡尔曼滤波的预演:滤波器做的,正是"每来一个读数就更新一次后验"。
2直觉:固定数据,让参数滑动
概率 \(p(z\mid\theta)\) 通常的读法是"参数已知,数据会长什么样"。似然 (likelihood) 把它倒过来读:数据已经看到了、固定不动,把 \(\theta\) 当作变量,问"哪个 \(\theta\) 最能解释这批数据?"。
设每个读数是 \(z_i = \theta + \text{噪声}\),噪声标准差 \(\sigma\) 已知。给定一个候选 \(\theta\),在它周围立一座高斯小山。每个数据点都"落在山的某个高度上",这个高度就是 \(p(z_i\mid\theta)\);把所有高度相乘(数据相互独立),就是这个 \(\theta\) 的似然。拖动小山,看哪里的乘积最大。
- 把 θ 拖到似然的最高点(误差小于 0.05)。它和样本均值是什么关系?
- 点"加一个读数",直到 n ≥ 10。似然的山峰是变宽还是变窄?宽度约为 σ/√n。
- 把一个紫点拖到最右边,使最大似然估计超过 4.1(原来是 3.4)。一个野值能把均值拉多远?
似然是 \(\theta\) 的函数,不是 \(\theta\) 的概率分布:它在 \(\theta\) 上的面积不必等于 1。它只告诉你"相对来说哪个 \(\theta\) 更能解释数据"。把小山拖到别处你会看到:所有竖线几乎同时变矮,乘积以指数速度掉下去,所以实际计算总是用对数似然,把乘积变成求和。
3动手玩:噪声假设决定损失函数
把 FIG 1 的高斯小山取对数:\(\log p(z_i\mid\theta) = -\frac{(z_i-\theta)^2}{2\sigma^2} + \text{常数}\)。最大化它们的和,等价于最小化平方误差之和。你在 1.13 节里学的最小二乘,原来就是"假设噪声是高斯的"的最大似然。
但这是一个假设。如果噪声更容易出现大偏差(拉普拉斯分布、柯西分布等"重尾"分布),负对数似然就不再是二次的:拉普拉斯给出绝对值误差,柯西给出 \(\log(1+r^2)\),它们对远离的点的惩罚增长得慢得多。下面的实验室让你直接对比:拖动数据点,看三种噪声假设的拟合线怎么分道扬镳。
- 切换到拉普拉斯或柯西:让它和高斯拟合在 x = 9 处相差超过 0.8,也就是亲眼看到野值把红线拉歪。
- 把野值拖回直线附近:三条线在 x = 5 和 x = 9 处都相差不到 0.15。数据干净时,噪声假设几乎无所谓。
把读数堆成向量,\(\mathbf z = A\boldsymbol\theta + \boldsymbol\epsilon\),\(\boldsymbol\epsilon\sim\mathcal N(\mathbf 0,\sigma^2 I)\)。对数似然就是 \(-\|\mathbf z - A\boldsymbol\theta\|^2/(2\sigma^2)\) 加常数,它的最大值点就是 \((A^\top A)^{-1}A^\top\mathbf z\),即正规方程的解。噪声方差各不相同时,得到 1.13 节的加权最小二乘,权重就是方差的倒数。红线是这种解;绿线、蓝线没有闭式解,通常用"迭代重加权最小二乘"(每轮给残差大的点降权)求,这里的实现就是如此。柯西损失不是凸的,所以这里从绿线出发迭代,一般的做法也是如此。
4第二个视角:加上先验就是 MAP
贝叶斯定理(4.2 节)说 \(p(\theta\mid z)\propto p(z\mid\theta)\,p(\theta)\):后验 = 似然 × 先验。最大后验 (MAP) 就是取后验的最高点。MLE 只看数据;MAP 还多一个乘法因子,把"在看数据之前我对 \(\theta\) 的看法"也算进去。
最干净的例子是标量高斯:先验 \(\theta\sim\mathcal N(\mu_0,\tau^2)\),\(n\) 个读数,噪声 \(\sigma\)。三条曲线都是高斯,后验的均值是先验均值与数据均值的按精度加权平均。FIG 3 里每一个量都能拖、能调。
- 数据少、先验强:n 在 1 到 3 之间,让数据所占权重 w 低于 0.3。MAP 离 ML 比离先验远还是近?
- 先验错了,但数据够多:让 μ₀ 离数据均值至少 2,同时 w 超过 0.95。先验几乎被淹没。
取负对数,MAP 就是最小化 \(\dfrac{1}{2\sigma^2}\sum_i (z_i-\theta)^2 + \dfrac{1}{2\tau^2}(\theta-\mu_0)^2\):数据拟合项 + 惩罚偏离先验的项。两边乘以 \(2\sigma^2\),惩罚系数就是 \(\lambda^2 = \sigma^2/\tau^2\)。这正是 1.13 节的阻尼最小二乘 / 岭回归(取 \(\mu_0=0\)):阻尼 λ 越大,等价于"我越相信参数应当很小"。选 λ,就是在说你对先验的信心。
5再看数学
提示:悬停下面公式中带底色的符号,FIG 3 中对应的曲线或竖线会高亮。
最大似然
读数相互独立,似然是各个概率之积;对数不改变最大值点,却把积变成和:
噪声是高斯 \(\mathcal N(0,\sigma^2)\) 时,\(-\log p(z_i\mid\theta) = \frac{(z_i-\theta)^2}{2\sigma^2} + \log(\sigma\sqrt{2\pi})\)。于是
换成拉普拉斯噪声(密度 \(\propto e^{-|r|/b}\)),负对数似然是 \(\sum|z_i-\theta|/b\),最大似然估计变成中位数。这就是为什么中位数比均值对野值更"皮实"。对于 \(\sigma\) 本身,最大似然给出 \(\hat\sigma^2_{\mathrm{ML}} = \frac1n\sum_i (z_i-\bar z)^2\)(分母是 \(n\))。它的期望是 \(\frac{n-1}{n}\sigma^2\),系统性偏小,所以常把分母改成 \(n-1\)。
最大后验
对贝叶斯公式取对数。分母 \(p(z)\) 与 \(\theta\) 无关,在 argmax 中消失:
令导数为零,整理成精度(方差的倒数)加权的形式,其中 \(\bar z\) 是数据均值:
这和 4.8 节两个高斯相乘的公式一模一样(那里的预测就是先验,测量就是似然)。三个极端情形值得记住:\(n=0\) 时 \(w=0\),MAP 就是先验;\(n\to\infty\) 时 \(w\to1\),MAP 趋近 MLE;\(\tau\to\infty\)(先验无信息)时同样 \(w\to 1\),MAP = MLE。
先验的形状 = 正则项的形状
| 先验 \(p(\theta)\) | -log 先验 | 名字 |
|---|---|---|
| 高斯 \(\mathcal N(0,\tau^2 I)\) | \(\|\boldsymbol\theta\|_2^2/(2\tau^2)\) | 岭回归 / 阻尼最小二乘(1.13 节) |
| 拉普拉斯 | \(\|\boldsymbol\theta\|_1/b\) | Lasso,倾向于稀疏解 |
| 均匀(平坦) | 常数 | MAP = MLE |
机器学习里的"权重衰减 (weight decay)",就是对网络权重施加了一个高斯先验。
6机器人中的它:用地图先验估计到墙的距离
一台机器人面对一堵墙,用超声波测距,每次读数噪声标准差约 0.35 m。真实距离是 2.00 m。机器人手里有一张过时的地图,上面写着 2.4 m。机器人每测一次,就把"先验 + 目前所有读数"的后验算一次。
注意读数是一个一个到来的:每次的后验就是下一次的先验。这就是递推,也是贝叶斯滤波的雏形。拖动先验的均值与宽度,看 MAP 追上真值要多久。
- 先验错了 0.4 m,但读数足够多:n ≥ 30,MAP 与 ML 相差不到 5 cm。
- 把先验调得过度自信(τ ≤ 0.1),n ≥ 20 时 MAP 仍比 ML 偏离超过 10 cm。盲目相信一张旧地图的代价。
机器人里大量"拟合"其实是 MAP:SLAM 的位姿图优化最小化的就是"里程计约束残差 + 回环约束残差 + 先验"的加权平方和,权重来自各传感器的协方差(信息矩阵);手眼标定、相机内参标定也是最大似然(重投影误差,噪声假设为高斯);怀疑有野值时,换成 Huber 或柯西这样的鲁棒核函数,或者先用 RANSAC 剔除。
7常见误区
\(p(z\mid\theta)\) 对 \(z\) 积分为 1,对 \(\theta\) 积分不一定。"最大似然"是在选使数据最不意外的参数,并不是说"这个参数最可能为真"。要谈"θ 为真的概率",必须有先验,得到后验才行。
只有一个读数时,MLE 说"均值就是这个读数、方差是 0":一个再自信不过的错误。MLE 会在小样本上过拟合。滤波器若用 MLE 估计自己的噪声方差,一旦 \(\hat\sigma\to0\),增益就会变成"完全相信测量"或"完全相信模型",从而发散。小样本时,更多先验或更多数据才是解药。
先验错了,MAP 就带着偏差(FIG 4 里 τ 很小时就是如此)。而且后验的众数不随参数变换而协变:对 \(\sigma\) 做 MAP 与对 \(\sigma^2\) 做 MAP,得到的不是同一个点,因为概率密度在换元时要乘雅可比。"均匀先验"也依赖参数化:对 \(\sigma\) 均匀,对 \(\sigma^2\) 就不均匀。此外,MAP 只是后验的一个点,丢掉了后验的宽度。要保留不确定性,就保留整个后验,这正是贝叶斯滤波做的事。
平方误差意味着"相信噪声是高斯的"。激光打到玻璃、特征点误匹配、GPS 多路径,产生的是野值,FIG 2 里一个野值就能把红线拉歪。真实系统要么用鲁棒核(Huber、Cauchy、Geman–McClure),要么先做一致性检验(RANSAC、卡方门限)。
先验应当来自"数据之外"的知识。若把上一轮估计结果当作这一轮的先验,却又重新使用了已经被用过的读数,信息就被重复计算,后验会过度自信。滤波器里的相关噪声(比如陀螺仪零偏)就容易造成这种事。
8小练习
9延伸阅读
- C. M. Bishop, Pattern Recognition and Machine Learning, Springer, 2006, §1.2.5 & §3.3 — 最大似然、曲线拟合与"权重衰减 = 高斯先验",以及贝叶斯线性回归
- T. D. Barfoot, State Estimation for Robotics, Cambridge University Press, 2017, Ch. 2–3 — 机器人视角下的概率、MAP 与线性高斯估计
- S. Boyd & L. Vandenberghe, Convex Optimization, Cambridge University Press, 2004, §7.1 — 统计估计:ML 与 MAP 写成凸优化问题(线性测量模型下)
- D. J. C. MacKay, Information Theory, Inference, and Learning Algorithms, Cambridge University Press, 2003, Ch. 2 & 3 — 似然原理与推断的直觉,免费电子版
- S. Thrun, W. Burgard & D. Fox, Probabilistic Robotics, MIT Press, 2005, Ch. 2 — 贝叶斯估计的基本概念与递推,4.7 节会用到