Part I · 第 4 章 概率 · 4.1

随机变量与分布

激光测距仪对着同一面墙连测十次,读数从来不会完全一样;轮子"走了 1 米",实际可能是 0.97 米。机器人必须把每个测量、每次动作都当成一个随机变量:取值事先不确定,但并非毫无规律,规律就写在它的分布里。这一节从"我在走廊的哪一格"出发,建立概率质量、概率密度、累积分布这三个最基本的工具。

约 20 分钟 前置:2.3 积分("面积"的含义,可边学边补) 4 个交互

    1为什么机器人需要它

    机器人世界里几乎没有哪个数字是确切的。同一面墙,激光测出来是 2.01 m、1.98 m、2.03 m……;同一个角点,相机今天检测在第 312.4 列,明天在 312.9 列;让电机"转 90°",它可能转了 88°。更糟的是,传感器偶尔还会给出完全离谱的读数:激光打在玻璃上穿了过去,或者被人走过挡了一下。

    如果把测量当成"一个数",机器人只能硬着头皮信它,或者干脆全不信。把它当成随机变量 (random variable),机器人才能问出真正有用的问题:

    • 这次读数是 2.4 m,而我以为墙在 2.0 m,这有多反常?是正常抖动,还是前面有障碍物?
    • 我现在在走廊的哪一格?每一格各有多大把握?
    • 两个传感器说法不一,我该各信几分?

    回答这些问题的语言就是概率。本节只做一件事:把"不确定的数"变成可以计算的对象,也就是分布 (distribution)。后面四节会依次教你怎么用读数更新分布(4.2)、怎么用几个数概括分布(4.3)、最常用的分布长什么样(4.4)、分布怎样穿过一个函数(4.5),最后在 4.8 汇合成卡尔曼滤波。

    2直觉:一根根加起来恒为 1 的柱子

    先看最简单的情形。走廊被分成 8 格,机器人不知道自己在哪一格。把"所在格子的编号"记作 \(X\),它每次取哪个值事先不确定,这样的量就是随机变量。它的"规律"是一张表:每一格对应多大概率。这张表叫概率质量函数 (PMF),画出来就是一排柱子。

    PMF 只有两条铁律:每根柱子 \(\ge 0\);所有柱子的和恰好等于 1,因为机器人一定在某一格里。概率像一桶总量固定的沙子:这一格多分一点,别的格子就得让出来。亲手试一次:在图里按住并拖动任意一根柱子。

    FIG 1离散分布:走廊里的信念
    青色柱子是机器人对"我在第几格"的信念,黄色是下方两个滑块选出的区间 \([a, b]\)(区间内概率相加)。按住拖动柱顶改变它的概率,其余柱子会按比例缩放,总和始终为 1。点"抽样"让机器人"掷骰子":紫色圆圈是抽到各格的实际频率,样本一多,它就贴近柱子。
    试一试
    • 把一格的概率拉到 60% 以上,观察其余七格发生了什么。
    • 点"抽样 ×100",让紫色圆圈和柱顶对齐。再改一下分布,重新抽样一次。
    • 调整分布和区间,使"区间只含 2 格,但概率超过 80%"。
    核心洞见

    分布 = "概率的总量 1 在各个取值上怎么分配"。均匀分布是"毫无头绪",一根独高的柱子是"心里有数",两根高柱子是"在两个地方之间拿不准"。后面所有的滤波器,本质上都是在不断重新分配这桶沙子。

    3动手玩:从样本到密度曲线

    测距读数不是 8 个格子之一,而是一个连续的实数。此时"每个取值的概率"没有意义(任何一个精确的数,被命中的概率都是 0,后面会解释),要用概率密度函数 (PDF) \(f(x)\):把样本按宽度 \(\Delta x\) 分箱,每箱的高度 = 落入该箱的比例 ÷ 箱宽。样本越多、箱越窄,这个"直方图"就越逼近一条光滑曲线,那条曲线就是 \(f(x)\)。

    下面的实验用固定的随机种子依次抽样。拉动 N 看直方图怎么"长出来",再换几种分布:高斯是典型的测距噪声,均匀是"只知道范围",指数是"离下一个意外有多远",双峰是"可能看到墙,也可能看穿门洞"。

    FIG 2直方图收敛到概率密度
    选分布
    青色柱子是前 N 个样本的直方图(高度已除以 N 和箱宽,所以柱子总面积 ≈ 1),黄色曲线是真实的密度 \(f(x)\)。样本点画在底部。读数的单位是米。
    试一试
    • 把 N 拉到 12 以下:直方图和真实曲线差多远?只看这几个点,你能认出这是哪种分布吗?
    • N 拉到 2000 以上,箱数设在 12 到 40 之间:柱顶是否紧贴曲线?
    • 保持 N 不变,把箱数拉到 55 以上:直方图变得又细又毛。箱宽太窄时,每个箱里没几个样本,结果反而更不可信。
    分布是"无限多次"后的样子

    你手里永远只有有限个样本,分布本身是摸不到的理想对象。样本是分布的"证据",分布是样本的"模型"。把两者混为一谈是初学者的头号误区(见第 7 节)。

    4第二个视角:概率是面积,累积分布是面积的累计

    连续随机变量落在区间 \([a, b]\) 里的概率,等于密度曲线在这一段下面的面积。曲线的"高度"本身不是概率,只有乘上宽度(也就是面积)才是。这带来两个看似反常、其实顺理成章的事实:

    • 密度值可以大于 1(只要总面积是 1,窄而高的曲线是完全合法的);
    • 区间缩成一个点,面积变成 0,所以任何单个精确值的概率都是 0,哪怕这个值的密度很高。

    另一种记账方式是累积分布函数 (CDF) \(F(x) = P(X \le x)\):从最左边一路累计面积。CDF 从 0 单调升到 1,而 \(P(a \lt X \le b) = F(b) - F(a)\),也就是 CDF 上两点的纵坐标之差。拖动图中的 \(a\)、\(b\) 看看这两种读法怎么对上。

    FIG 3面积 = 概率;CDF = 面积的累计
    拖动上图或下图里的两个圆点 \(a\)、\(b\)。黄色阴影的面积就是 \(P(a \le X \le b)\);下图里同一个概率是 黄色竖线段的长度 \(F(b) - F(a)\)。可以换三种分布,注意"窄均匀分布"的密度高达 2。
    试一试
    • 选"窄均匀"分布:确认密度值是 2,可总面积仍是 1。
    • 把 \(a\) 和 \(b\) 挤到一起(宽度 < 0.03):面积趋于 0,哪怕此处密度不小。
    • 在"标准高斯"里令 \(a = -2,\ b = 2\):概率约为 0.954。这是"±2σ 约含 95%"的来历。

    5再看数学

    提示:悬停带底色的公式部分,对应图中的柱子、阴影或曲线会高亮(FIG 1 和 FIG 3)。

    离散:概率质量函数

    随机变量写大写 \(X\),它的一个具体取值写小写 \(x\)。若 \(X\) 只取可数个值 \(x_1, x_2, \dots\),PMF 为 \(p(x_i) = P(X = x_i)\),满足

    $$ \hl{pmf}{p(x_i) \ge 0,\qquad \sum_i p(x_i) = 1}, \qquad P(X \in A) = \sum_{x_i \in A} p(x_i). $$

    连续:密度与累积分布

    连续随机变量用密度 \(f(x) \ge 0\) 描述,概率是面积;CDF 是从左到 \(x\) 的累计面积,反过来,密度是 CDF 的斜率:

    $$ \hl{area}{P(a \le X \le b) = \int_a^b f(x)\,dx}, \qquad \int_{-\infty}^{\infty} f(x)\,dx = 1 $$ $$ F(x) = P(X \le x) = \int_{-\infty}^{x} f(t)\,dt, \qquad \hl{dens}{f(x) = F'(x)} $$ $$ \hl{cdf}{P(a \lt X \le b) = F(b) - F(a)} $$

    离散与连续可以统一:离散时把积分换成求和,\(f\) 换成 \(p\)。注意 \(f(x)\,dx\) 才对应"概率":\(f(x)\) 是"每单位 \(x\) 的概率",所以它的单位是 \(x\) 单位的倒数,数值可以大于 1。

    多个变量:联合、边缘与独立

    机器人的状态往往是好几个变量一起:位置 \((x, y)\)、朝向 \(\theta\)。它们的联合分布 \(p(x, y)\) 描述"同时取这两个值"的可能性。想只关心其中一个,就把另一个积掉,得到边缘分布 (marginal);如果联合分布恰好等于两个边缘的乘积,就称两个变量独立:

    $$ p(x) = \int p(x, y)\,dy \;\;\Big/\;\; \sum_y p(x, y), \qquad X \perp Y \;\iff\; p(x, y) = p(x)\,p(y). $$

    "在已知 \(Y\) 的前提下 \(X\) 的分布"叫条件分布,它是下一节(4.2)的主角,贝叶斯定理就从它来。

    符号含义在图里
    \(X,\ x\)随机变量与它的一个取值FIG 1 的格子编号
    \(p(x_i)\)概率质量:\(X = x_i\) 的概率FIG 1 的柱高
    \(f(x)\)概率密度:单位长度上的概率FIG 2、FIG 3 的曲线高度
    \(F(x)\)累积分布:\(P(X \le x)\)FIG 3 下图
    \(p(x, y)\)联合分布4.3 起的二维图
    机器人学里的写法

    机器人学的文献里经常省略大小写,直接写 \(p(x)\),让上下文说明它是 PMF 还是 PDF。状态记作 \(x\),测量记作 \(z\),控制记作 \(u\),对状态的信念记作 \(\mathrm{bel}(x)\)。本课程也这样写(符号遵循 Thrun 等人的 Probabilistic Robotics)。

    6机器人中的它:激光测距的传感器模型

    真实的激光读数 \(z\) 并不是"真值加一点高斯噪声"这么干净。要给传感器建模,就是写出给定机器人的真实状态,读数的分布 \(p(z \mid x)\)。对一束激光,若墙真的在 \(z^*\),经典的"光束模型"(beam model) 把读数分布写成四种成因的混合 (mixture):

    • 命中:正常测到那面墙,读数是以 \(z^*\) 为中心的高斯;
    • 过短:光束被意外的东西(行人、灰尘)挡住,读数落在 \(z^*\) 之前,近处更常见,用截断指数分布;
    • 最大量程:什么都没打到(或打在玻璃、黑色吸光物上),传感器返回 \(z_{\max}\),这是一个点质量;
    • 随机:毫无来由的乱读数,在 \([0, z_{\max}]\) 上均匀分布。

    四种成因各占一定比例,比例之和为 1。拖动图中的 \(z^*\),调整滑块,看总分布(黄色)怎么由四块拼成。

    FIG 4光束模型:四种成因的混合
    黄色曲线是总密度,细曲线是四个成分乘以各自权重后的样子(颜色同上文);绿色竖线是 \(z_{\max}\) 处的点质量(高度无意义,只标出概率)。青色柱子是 1500 次模拟读数的直方图。拖动底部的圆点改变真实距离 \(z^*\)。
    试一试
    • 拖动 \(z^*\):命中峰跟着走,"过短"的那块面积随着 \(z^*\) 变长而变宽(它只在 \(z^*\) 之前有值)。
    • 选"拥挤的人群"预设,让命中成分低于 60%:这时一个读数"打在墙上"的把握有多大?

    写成公式

    $$ p(z \mid z^*) = \hl{hit}{\cx{w_{\text{hit}}\,\mathcal N(z;\, z^*, \sigma^2)}} + \hl{short}{\ci{w_{\text{short}}\,\eta\,\lambda e^{-\lambda z}\,\mathbf 1[z \lt z^*]}} + \hl{max}{\cj{w_{\max}\,\delta(z - z_{\max})}} + \hl{rand}{\cw{w_{\text{rand}}\,\tfrac{1}{z_{\max}}}}, $$ $$ w_{\text{hit}} + w_{\text{short}} + w_{\max} + w_{\text{rand}} = 1, \qquad \eta = \frac{1}{1 - e^{-\lambda z^*}}. $$

    \(\eta\) 只是保证"过短"成分的总面积是 1 的归一化常数,\(\delta\) 是点质量(狄拉克函数)。这个模型的威力在于诚实:它承认传感器会出错,所以遇到一个离谱读数,不会得出"概率为 0,不可能"的结论,只会觉得"有点可疑"。如果只用纯高斯,一个 3 米外的离群点会让似然几乎为 0,整个滤波器会被它带崩。

    真实系统里

    蒙特卡洛定位 (AMCL,ROS 导航栈的标配) 的激光模型有两种:一种就是这里的光束模型,一种是更便宜的"似然场模型"。它们的参数 \(w_\cdot, \sigma, \lambda\) 通常从真实数据里拟合:让机器人对着已知墙壁扫几千次,用最大似然估计(本章 4.6)把这四个比例和两个宽度找出来。

    7常见误区

    误区 1:把密度当成概率

    "\(f(2.0) = 3.99\),概率怎么会是 399%?" 因为 \(f\) 不是概率,\(f(x)\,dx\) 才是。同样,"在 2.0 m 处读数的概率"这句话本身就问错了:问"读数落在 \([1.99, 2.01]\) 里的概率"才有意义,答案大约是 \(f(2.0) \times 0.02\)。

    误区 2:把样本当成分布,把"随机"当成"不存在"

    三个读数的平均值不是真值,三个读数的直方图也不是分布(FIG 2 里 N 很小时的样子)。另外,"随机"不一定指世界在掷骰子。墙就在 2.000 m 处,一动不动,随机性来自我们的知识不完整。机器人的位置是确定的,只是它自己不知道,于是用分布来表示"我的把握"。这种用概率描述信念的观点,是整个概率机器人学的出发点。

    误区 3:不归一化

    你经常会先得到"正比于概率"的数(比如每格的得分 1, 2, 5),而不是概率本身。它们加起来不是 1,不能当分布用。除以总和(归一化)才行:\(p_i = w_i / \sum_j w_j\)。下一节的贝叶斯更新,最后一步就是这个。

    误区 4:不相关就是独立

    两个变量独立,则它们互不影响;反过来不成立。4.3 节会给出一个反例:\(y = x^2\) 完全由 \(x\) 决定,但它们"线性相关系数"恰好是 0。

    8小练习

    1. \(X\) 在区间 \([0, 0.5]\) 上均匀分布,则它的密度 \(f(x)\)(\(0 \le x \le 0.5\))等于?
    总面积必须是 1,底宽 0.5,所以高度是 \(1 / 0.5 = 2\)。密度是"每单位长度的概率",完全可以大于 1,只有概率(面积)不能超过 1。
    2. 对标准高斯 \(X \sim \mathcal N(0, 1)\),\(P(X = 0)\) 是多少?
    0.399 是 \(x = 0\) 处的密度,不是概率。区间缩成一个点后面积为 0,所以连续变量取任何单个精确值的概率都是 0。有意义的是 \(P(|X| \lt 0.01) \approx 0.399 \times 0.02 \approx 0.008\)。
    3. 三格走廊里,机器人给三格打了"可信度分数"1、2、5。归一化后第三格的概率是?
    总和 \(1 + 2 + 5 = 8\),第三格是 \(5/8 = 0.625\)(另外两格是 0.125 和 0.25)。
    4. 光束模型为什么要在高斯"命中"之外加上"过短""最大量程""随机"三个成分?
    混合模型给"不可能"的读数留了一点点概率质量,这样即使遇到离谱数据,信念也只是被轻微削弱而不是被彻底否定。总权重仍是 1,面积不会超过 1。

    9延伸阅读

    • S. Thrun, W. Burgard & D. Fox, Probabilistic Robotics, MIT Press, 2005, Sec. 2.2 and Sec. 6.3 — 机器人学里的概率记号,以及本节的光束测距模型
    • T. D. Barfoot, State Estimation for Robotics, Cambridge University Press, 2017, Ch. 2 — 面向机器人的概率论速成
    • C. M. Bishop, Pattern Recognition and Machine Learning, Springer, 2006, Sec. 1.2 — 概率密度、期望与高斯分布,讲得清晰
    • J. Blitzstein & J. Hwang, Introduction to Probability, CRC Press — 哈佛 Stat 110 的教材,例子丰富,适合建立直觉
    • C. M. Grinstead & J. L. Snell, Introduction to Probability, American Mathematical Society — 可免费下载的入门教材