.. _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`\ 中,第一个测试更准确。为什么不运行第一个测试两次,而是同时运行第一个和第二个测试?