.. _sec_prob: 概率 ==== 简单地说,机器学习就是做出预测。 根据病人的临床病史,我们可能想预测他们在下一年心脏病发作的\ *概率*\ 。 在飞机喷气发动机的异常检测中,我们想要评估一组发动机读数为正常运行情况的概率有多大。 在强化学习中,我们希望智能体(agent)能在一个环境中智能地行动。 这意味着我们需要考虑在每种可行的行为下获得高奖励的概率。 当我们建立推荐系统时,我们也需要考虑概率。 例如,假设我们为一家大型在线书店工作,我们可能希望估计某些用户购买特定图书的概率。 为此,我们需要使用概率学。 有完整的课程、专业、论文、职业、甚至院系,都致力于概率学的工作。 所以很自然地,我们在这部分的目标不是教授整个科目。 相反,我们希望教给读者基础的概率知识,使读者能够开始构建第一个深度学习模型, 以便读者可以开始自己探索它。 现在让我们更认真地考虑第一个例子:根据照片区分猫和狗。 这听起来可能很简单,但对于机器却可能是一个艰巨的挑战。 首先,问题的难度可能取决于图像的分辨率。 .. _fig_cat_dog: .. figure:: ../img/cat-dog-pixels.png :width: 300px 不同分辨率的图像 (:math:`10 \times 10`, :math:`20 \times 20`, :math:`40 \times 40`, :math:`80 \times 80`, 和 :math:`160 \times 160` pixels) 如 :numref:`fig_cat_dog`\ 所示,虽然人类很容易以\ :math:`160 \times 160`\ 像素的分辨率识别猫和狗, 但它在\ :math:`40\times40`\ 像素上变得具有挑战性,而且在\ :math:`10 \times 10`\ 像素下几乎是不可能的。 换句话说,我们在很远的距离(从而降低分辨率)区分猫和狗的能力可能会变为猜测。 概率给了我们一种正式的途径来说明我们的确定性水平。 如果我们完全肯定图像是一只猫,我们说标签\ :math:`y`\ 是”猫”的\ *概率*\ ,表示为\ :math:`P(y=`\ “猫”\ :math:`)`\ 等于\ :math:`1`\ 。 如果我们没有证据表明\ :math:`y=`\ “猫”或\ :math:`y=`\ “狗”,那么我们可以说这两种可能性是相等的, 即\ :math:`P(y=`\ “猫”\ :math:`)=P(y=`\ “狗”\ :math:`)=0.5`\ 。 如果我们不十分确定图像描绘的是一只猫,我们可以将概率赋值为\ :math:`0.5 1`\ 时的\ :math:`\mathcal{A}_i = \emptyset`\ , 那么我们可以证明\ :math:`P(\emptyset) = 0`\ ,即不可能发生事件的概率是\ :math:`0`\ 。 随机变量 ~~~~~~~~ 在我们掷骰子的随机实验中,我们引入了\ *随机变量*\ (random variable)的概念。 随机变量几乎可以是任何数量,并且它可以在随机实验的一组可能性中取一个值。 考虑一个随机变量\ :math:`X`\ ,其值在掷骰子的样本空间\ :math:`\mathcal{S}=\{1,2,3,4,5,6\}`\ 中。 我们可以将事件“看到一个\ :math:`5`\ ”表示为\ :math:`\{X=5\}`\ 或\ :math:`X=5`\ , 其概率表示为\ :math:`P(\{X=5\})`\ 或\ :math:`P(X=5)`\ 。 通过\ :math:`P(X=a)`\ ,我们区分了随机变量\ :math:`X`\ 和\ :math:`X`\ 可以采取的值(例如\ :math:`a`\ )。 然而,这可能会导致繁琐的表示。 为了简化符号,一方面,我们可以将\ :math:`P(X)`\ 表示为随机变量\ :math:`X`\ 上的\ *分布*\ (distribution): 分布告诉我们\ :math:`X`\ 获得某一值的概率。 另一方面,我们可以简单用\ :math:`P(a)`\ 表示随机变量取值\ :math:`a`\ 的概率。 由于概率论中的事件是来自样本空间的一组结果,因此我们可以为随机变量指定值的可取范围。 例如,\ :math:`P(1 \leq X \leq 3)`\ 表示事件\ :math:`\{1 \leq X \leq 3\}`\ , 即\ :math:`\{X = 1, 2, \text{or}, 3\}`\ 的概率。 等价地,\ :math:`P(1 \leq X \leq 3)`\ 表示随机变量\ :math:`X`\ 从\ :math:`\{1, 2, 3\}`\ 中取值的概率。 请注意,\ *离散*\ (discrete)随机变量(如骰子的每一面) 和\ *连续*\ (continuous)随机变量(如人的体重和身高)之间存在微妙的区别。 现实生活中,测量两个人是否具有完全相同的身高没有太大意义。 如果我们进行足够精确的测量,最终会发现这个星球上没有两个人具有完全相同的身高。 在这种情况下,询问某人的身高是否落入给定的区间,比如是否在1.79米和1.81米之间更有意义。 在这些情况下,我们将这个看到某个数值的可能性量化为\ *密度*\ (density)。 高度恰好为1.80米的概率为0,但密度不是0。 在任何两个不同高度之间的区间,我们都有非零的概率。 在本节的其余部分中,我们将考虑离散空间中的概率。 连续随机变量的概率可以参考深度学习数学附录中\ `随机变量 `__ 的一节。 处理多个随机变量 ---------------- 很多时候,我们会考虑多个随机变量。 比如,我们可能需要对疾病和症状之间的关系进行建模。 给定一个疾病和一个症状,比如“流感”和“咳嗽”,以某个概率存在或不存在于某个患者身上。 我们需要估计这些概率以及概率之间的关系,以便我们可以运用我们的推断来实现更好的医疗服务。 再举一个更复杂的例子:图像包含数百万像素,因此有数百万个随机变量。 在许多情况下,图像会附带一个\ *标签*\ (label),标识图像中的对象。 我们也可以将标签视为一个随机变量。 我们甚至可以将所有元数据视为随机变量,例如位置、时间、光圈、焦距、ISO、对焦距离和相机类型。 所有这些都是联合发生的随机变量。 当我们处理多个随机变量时,会有若干个变量是我们感兴趣的。 联合概率 ~~~~~~~~ 第一个被称为\ *联合概率*\ (joint probability)\ :math:`P(A=a,B=b)`\ 。 给定任意值\ :math:`a`\ 和\ :math:`b`\ ,联合概率可以回答:\ :math:`A=a`\ 和\ :math:`B=b`\ 同时满足的概率是多少? 请注意,对于任何\ :math:`a`\ 和\ :math:`b`\ 的取值,\ :math:`P(A = a, B=b) \leq P(A=a)`\ 。 这点是确定的,因为要同时发生\ :math:`A=a`\ 和\ :math:`B=b`\ ,\ :math:`A=a`\ 就必须发生,\ :math:`B=b`\ 也必须发生(反之亦然)。因此,\ :math:`A=a`\ 和\ :math:`B=b`\ 同时发生的可能性不大于\ :math:`A=a`\ 或是\ :math:`B=b`\ 单独发生的可能性。 条件概率 ~~~~~~~~ 联合概率的不等式带给我们一个有趣的比率: :math:`0 \leq \frac{P(A=a, B=b)}{P(A=a)} \leq 1`\ 。 我们称这个比率为\ *条件概率*\ (conditional probability), 并用\ :math:`P(B=b \mid A=a)`\ 表示它:它是\ :math:`B=b`\ 的概率,前提是\ :math:`A=a`\ 已发生。 贝叶斯定理 ~~~~~~~~~~ 使用条件概率的定义,我们可以得出统计学中最有用的方程之一: *Bayes定理*\ (Bayes’ theorem)。 根据\ *乘法法则*\ (multiplication rule )可得到\ :math:`P(A, B) = P(B \mid A) P(A)`\ 。 根据对称性,可得到\ :math:`P(A, B) = P(A \mid B) P(B)`\ 。 假设\ :math:`P(B)>0`\ ,求解其中一个条件变量,我们得到 .. math:: P(A \mid B) = \frac{P(B \mid A) P(A)}{P(B)}. 请注意,这里我们使用紧凑的表示法: 其中\ :math:`P(A, B)`\ 是一个\ *联合分布*\ (joint distribution), :math:`P(A \mid B)`\ 是一个\ *条件分布*\ (conditional distribution)。 这种分布可以在给定值\ :math:`A = a, B=b`\ 上进行求值。 边际化 ~~~~~~ 为了能进行事件概率求和,我们需要\ *求和法则*\ (sum rule), 即\ :math:`B`\ 的概率相当于计算\ :math:`A`\ 的所有可能选择,并将所有选择的联合概率聚合在一起: .. math:: P(B) = \sum_{A} P(A, B), 这也称为\ *边际化*\ (marginalization)。 边际化结果的概率或分布称为\ *边际概率*\ (marginal probability) 或\ *边际分布*\ (marginal distribution)。 独立性 ~~~~~~ 另一个有用属性是\ *依赖*\ (dependence)与\ *独立*\ (independence)。 如果两个随机变量\ :math:`A`\ 和\ :math:`B`\ 是独立的,意味着事件\ :math:`A`\ 的发生跟\ :math:`B`\ 事件的发生无关。 在这种情况下,统计学家通常将这一点表述为\ :math:`A \perp B`\ 。 根据贝叶斯定理,马上就能同样得到\ :math:`P(A \mid B) = P(A)`\ 。 在所有其他情况下,我们称\ :math:`A`\ 和\ :math:`B`\ 依赖。 比如,两次连续抛出一个骰子的事件是相互独立的。 相比之下,灯开关的位置和房间的亮度并不是(因为可能存在灯泡坏掉、电源故障,或者开关故障)。 由于\ :math:`P(A \mid B) = \frac{P(A, B)}{P(B)} = P(A)`\ 等价于\ :math:`P(A, B) = P(A)P(B)`\ , 因此两个随机变量是独立的,当且仅当两个随机变量的联合分布是其各自分布的乘积。 同样地,给定另一个随机变量\ :math:`C`\ 时,两个随机变量\ :math:`A`\ 和\ :math:`B`\ 是\ *条件独立的*\ (conditionally independent), 当且仅当\ :math:`P(A, B \mid C) = P(A \mid C)P(B \mid C)`\ 。 这个情况表示为\ :math:`A \perp B \mid C`\ 。 .. _subsec_probability_hiv_app: 应用 ~~~~ 我们实战演练一下! 假设一个医生对患者进行艾滋病病毒(HIV)测试。 这个测试是相当准确的,如果患者健康但测试显示他患病,这个概率只有1%; 如果患者真正感染HIV,它永远不会检测不出。 我们使用\ :math:`D_1`\ 来表示诊断结果(如果阳性,则为\ :math:`1`\ ,如果阴性,则为\ :math:`0`\ ), :math:`H`\ 来表示感染艾滋病病毒的状态(如果阳性,则为\ :math:`1`\ ,如果阴性,则为\ :math:`0`\ )。 在 :numref:`conditional_prob_D1`\ 中列出了这样的条件概率。 .. _conditional_prob_D1: .. table:: 条件概率为\ :math:`P(D_1 \mid H)` ========================= =========== =========== 条件概率 :math:`H=1` :math:`H=0` ========================= =========== =========== :math:`P(D_1 = 1 \mid H)` 1 0.01 :math:`P(D_1 = 0 \mid H)` 0 0.99 ========================= =========== =========== 请注意,每列的加和都是1(但每行的加和不是),因为条件概率需要总和为1,就像概率一样。 让我们计算如果测试出来呈阳性,患者感染HIV的概率,即\ :math:`P(H = 1 \mid D_1 = 1)`\ 。 显然,这将取决于疾病有多常见,因为它会影响错误警报的数量。 假设人口总体是相当健康的,例如,\ :math:`P(H=1) = 0.0015`\ 。 为了应用贝叶斯定理,我们需要运用边际化和乘法法则来确定 .. math:: \begin{aligned} &P(D_1 = 1) \\ =& P(D_1=1, H=0) + P(D_1=1, H=1) \\ =& P(D_1=1 \mid H=0) P(H=0) + P(D_1=1 \mid H=1) P(H=1) \\ =& 0.011485. \end{aligned} 因此,我们得到 .. math:: \begin{aligned} &P(H = 1 \mid D_1 = 1)\\ =& \frac{P(D_1=1 \mid H=1) P(H=1)}{P(D_1=1)} \\ =& 0.1306 \end{aligned}. \ 换句话说,尽管使用了非常准确的测试,患者实际上患有艾滋病的几率只有13.06%。 正如我们所看到的,概率可能是违反直觉的。 患者在收到这样可怕的消息后应该怎么办? 很可能,患者会要求医生进行另一次测试来确定病情。 第二个测试具有不同的特性,它不如第一个测试那么精确, 如 :numref:`conditional_prob_D2`\ 所示。:条件概率为\ :math:`P(D_2 \mid H)` .. table:: label:``conditional_prob_D2`` ========================= =========== =========== 条件概率 :math:`H=1` :math:`H=0` ========================= =========== =========== :math:`P(D_2 = 1 \mid H)` 0.98 0.03 :math:`P(D_2 = 0 \mid H)` 0.02 0.97 ========================= =========== =========== 不幸的是,第二次测试也显示阳性。让我们通过假设条件独立性来计算出应用Bayes定理的必要概率: .. math:: \begin{aligned} &P(D_1 = 1, D_2 = 1 \mid H = 0) \\ =& P(D_1 = 1 \mid H = 0) P(D_2 = 1 \mid H = 0) \\ =& 0.0003, \end{aligned} .. math:: \begin{aligned} &P(D_1 = 1, D_2 = 1 \mid H = 1) \\ =& P(D_1 = 1 \mid H = 1) P(D_2 = 1 \mid H = 1) \\ =& 0.98. \end{aligned} 现在我们可以应用边际化和乘法规则: .. math:: \begin{aligned} &P(D_1 = 1, D_2 = 1) \\ =& P(D_1 = 1, D_2 = 1, H = 0) + P(D_1 = 1, D_2 = 1, H = 1) \\ =& P(D_1 = 1, D_2 = 1 \mid H = 0)P(H=0) + P(D_1 = 1, D_2 = 1 \mid H = 1)P(H=1)\\ =& 0.00176955. \end{aligned} 最后,鉴于存在两次阳性检测,患者患有艾滋病的概率为 .. math:: \begin{aligned} &P(H = 1 \mid D_1 = 1, D_2 = 1)\\ =& \frac{P(D_1 = 1, D_2 = 1 \mid H=1) P(H=1)}{P(D_1 = 1, D_2 = 1)} \\ =& 0.8307. \end{aligned} 也就是说,第二次测试使我们能够对患病的情况获得更高的信心。 尽管第二次检验比第一次检验的准确性要低得多,但它仍然显著提升了我们的评估结果。 期望和方差 ---------- 为了概括概率分布的关键特征,我们需要一些测量方法。 一个随机变量\ :math:`X`\ 的\ *期望*\ (expectation,或平均值(average))表示为 .. math:: E[X] = \sum_{x} x P(X = x). 当函数\ :math:`f(x)`\ 的输入是从分布\ :math:`P`\ 中抽取的随机变量时,\ :math:`f(x)`\ 的期望值为 .. math:: E_{x \sim P}[f(x)] = \sum_x f(x) P(x). 在许多情况下,我们希望衡量随机变量\ :math:`X`\ 与其期望值的偏置。这可以通过方差来量化 .. math:: \mathrm{Var}[X] = E\left[(X - E[X])^2\right] = E[X^2] - E[X]^2. 方差的平方根被称为\ *标准差*\ (standard deviation)。 随机变量函数的方差衡量的是:当从该随机变量分布中采样不同值\ :math:`x`\ 时, 函数值偏离该函数的期望的程度: .. math:: \mathrm{Var}[f(x)] = E\left[\left(f(x) - E[f(x)]\right)^2\right]. 小结 ---- - 我们可以从概率分布中采样。 - 我们可以使用联合分布、条件分布、Bayes定理、边缘化和独立性假设来分析多个随机变量。 - 期望和方差为概率分布的关键特征的概括提供了实用的度量形式。 练习 ---- 1. 进行\ :math:`m=500`\ 组实验,每组抽取\ :math:`n=10`\ 个样本。改变\ :math:`m`\ 和\ :math:`n`\ ,观察和分析实验结果。 2. 给定两个概率为\ :math:`P(\mathcal{A})`\ 和\ :math:`P(\mathcal{B})`\ 的事件,计算\ :math:`P(\mathcal{A} \cup \mathcal{B})`\ 和\ :math:`P(\mathcal{A} \cap \mathcal{B})`\ 的上限和下限。(提示:使用\ `友元图 `__\ 来展示这些情况。) 3. 假设我们有一系列随机变量,例如\ :math:`A`\ 、\ :math:`B`\ 和\ :math:`C`\ ,其中\ :math:`B`\ 只依赖于\ :math:`A`\ ,而\ :math:`C`\ 只依赖于\ :math:`B`\ ,能简化联合概率\ :math:`P(A, B, C)`\ 吗?(提示:这是一个\ `马尔可夫链 `__\ 。) 4. 在 :numref:`subsec_probability_hiv_app`\ 中,第一个测试更准确。为什么不运行第一个测试两次,而是同时运行第一个和第二个测试?