机器学习的数学指南(六)
原文:
annas-archive.org/md5/8e7afdad3bbf3a40e1422439a336f979译者:飞龙
期望值
在上一章,我们学习了概率分布,即表示概率模型的对象,作为序列或函数。毕竟,整个微积分领域可以帮助我们处理函数,因此它们为我们提供了广泛的数学工具。
然而,我们可能并不需要所有可用的信息。有时,简单的描述性统计,如均值、方差或中位数就足够了。即便在机器学习中,损失函数也以这些量为基础。例如,著名的均方误差
是预测误差的方差。深层次上,这些熟悉的量都根植于概率论中,我们将在本章中专门学习它们。
第二十五章:20.1 离散随机变量
让我们玩一个简单的游戏。我投掷一枚硬币,如果是正面,你赢得2。
到目前为止,我们一直在处理像是获胜的概率等问题。比如,投掷硬币时,无论你赢还是输,我们有
尽管赢和输的机会相等,你是否应该玩这个游戏呢?让我们一探究竟。
在 n 轮之后,你的收益可以通过正面次数乘以2 来计算。如果我们将总收益除以 n,就得到每轮的平均奖金。也就是说,
其中,#正面和#反面分别表示正面和反面的次数。
还记得来自第 18.2.7 节的频率学派对概率的解释吗?根据我们的直觉,我们应该有
这意味着,如果你玩得足够长,你每轮的平均奖金是
因此,既然你每轮平均亏损半美元,那么你肯定不应该玩这个游戏。
让我们通过随机变量来正式化这个论点。假设,如果 X 表示你每轮的奖金,我们有
所以平均奖金可以表示为
通过一点模式匹配,我们发现对于一般的离散随机变量 X,公式看起来像
从中,期望值的定义应运而生。
定义 92.(离散随机变量的期望值)
设(Ω, Σ, P)为一个概率空间,X : Ω →{x[1], x[2], …}为离散随机变量。X 的期望值定义为
(注意,如果 X 取有限多个值,则和中只包含有限个项。)
在英语中,期望值描述的是随机变量在长期运行中的平均值。期望值也叫做均值,通常用μ表示。我们常常不使用随机变量,而是通过代入分布来使用期望值符号,比如𝔼[Bernoulli(p)]。虽然从数学上看这不够精确,但 1)在某些情况下,它更简单,2)而且期望值反正只依赖于分布。
是时候看一些例子了。
示例 1. 伯努利分布的期望值。(请参见 19.2.1 节中的伯努利分布定义。)设 X ∼ Bernoulli(p)。它的期望值很容易计算,计算如下:
我们之前见过这个:简单游戏的入门例子实际上是变换后的伯努利分布 3 ⋅ 伯努利(1∕2) − 2。
示例 2. 二项分布的期望值。(请参见 19.2.2 节中的二项分布定义。)设 X ∼ Binomial(n,p)。那么
计划如下:吸收那个 k 与分数,并调整和,使其项形成二项分布(Binomial(n − 1,p))的概率质量函数。由于 n −k = (n − 1) − (k − 1),我们得到
这个计算看起来可能不算最简单,但一旦你熟悉了这个技巧,它将变得像第二天性一样。
示例 3. 几何分布的期望值。(请参见 19.2.3 节中的几何分布定义。)设 X ∼ Geo(p)。我们需要计算
你还记得几何级数吗?(19.2) 这几乎就是它,除了那个 k 项,它让我们的计算变得复杂。为了解决这个问题,我们将使用另一个魔法技巧。回忆一下,
现在,我们将对几何级数进行微分,从而得到
我们在这里使用了导数的线性性质和几何级数的良好解析性质。数学家们看到交换导数和无穷和时会尖叫,但别担心,这里的一切都是正确的。(数学家们真的害怕交换极限。你得知道,他们有理由这么做!)
另一方面,
因此
综合以上所有内容,我们最终得出
示例 4. 常数随机变量的期望值。令 c ∈ℝ为任意常数,X 为一个在所有情况下都取值为 c 的随机变量。由于 X 是离散随机变量,它的期望值就是
我知道,这个例子看起来很傻,但它实际上可以非常有用。当情况清晰时,我们通过将常数 c 表示为随机变量本身来滥用符号。
20.1.1 扑克中的期望值
在继续之前再举一个例子。曾经,我是一个中等水平的无限注德州扑克玩家,而我第一次听说期望值是在学习概率论之前的几年。
根据德州扑克的规则,每个玩家自己持有两张牌,同时发五张公共牌。这些公共牌对每个玩家都可用,持有最强牌的玩家获胜。
图 20.1 展示了最后一张牌(河牌)揭示之前桌面的样子。
图 20.1:河牌之前的扑克桌
底池里有钱可以赢,但要看到河牌,你必须跟注对手的下注。问题是,你应该这么做吗?期望值来帮忙。
让我们构建一个概率模型。某些河牌(river card)能让我们赢得底池,而其他所有河牌则让我们失去。若 X 代表我们的获胜金额,则
因此,期望值是
期望值什么时候为正?通过一些代数运算,我们得到𝔼[X]/span>0 当且仅当
这被称为正底池赔率。如果满足这一条件,下注是正确的选择。尽管在单手牌中你可能会输,但从长远来看,你的收益将是正的。
当然,底池赔率在实践中非常难以确定。例如,你不知道别人持有什么牌,除非你对对手有很好的阅读能力,否则无法计算出哪些牌会为你赢得底池。扑克远不止是数学。优秀的玩家会特别选择下注方式,来让对手的底池赔率产生误导。
现在我们理解了期望值的基本概念,让我们继续探讨一般情况!
20.2 连续随机变量
到目前为止,我们只为离散随机变量定义了期望值。由于𝔼[X]描述的是 X 在长时间内的平均值,因此它对于连续随机变量也应该是存在的。
期望值的解释很简单:结果乘以概率,对所有可能的值求和。然而,连续随机变量有一个问题:我们没有这样的质量分布,因为单个结果的概率为零:P(X = x) = 0。此外,我们无法对无穷多个值求和。
我们能做什么呢?
一厢情愿的想法。这是数学中最强大的技巧之一,我不是在开玩笑。
计划是这样的。我们假设连续随机变量的期望值是定义良好的,让我们的想象力自由发挥。告别数学精确性,让我们的直觉展开。与其谈论某一结果的概率,我们可以讨论 X 落在一个小区间内。首先,我们将实数集划分为非常小的部分。更精确地说,设 x[0]/span>x[1]/span>…/span>x[n] 是实数线的精细划分。如果划分足够精细,我们应该得到:
𝔼[X] ≈ ∑[k=1]^n x[k] P(x[k−1] ≤ X ≤ x[k]) (20.1)
在 (20.1) 中的概率可以用 CDF 表示:
这些增量让我们想起了差分商。虽然在求和中我们没有完全得到这些,但通过“巧妙的乘以 1”,我们可以实现这一点:
如果 x[i] 彼此接近(而且我们可以选择它们任意接近),那么差分商接近于 F[X] 的导数,即密度函数 f[X]。因此,
这是一个黎曼和,定义见于 (14.7)!因此,最后的和接近于黎曼积分:
尽管我们在推理中并没有完全精确,但以上所有内容都可以在数学上得到正确处理。(不过我们这里不做,因为它与我们无关。)因此,我们最终得到了连续随机变量期望值的公式。
定义 93. (连续随机变量的期望值)
设 (Ω,Σ,P) 是一个概率空间,X : Ω → ℝ 是一个连续随机变量。X 的期望值由以下公式定义:
和往常一样,让我们先看一些例子。
示例 1. 均匀分布的期望值。(参见 19.3.4 节中对均匀分布的定义。)设 X ∼ Uniform(a,b)。则
这表示区间 [a,b] 的中点,其中 Uniform(a,b) 分布存在。
示例 2. 指数分布的期望值。(参见第 19.3.5 节中关于指数分布的定义。)设 X ∼ exp(λ)。然后,我们需要计算积分
我们可以通过分部积分法来解决这个问题(定理 95):设 f(x) = x 且 g^′(x) = λe^(−λx),我们得到
20.3 期望值的性质
和往常一样,期望值具有几个有用的性质。最重要的是,期望值对随机变量是线性的。
定理 129. (期望值的线性)
设 (Ω,Σ,P) 为一个概率空间,且让 X, Y : Ω → ℝ 为两个随机变量。进一步设 a, b ∈ ℝ 为两个标量。那么
公式成立。
我们在这里不会证明这个定理,但要知道线性是一个重要的工具。你还记得我们用来引入离散随机变量期望值的游戏吗?我掷硬币,如果正面朝上,你赢得 2。如果你思考一下,这就是
分布,因此,
当然,线性远不止这个简单的例子。正如你已经习惯了的那样,线性是数学中的一个关键性质。我们喜欢线性。
备注 20.
请注意,定理 129 并未说明 X 和 Y 必须都是离散的或都是连续的。尽管我们只在这种情况下定义了期望值,但存在一个适用于所有随机变量的通用定义。
问题在于,它需要熟悉测度理论,而这超出了我们的范围。只需知道,这个定理按原样成立。
如果和的期望值是各自期望值的和,那么乘积是否也适用?一般来说不适用,但幸运的是,这在独立随机变量的情况下成立。(参见定理 84,其中给出了独立随机变量的定义。)
定理 130. (独立随机变量乘积的期望值)
设 (Ω,Σ,P) 为一个概率空间,且让 X, Y : Ω → ℝ 为两个独立的随机变量。
然后
公式成立。
这个性质非常有用,正如我们将在下一节中看到的,我们将讨论方差和协方差。
另一个帮助我们计算随机变量函数期望值的性质,比如 X² 或 sinX:
定理 131. (无意识统计学家的法则)
设 (Ω,Σ,P) 为一个概率空间,设 X : Ω → ℝ 为一个随机变量,且设 g : ℝ → ℝ 为一个任意函数。
(a) 如果 X 是离散的,且可能的取值为 x[1], x[2], …,那么
(b) 如果 X 是具有概率密度函数 fX 的连续型随机变量,则
因此,计算连续随机变量的𝔼[X²]可以通过简单地取
这将在整个过程中被频繁使用。
20.4 方差
简单来说,期望值衡量的是随机变量的平均值。然而,即使 Uniform(−1,1)和 Uniform(−100,100)的期望值都是零,后者的分布却比前者要广泛得多。因此,𝔼[X]并不是描述随机变量 X 的好方法。
为了再加一层,我们衡量的是期望值的平均偏差。这是通过方差和标准差来实现的。
定义 94. (方差与标准差)
设(Ω, Σ, P)为一个概率空间,设 X : Ω → ℝ为一个随机变量,且μ = 𝔼[X]为其期望值。X 的方差定义为
其标准差定义为
请注意,在文献中,期望值通常用μ表示,而标准差用σ表示。二者一起构成了描述随机变量的两个最重要的指标。
图 20.2 展示了在正态分布情况下,均值和标准差的可视化解释。均值表示平均值,而标准差可以解释为平均偏离均值的程度。(我们稍后会详细讨论正态分布,所以如果现在还不熟悉,也不用担心。)
图 20.2:标准正态分布的均值(μ)和标准差 !(σ) ](github.com/OpenDocCN/f…)
计算方差的常用方法不是取(X − μ)²的期望值,而是取 X²的期望值并从中减去μ²。以下命题展示了这一点。
命题 5.
设(Ω, Σ, P)为一个概率空间,且 X : Ω → ℝ为一个随机变量。
然后
证明。设μ = 𝔼[X]。由于期望值的线性性质,我们有
这就是我们需要证明的。
方差也具有线性性质吗?不,但关于标量乘法和加法,有一些重要的恒等式。
定理 132. (方差与线性运算)
设(Ω, Σ, P)为一个概率空间,且 X : Ω → ℝ为一个随机变量。
(a) 设 a ∈ ℝ为任意常数。那么
(b) 设 Y : Ω → ℝ为一个与 X 独立的随机变量。那么
证明。(a) 设μ[X] = 𝔼[X]。则我们有
这就是我们需要展示的结果。(b)令μ[Y] = 𝔼[Y]。然后,由于期望值的线性性质,我们有:
现在,由于 X 和 Y 是独立的,𝔼[XY ] = 𝔼[X]𝔼[Y]。因此,由于期望值的线性性质,
因此,继续进行第一次计算,
这就是我们需要展示的结果。
20.4.1 协方差和相关性
期望值和方差度量了一个随机变量的独立性。然而,在实际问题中,我们需要发现不同测量之间的关系。假设,X 表示给定房地产的价格,而 Y 表示其面积。这两者肯定是相关的,但并不是互相决定的。例如,位置可能是价格差异的因素。
测量相似性的最简单统计方法是协方差和相关性。
定义 95.(协方差与相关性)
设(Ω,Σ,P)为概率空间,设 X,Y : Ω → ℝ为两个随机变量,且μ[X] = 𝔼[X],μ[Y] = 𝔼[Y]为它们的期望值,σ[X] = Std[X],σ[Y] = Std[Y]为它们的标准差。
(a) X 和 Y 的协方差由下式定义:
(b) X 和 Y 的相关性由下式定义:
类似于方差,协方差的定义可以简化,从而提供一种更简便的计算其确切值的方法。
命题 6.
设(Ω,Σ,P)为概率空间,设 X,Y : Ω → ℝ为两个随机变量,且μ[X] = 𝔼[X],μ[Y] = 𝔼[Y]为它们的期望值。
然后
证明:这只是一个简单的计算。根据定义,我们有:
这就是我们需要展示的结果。
协方差和相关性的一个最重要的性质是,对于独立的随机变量,它们的值为零。
定理 133.
设(Ω,Σ,P)为概率空间,且 X,Y : Ω → ℝ为两个独立的随机变量。
然后,Cov[X,Y ] = 0. (因此,Corr[X,Y ] = 0 也是如此。)
证明直接来自定义和定理 130,所以这部分留给你做练习。
请注意,这一点非常重要:独立性意味着零协方差,但零协方差并不意味着独立性。这里有一个例子。
设 X 是一个离散随机变量,其概率质量函数为:
并且设 Y = X²。
X 的期望值是
而无意识统计学家的法则(定理 131)表明:
和
因此,
然而,X 和 Y 不是独立的,因为 Y = X² 是 X 的一个函数。(我毫不羞愧地借用了这个例子,来自一个精彩的 Stack Overflow 讨论,你应该阅读更多关于这个问题的内容:stats.stackexchange.com/questions/179511/why-zero-correlation-does-not-necessarily-imply-independence)
你是否还记得我们如何将概率的概念解释为事件发生的相对频率?现在,我们已经掌握了期望值,我们终于可以精确地描述这个概念了。让我们来看看著名的大数法则!
20.5 大数法则
我们将继续前进,探索一个相当显著且著名的结果:大数法则。你可能已经听过一些错误的关于大数法则的论点。例如,赌徒们常常相信他们的不幸很快就会结束,因为大数法则。这是最常被误用的数学术语之一,我们在这里将澄清这一点。
我们将分两步进行。首先,我们将看到一个直观的解释,然后添加技术性但重要的数学细节。我会尽量温和一些。
20.5.1 投掷硬币……
首先,我们再投几次硬币。如果我们重复投掷硬币,长期来看,正面朝上的相对频率是多少?
我们应该已经有了一个相当不错的猜测:正面朝上的平均次数也应该趋向于 P(正面) = p。为什么?因为我们在第 18.2.7 节研究概率的频率解释时看到过这个现象。
我们的模拟显示,正面朝上的相对频率确实趋向于真实的概率。这一次,我们将进一步进行模拟。
首先,为了构造问题,我们引入独立随机变量 X[1], X[2], …,它们的分布是伯努利(p),其中 X[i] = 0 表示投掷结果为反面,而 X[i] = 1 表示投掷结果为正面。我们关注的是
X[n] 被称为样本平均值。我们已经看到,随着 n 的增大,样本平均值越来越接近 p。让我们在继续之前再看一次模拟结果。(为了方便示例,参数 p 选择为 1∕2。)
import numpy as np
from scipy.stats import bernoulli
n_tosses = 1000
idx = range(n_tosses)
coin_tosses = [bernoulli.rvs(p=0.5) for _ in idx]
coin_toss_averages = [np.mean(coin_tosses[:k+1]) for k in idx]
这是图表。
import matplotlib.pyplot as plt
with plt.style.context("/span>seaborn-v0_8":
plt.figure(figsize=(10, 5))
plt.title("/span>Relative frequency of the coin tosses
plt.xlabel("/span>Relative frequency
plt.ylabel("/span>Number of tosses
# plotting the averages
plt.plot(range(n_tosses), coin_toss_averages, linewidth=3) # the averages
# plotting the true expected value
plt.plot([-100, n_tosses+100], [0.5, 0.5], c="/span>k
plt.xlim(-10, n_tosses+10)
plt.ylim(0, 1)
plt.show()
图 20.3:掷硬币的相对频率
到目前为止没有什么新内容。然而,如果你眼尖的话,可能会问:这只是偶然吗?毕竟,我们研究的是平均值。
这几乎是一个二项分布的随机变量!更准确地说,如果 X[i] ∼ 伯努利分布(p),则
(我们在讨论离散随机变量的和时已经看到过这个内容,在第 19.2.7 节中。)
到目前为止,无法保证这个分布会集中在单一的值附近。因此,让我们做更多的模拟。这次,我们将掷硬币一千次,看看样本平均值的分布情况。确实很有 meta 的感觉,我知道。
more_coin_tosses = bernoulli.rvs(p=0.5, size=(n_tosses, n_tosses))
more_coin_toss_averages = np.array([[np.mean(more_coin_tosses[i][:j+1]) for j in idx]
for i in idx])
我们可以在直方图上可视化这些分布。
with plt.style.context("/span>seaborn-v0_8":
fig, axs = plt.subplots(1, 3, figsize=(12, 4), sharey=False)
fig.suptitle("/span>The distribution of sample averages
for ax, i in zip(axs, [5, 100, 999]):
x = [k/i for k in range(i+1)]
y = more_coin_toss_averages[:, i]
ax.hist(y, bins=x)
ax.set_title(f/span>n = {i}"
plt.show()
图 20.4:掷硬币的样本平均值分布
换句话说,X[n]远离 p 的概率会变得越来越小。对于任何小的𝜖,我们可以将“X[n]远离 p 超过𝜖”的概率表示为 P(|X[n] −p| > 𝜖)。
因此,从数学角度来看,我们的猜测是
再次,这只是偶然吗?我们是否仅仅幸运地研究了一个符合这个规律的实验?对于除伯努利随机变量外的其他随机变量是否也成立?样本平均值最终会收敛到什么地方?(如果它们确实会收敛的话。)
我们会找到答案的。
20.5.2 …掷骰子…
让我们来玩掷骰子。为了简化问题,我们关注的是长期掷骰子的平均值。为了建立一个合适的概率模型,我们来引入随机变量!
单次掷骰子是均匀分布在{1,2,…,6}上的,并且每次掷骰子相互独立。因此,设 X[1], X[2], … 为独立随机变量,每个随机变量都按照均匀分布 Uniform({1,2,…,6})分布。
样本平均值 X[n] 会怎么变化?是时候进行模拟了。我们将随机生成 1000 次掷骰子的结果,然后探索 X[n] 的变化情况。
from scipy.stats import randint
n_rolls = 1000
idx = range(n_rolls)
dice_rolls = [randint.rvs(low=1, high=7) for _ in idx]
dice_roll_averages = [np.mean(dice_rolls[:k+1]) for k in idx]
再次为了获得一些直观的理解,我们将在图表上可视化这些平均值。
with plt.style.context("/span>seaborn-v0_8":
plt.figure(figsize=(10, 5))
plt.title("/span>Sample averages of rolling a six-sided dice
# plotting the averages
plt.plot(idx, dice_roll_averages, linewidth=3) # the averages
# plotting the true expected value
plt.plot([-100, n_rolls+100], [3.5, 3.5], c="/span>k
plt.xlim(-10, n_rolls+10)
plt.ylim(0, 6)
plt.show()
图 20.5:掷六面骰子的样本平均值
首先需要注意的是,这些数值异常接近 3.5。这不是一个概率,而是期望值:
对于伯努利(p)分布的随机变量,期望值与概率 p 相同。然而,这一次,X[n] 并不像掷硬币时那样有一个明确的分布,样本平均值也不再是二项分布。因此,我们来多掷一些骰子,估计 X[n] 的分布情况。
more_dice_rolls = randint.rvs(low=1, high=7, size=(n_rolls, n_rolls))
more_dice_roll_averages = np.array([[np.mean(more_dice_rolls[i][:j+1]) for j in idx]
for i in idx])
with plt.style.context("/span>seaborn-v0_8":
fig, axs = plt.subplots(1, 3, figsize=(12, 4), sharey=False)
fig.suptitle("/span>The distribution of sample averages
for ax, i in zip(axs, [5, 100, 999]):
x = [6*k/i for k in range(i+1)]
y = more_dice_roll_averages[:, i]
ax.hist(y, bins=x)
ax.set_title(f/span>n = {i}"
plt.show()
图 20.6:掷骰子时的样本平均分布
看起来,一次又一次地,X[n] 的分布集中在 𝔼[X[1]] 附近。我们的直觉告诉我们,这不是偶然;这一现象对于广泛的随机变量都成立。
让我剧透一下:这确实是这样,我们现在就来看。
20.5.3 …以及其余部分
这次,设 X[1],X[2],… 是一列独立同分布(i.i.d.)的随机变量。不是掷硬币,不是掷骰子,而是任何分布。我们看到样本平均值 X[n] 似乎收敛于 X[i]-s 的联合期望值:
注意引号:X[n] 不是一个数字,而是一个随机变量。因此,我们还不能谈论收敛。
从数学上精确来说,我们之前看到的是,当 n 足够大时,样本平均值 X[n] 很不可能远离联合期望值 μ = 𝔼[X[1]];也就是说,
lim[n→∞] P(|X[n] − μ| > 𝜖) = 0 (20.2)
对所有 𝜖/span>0\ 都成立。
极限(20.2)现在似乎很难证明,即使是在简单的掷硬币的情况下。在那里,X[n] ∼ 二项分布(n,p),因此
其中符号 ⌊x⌋ 表示小于 x 的最大整数。这看起来一点也不友好。(我把验证留作练习。)
因此,我们的计划如下。
-
找一种估计 P(jX[n]−μj/span>𝜖) 的方法,使其与 X[i]-s 的分布无关。
-
使用上界估计来证明 lim[n→∞]P(jX[n] −μj/span>𝜖) = 0。
我们开始吧。
20.5.4 大数法则的弱法则
首先是上界估计。有两个一般不等式可以帮助我们处理 P(jX[n] −μj ≥𝜖)。
定理 134. (马尔可夫不等式)
设 (Ω,Σ,P) 是一个概率空间,且 X : Ω → [0,∞) 是一个非负随机变量。那么
对于任意 t ∈ (0,∞),此不等式都成立。
证明:我们需要分离离散情况和连续情况。证明几乎完全相同,所以我只会做离散情况,连续情况留给你作为练习来验证你的理解。
设 X : Ω → {x[1],x[2],…} 是一个离散型随机变量(其中 x[k] ≥ 0 对所有 k 成立),且 t ∈ (0,∞) 是一个任意的正实数。
那么
𝔼[X]
= ∑ [k=1]^∞x [k]P(X = x[k])
= ∑ [k:x[k]/span>tx[k]P(X = x[k]) + ∑ [k:x[k]≥t]x[k]P(X = x[k]),]
其中和 ∑ [k:x[k]/span>t 仅仅计算了 x[k]/span>t 的 k-s,类似地,∑ [k] : x[k] ≥t 仅计算了 x[k] ≥t 的 k-s。
由于假设 x[k]-s 为非负数,因此我们可以通过忽略其中一个来从下方估计 𝔼[X]。因此,
从中可以得到马尔可夫不等式
如下。
大数法则仅一步之遥,接近于马尔可夫不等式。最后这一步非常有用,值得成为一个独立的定理。让我们来看看著名的切比雪夫不等式。
定理 135.(切比雪夫不等式)
设 (Ω, Σ, P) 为一个概率空间,X : Ω →ℝ 是一个具有有限方差 σ² = Var[X] 和期望值 𝔼[X] = μ 的随机变量。
然后
对所有 t ∈ (0,∞) 成立。
证明。由于 |X − μ| 是一个非负随机变量,我们可以应用定理 134 得到
然而,由于 𝔼[|X − μ|²] = Var[X] = σ²,我们有
这就是我们需要证明的。
通过这些内容,我们准备好精确地表述和证明大数法则。经过所有这些准备,(弱)大数法则只是一步之遥。以下是它的完整形式。
定理 136.(弱大数法则)
设 X[1], X[2], … 为一列独立同分布的随机变量,其期望值 μ = 𝔼[X[1]] 和方差 σ² = Var[X[1]],且
设它们的样本平均值为。然后
对任何 𝜀/span>0\ 成立。
证明。由于 X[i] 是独立的,样本平均值的方差为
现在,通过使用定理 135 中的切比雪夫不等式,我们可以得到
因此,
因此
这就是我们需要证明的。
定理 136 不是关于样本平均值的全部内容。还有更强的结果,表明样本平均值确实以概率 1 收敛到均值。
20.5.5 强大数法则
为什么定理 136 被称为“弱”大数法则?想想这个声明
lim[n→∞] P(|X[n] − μ| ≥ 𝜀) = 0 (20.3)
稍等片刻。对于给定的 ω ∈ Ω,这并没有告诉我们具体样本平均值的收敛情况。
它只是告诉我们,在概率意义上,X[n] 集中在联合期望值 μ 周围。从某种意义上讲,(20.3) 是
因此,这就是所谓的弱大数法则。
我们是否有比定理 136 更强的结果?是的,有。
定理 137.(强大数法则)
设 X[1],X[2],…是独立同分布的随机变量序列,具有有限的期望值μ = 𝔼[X[1]]和方差σ² = Var[X[1]],并且设
设它们是样本均值。那么
我们不会证明这一点,只需要知道样本均值会以概率 1 收敛到均值。
注 21.(随机变量的收敛性)
我们在大数法则的弱法则和强法则中看到的现象并非仅限于样本均值。在其他情况下也可以观察到类似的现象,因此,这些类型的收敛性有其各自的精确定义。
如果 X[1],X[2],…是一个随机变量序列,我们称
(a) 如果 X[n]在概率上收敛到 X,则
对所有𝜀/span>0. 概率收敛表示为 X[n]X。
(b) 如果 X[n]几乎确定地收敛到 X,则
成立。几乎确定的收敛表示为 X[n]X。
因此,大数法则的弱法则和强法则指出,在某些情况下,样本均值在概率上和几乎确定地都收敛到期望值。
20.6 信息论
如果你已经在实践中训练过机器学习模型,可能已经熟悉均方误差。
其中,f : ℝ^n →ℝ表示我们的模型,x ∈ℝ^n 是一个一维观测向量,y ∈ℝ^n 是真实值。学完期望值后,这个求和式应该是熟悉的:如果我们假设一个概率视角,并让 X 和 Y 是描述数据的随机变量,那么均方误差可以表示为期望值。
然而,均方误差并不适用于分类问题。例如,如果任务是分类一张图像的物体,输出将是每个样本的离散概率分布。在这种情况下,我们可以使用所谓的交叉熵,其定义为
其中,p ∈ℝ^n 表示单个数据样本的类别标签的独热编码向量,q ∈ℝ^n 是类别标签预测,形成一个概率分布。(独热编码是将一个有限的类别标签集合,如{a,b,c},表示为零一向量的过程,例如
我们这样做是因为处理向量和矩阵比处理字符串更容易。)
并不令人惊讶,H[p,q]也是一个期望值,但它远不止如此:它量化了分布 q 与真实分布 q 之间的信息内容。
但在数学意义上,什么是信息?让我们深入探讨。
20.6.1 猜数字
让我们从一个简单的游戏开始。我已经想好了一个介于 0 到 7 之间的整数,你的任务是通过是非问题找出这个数字。
图 20.7:我在想哪个数字?
一种可能的策略是逐一猜测数字。换句话说,你的问题顺序是:
-
它是 0 吗?
-
它是 1 吗?
-
-
它是 7 吗?
尽管这个策略有效,但并不是最有效的。为什么?考虑一下平均问题数。设随机变量 X 表示我选择的数字。由于 X 是均匀分布的——也就是说,P(X = k) = 1/8,对于所有 k = 0,…,7——那么恰好问 k 个问题的概率为
同样。因此,所需的问题数也在 {1,…,8} 上均匀分布,因此
我们已经使用了 ∑ [k=1]^n = 。
我们能做得比这个更好吗?可以。在之前的顺序策略中,每个问题命中目标的机会较小,大部分情况下只会排除一个潜在的候选项。很容易看出,最好的方法是每个问题都能将搜索空间减半。
比如,我想到的数字是 2。通过问“这个数字大于 3 吗?”,答案可以排除四个候选项。
图 20.8:问题后搜索空间是比 3 大的数字吗?
每个后续的问题都会将剩余的可能性减半。以 X = 2 为例,三个问题如下:
-
X ≥ 4 吗?(否)
-
X ≥ 2 吗?(是)
-
X ≥ 3 吗?(否)
这就是所谓的二分查找,如图 20.9 所示。
图 20.9:通过二分查找得出答案
如果我们将三个连续问题的答案(X ≥ 4, X ≥ 2, X ≥ 3)写成一个二进制序列,我们得到 010。如果这看起来很熟悉,那并非偶然:010 是二进制的 2。事实上,所有答案都可以用其二进制形式进行编码:
因此,我们可以重新表述我们的三个问题:
-
1 是 X 的第一个二进制位吗?
-
1 是 X 的第二个二进制位吗?
-
1 是 X 的第三个二进制位吗?
如上例所示,猜数字等同于找出待猜数字的二进制表示。每一位代表一位信息。(在这种情况下,表示就是实际的二进制形式。)二进制编码有一个额外的好处:我们不再需要顺序地提问,可以同时问多个问题。从现在起,我们将不再讨论问题,而是讨论二进制表示(编码)及其位。
请注意,每个 X 的结果所需的位数是相同的。因此,这种策略始终需要三个位,因此它们的平均数量也是三:
我们能做得比平均三次提问更好吗?不能。我邀请你提出你的论据,但我们稍后会看到这一点。
上述的三号数字来自哪里?一般来说,如果我们有 2^k 个可能的选择,那么 log [2]2^k = k 个问题就足够找到答案。(因为每个问题都会将可能答案的范围减半。)换句话说,我们有
因此,log [2]P(X = k)^(−1) 的值是我们编码中表示 k 所需要的比特数。换句话说,
让我们提前一点:这就是著名的随机变量 X 的熵,而 log [2]P(X = k)^(−1) 是所谓的事件 X = k 的信息量。
然而,到此为止,这些概念还很不清楚。log [2]P(X = k)^(−1) 与信息有什么关系?为什么我们不能用比 log [2]P(X = k)^(−1) 更好的方式来表示 k 的比特数?我们很快就会看到答案。
20.6.2 猜数字 2:电气波古鲁
让我们再玩一次猜数字的游戏,但这次有点不同。我现在从 {0,1,2} 中选了一个数字,你得猜是哪一个。难点是,我选择 0 的概率是其他数字的两倍。
在概率论中,如果 X 表示我选的数字,那么 P(X = 0) = 1∕2,而 P(X = 1) = P(X = 2) = 1∕4。
最佳策略是什么?有两个关键事实需要记住:
-
好的问题会将搜索空间减少一半,
-
提问相当于找到这些结果的二进制编码。
然而,由于我们在寻找平均最优的编码,不能简单地理解为每个数字将搜索空间减少一半。这种理解应当是概率性的。所以,如果 0 的确是更有可能的,那么通过
平均比特数是
再一次,我们走到了熟悉的对数公式。我们离理解这个神秘量 log [2]P(X = k)^(−1) 更近一步了。它越小,我们需要的问题就越多;同样地,我们在编码中表示 k 所需的比特数也越多,以避免信息丢失。
那么,这些神秘的量到底是什么呢?
20.6.3 信息与熵
现在是时候对这个问题进行一般化了。假设我们的随机变量 X 从集合 {1,2,…,N} 中取一个数,每个数的概率是 p[k] = P(X = k)。在反复观察 X 后,我们的观察的平均信息量是多少?
根据我们所学到的,我们正在寻找的量是
其中 I : ℕ → ℝ表示信息 I(k) = −log p[k]。之前,我们已经看到两个特殊情况,其中 I(k)是猜测 k 所需的平均问题数。(等价地,信息是使用最优编码时 k 的平均比特数。)
那么一般来说,信息是什么?
让我们把 I 视为概率的未知函数:I(x) = f(P(X = x))。那么 f 可能是什么?有两个关键性质将引导我们找到答案。首先,事件越可能发生,信息含量就越少。(回想一下之前的例子,最可能的结果需要最少的比特数进行二进制表示。)
其次,作为概率的函数,信息是可加的:f(pq) = f(p) + f(q)。为什么?假设我独立地选择了两个数字,现在你需要猜测这两个数字。你可以顺序进行,首先应用最优策略猜测第一个,然后猜测第二个。
用数学语言来说,f(p)是
-
连续的,
-
严格递增,即对于任何 p > q,有 f(p) > f(q),
-
且可加性,即对于任何 p, q,有 f(pq) = f(p) + f(q)。
我会省略数学细节,但通过一点微积分魔法,我们可以自信地得出唯一的选项是 f(p) = −log [a]p,其中 a > 1。表面上看,信息似乎依赖于基数,但实际上
基数的选择仅会影响信息和熵的乘法尺度因子。因此,使用自然对数是最简单的选择。
所以,这里终于给出了正式定义。
定义 96.(信息)
设 X 为具有概率质量函数{P(X = x[k])}[k]的离散随机变量。
事件 X = x[k]的信息定义为
(注意,当没有指定对数的基数时,我们使用自然对数 e。)为了强调信息依赖于 X,我们有时会明确表示其关系为 IX。
凭借信息的概念,我们准备好定义熵,即每次观察的平均信息量。这个量以 Claude Shannon 的名字命名,他在其史诗论文《通信的数学理论》中奠定了信息理论的基础。
定义 97.(香农熵)
设 X 为具有概率质量函数{P(X = x[k])}[k]的离散随机变量。
X 的熵定义为
尽管 H[X]被称为香农熵,但我们将简单地称之为熵,除非需要明确区分。
我们可以注意到的第一件事是 H[X] ≥ 0。这一点在下面的命题中有所体现。
命题 7.(熵的非负性)
设 X 为任意离散随机变量。那么 H[X] ≥ 0。
证明。根据定义,
首先,假设对于所有的 k,P(X = x[k])≠0。那么,由于 0 ≤ P(X = x[k]) ≤ 1,信息是非负的:log P(X = x[k])^(−1) ≥ 0。因此,定义和中的所有项都是非负的,H[X]也是非负的。
如果 P(X = x[k]) = 0 对于某些 k,那么,由于 lim[x→0+]xlog x = 0,表达式 0 ⋅ log 0 被视为 0。因此,H[X]仍然是非负的。
实际上计算熵是困难的,因为我们需要评估包含对数的求和。然而,仍然有几个特殊情况为熵的概念提供了有价值的启示。让我们来看一下!
示例 1. 离散均匀分布。(见第 19.2.4 节对离散均匀分布的定义。)设 X ∼ Uniform({1,…,n})。则
到目前为止,我们已经对熵有了直观的理解,即每次观测的平均信息量。猜猜看:在所有集中于{1,2,…,n}的分布中,均匀分布的熵如何与其他分布相比?是高于还是低于平均水平?是最小的还是最大的?
我们将在本章末尾揭示答案,但在继续下一个示例之前,花一分钟思考这个问题。
示例 2. 单点分布。(见第 19.2.5 节对单点分布的定义)设 X ∼δ(a)。则
换句话说,由于事件 X = a 是确定的,观察 X 时没有获得任何信息。现在回想一下之前的例子。由于 X ∼δ(k)集中于{1,2,…,n},对于所有 k = 1,2,…,n,再思考一下之前的问题。
让我们在下一个示例中看到部分答案。
示例 3. 伯努利分布。(见第 19.2.1 节对伯努利分布的定义)。设 X ∼ Bernoulli(p)。则,很容易看出
哪个 p 值最大化熵?为了找到 H[X]的极大值,我们可以求导。(回想一下,导数和二阶导数如何用于优化,正如定理 87 所述。)
因此,设 f(p) = H[X] = −plog p − (1 −p)log(1 −p)。则,
通过解 f^′(p) = 0,我们得到 p = 1∕2,这是 f(p)的唯一潜在极值点。由于 f^(′′)(1∕2) = −4/span>0,我们可以看到 p = 1∕2 确实是一个局部最大值。让我们绘制 f(p)图像,以获得直观的确认。
def bernoulli_entropy(p):
return -p*np.log(p) - (1 - p)*np.log(1 - p)
X = np.linspace(0.001, 0.999, 100)
y = bernoulli_entropy(X)
with plt.style.context(’seaborn-v0_8’):
plt.figure(figsize=(8, 8))
plt.xlabel("/span>p
plt.ylabel("/span>H[X]"
plt.title("/span>The entropy of Bernoulli(p)
plt.plot(X, y)
plt.show()
图 20.10:伯努利分布的熵
对于 p = 1∕2,即当伯努利分布的熵达到最大值时,我们得到一个在二元集合{0,1}上的均匀分布。另一方面,当 p = 0 或 p = 1 时,熵最小,伯努利分布则为单点分布。
由于 {0,1} 上的每个随机变量都是伯努利分布的,我们似乎已经有了部分答案:均匀分布最大化熵,而单点分布最小化熵。
如下定理所示,这在一般情况下也是成立的。
定理 138.(均匀分布与最大熵)
设 E = {x[1],…,x[n]} 是一个有限集,且设 X : Ω →E 为一个取值于 E 的随机变量。那么,
并且 H[X] = H[Uniform(E)] 当且仅当 X 在 E 上是均匀分布的。
我们在这里不会展示这个,但有许多证明可以参考。例如,Bishop 的经典著作《模式识别与机器学习》使用拉格朗日乘数法来显式地找到多变量函数 f(p[1],…,p[n]) = −∑ [k=1]^np[k] log p[k] 的最大值;有兴趣的话可以查看其中的详细内容。
如果我们不将离散型随机变量限制在有限集上,怎么办?在这种情况下,Shannon 熵没有上限。在本章的问题集中,你将看到几何分布的熵是
很容易看出 lim[p→0]H[Geo(p)] = ∞。我们来绘制一下图像!
def geom_entropy(p):
return -(p*np.log(p) + (1 - p)*np.log(1 - p))/p
X = np.linspace(1e-16, 1-1e-16, 1000)
y = geom_entropy(X)
with plt.style.context(’seaborn-v0_8’):
plt.figure(figsize=(8, 8))
plt.xlabel("/span>p
plt.ylabel("/span>H[X]"
plt.title("/span>The entropy of Geo(p)
plt.plot(X, y)
plt.show()
图 20.11:几何分布的熵
因此,Shannon 熵可以取任何非负值。
20.6.4 微分熵
到目前为止,我们只为离散型随机变量定义了熵。
这是否也适用于连续型随机变量?是的。公式 𝔼 − log f[X] 可以直接应用于连续型随机变量,得到所谓的微分熵。这里是其正式定义。
定义 98.(微分熵)
设 X 为一个连续型随机变量。X 的微分熵通过以下公式定义:
其中 f[X] 表示 X 的概率密度函数。
现在来了一个惊喜。我们能从 Shannon 熵推导出这个公式吗?我们将像在定义连续型随机变量的期望值时那样处理这个问题:用离散型随机变量来逼近连续型随机变量,然后看看 Shannon 熵收敛到哪里。
因此,设 X : Ω →ℝ 为连续型随机变量,设 [a,b] ⊆ℝ 为一个(较大的)区间,使得 P(X[a,b]) 极小。我们将 [a,b] 分割为 n 等份,方法如下:
并通过以下方式定义逼近的随机变量 X^((n)):
![ ( (n) |{ xk if x ∈ (xk −1,xk] for some k = 1,2,...,n, X (ω ) := | ( 0 otherwise. ](p3-xtjj-sign.byteimg.com/tos-cn-i-73…)
这样,X^((n)) 的熵由以下公式给出:
然而,由于我们定义了 X^((n)),
其中 f[X]是 X 的密度函数。现在,定积分的均值定理(定理 93)表明,存在ξ[k] ∈ [x[k−1],x[k]],使得
因此,总结来说,
(回想一下,x[0]/span>x[1]/span>…/span>x[n]的划分是等距的,x[k] −x[k−1] = 1∕n。)
现在,使用 P(X^((n)) = x[k]) = ,我们可以得到
这两个项都是黎曼和,近似函数内部的积分。如果 n 很大,并且区间[a,b]足够大,那么
并且
这意味着
这很令人惊讶,因为人们通常会期望 H[X^((n))]会收敛到 h(X)。但事实并非如此。
保持。
现在是示例时间。
示例 1. 均匀分布。(见 19.3.4 节中的均匀分布定义。)设 X∼Uniform(a,b)。那么,
这与离散均匀分布的情况相似。然而,有一个显著的区别:当 b−a/span>1 时,h(X)是负的。这与香农熵形成鲜明对比,后者始终是非负的。
示例 2. 正态分布。(见 19.3.6 节中的正态分布定义。)设 X∼𝒩(μ,σ²)。那么,
根据σ的值,这里 h[X]的值也可能是负的。
之前我们已经看到,对于给定有限集合上的离散分布,均匀分布最大化熵,正如定理 138 所述。
连续分布的定理 138 的类似物是什么?大胆猜一下。如果我们设 X 为任何连续分布,那么,正如我们已经看到的,
其值可以是任意实数。与离散情形类似,我们必须做一些限制;这次,我们将固定方差。结果如下。
定理 139.(最大化微分熵)
设 X 是一个方差为σ²的连续随机变量。那么
并且 h[X] = h[𝒩(0,σ²)] 当且仅当 X ∼𝒩(μ,σ²)。
我们不打算证明这个。你可以参考比 ISHOP 的《模式识别与机器学习》获取更多细节。
20.7 最大似然估计
我是简单想法的传播者。随时可以打断我,但无论我在哪个领域,我总是能找到一小套极其简单的想法,使整个工作得以运转。(虽然你不可能打断我,因为这是一本书。笑话是对你的!)
让我给你举个我脑海中的具体例子。你认为是什么推动了深度学习的崛起,包括具有数十亿参数的神经网络?有三个像 ABC 一样简单的想法:
-
你可以通过反向梯度优化损失函数(无论参数的数量是多少),
-
你可以通过巧妙应用链式法则和矩阵乘法来高效地计算梯度,
-
并且我们可以在 GPU 上以极快的速度进行矩阵运算。
当然,在这些想法的基础上建立了一个庞大的工作体系,但这三点构成了今天机器学习的基础。最终,这些使你能够与大型语言模型对话。让你的车在城市中自动巡航,同时你阅读报纸。预测巨大的氨基酸链的准确形状,这些氨基酸链构成了每一个生物体。(包括你。)
梯度下降、反向传播和高效的线性代数属于隐喻中机器学习硬币的实用面。如果我们构建一个参数化模型,可以投入一些极其强大的工具来进行处理。
但是我们的模型从哪里来?
正如我所说,存在一小套关键的想法,它们起到了至关重要的作用。我们即将遇到其中之一:最大似然估计。
20.7.1 概率建模入门
作为一个自封为简单思想的传播者,我将从一个简单的例子开始,来说明一个简单的想法。
拿起一枚硬币,投掷几次并记录每次的结果。问题再次简单:正面的概率是多少?我们不能立即假设 p = 1∕2,也就是说,硬币是公平的。例如,硬币的一面可能被涂上铅,从而产生偏差。为了弄清楚这一点,我们来做一些统计。(卷起袖子,丢下手套。)
从数学角度来看,我们可以用伯努利分布来建模硬币投掷(第 19.2.1 节):
其中
-
X 是表示单次投掷结果的随机变量,
-
X = 1 表示正面,X = 0 表示反面,
-
并且 p ∈ [0,1] 是正面的概率。
这只是模型。我们的目标是估计参数 p,这正是我们统计学可以处理的。
将硬币投掷 n 次得到零一序列 x[1], x[2], …, x[n],其中每个 x[i] 都是伯努利分布的随机变量 X[i] ∼ 伯努利(p) 的一个实现,且彼此独立。
正如我们在讨论大数法则时所看到的(定理 137),一个自然的想法是通过计算样本均值来估计 p,而这恰好是 X 的期望值。为了超越经验估计,我们可以利用这个机会,因为我们现在有一个概率模型。
关键问题是:哪个参数 p 最有可能生成我们的样本?
在概率的语言中,这个问题通过最大化似然函数来回答
其中 P(X[i] = x[i]∣p)表示在固定参数 p 下观察到 x[i]的概率。LLH(p;x[1],…,x[n])越大,参数 p 越有可能。换句话说,我们对 p 的估计将是:
让我们来求解它。
在我们的具体情况下,P(X[i] = x[i]∣p) 可以写成:
代数不喜欢 if-else 类型的函数,因此,通过一个巧妙的数学技巧,我们将 P(X[i] = x[i]∣p)写成:
使得似然函数为:
(我们通常会写 LLH(p)来简化符号复杂性。)
这仍然不容易优化,因为它是由指数函数的乘积组成的。所以,这里有另一个数学技巧:取对数,将乘积转换为和。
由于对数是递增的,它不会改变最优解,所以我们可以继续:
相信我,这样好多了。根据二阶导数检验(定理 87),我们可以通过:
-
解
log LLH(p) = 0 来找到临界点 p̂,
-
然后证明 p̂是最大值,因为
log LLH(p)/span>0。
让我们开始吧。
由于 log p =
和
log(1 −p) = −
,我们有:
解 log LLH(p;x[1],…,x[n]) = 0 得到一个解
(拿起一支笔和纸,自己计算一下答案。)关于二阶导数,我们有:
它是均匀负的。因此,p̂ = ∑ [i=1]^nx[i] 确实是一个(局部)最大值。耶!
在这种情况下,最大似然估计与样本均值相同。相信我,这是一个罕见的例外。把它看作是对样本均值的验证:我们通过不同的思路获得了相同的估计值,所以它一定是正确的。
20.7.2 建模高度
让我们继续进行另一个例子。抛硬币的例子展示了离散情况。现在是进入连续领域的时候了!
这一次,我们正在测量一个高中班级的身高,并希望建立一个概率模型。一个自然的想法是假设身高来自于正态分布 X ∼𝒩(μ,σ²)。 (查看第 19.3.6 节了解正态分布。)
我们的工作是估计期望值 μ 和方差 σ²。来吧,最大似然!
为了使问题在数学上精确,我们有测量值 x[1],…,x[n],它们来自独立同分布的随机变量 X[i] ∼𝒩(μ,σ²)。然而,出现了一个问题:因为我们的随机变量是连续的,
(因为所有项的乘积为零。)那么我们该如何定义似然函数呢?别担心:虽然我们没有质量函数,但我们有密度!因此,由以下定义似然函数:
其中 fX[i] 是 X[i] 的概率密度函数。
让我们来最大化它。思路是类似的:取对数,找到临界点,然后使用二阶导数检验。开始吧:
从现在起,照常进行。导数如下:
通过一点数字运算(你应该尝试自己完成),我们得到 ∂μ log LLH(μ,σ) = 0 这意味着
和 log LLH(μ,σ) 这意味着
我们在这里不做二阶导数检验,但相信我:这是一个最大值,结果给出我们估计值
再次提到,样本均值和方差。可以这样理解:默认使用样本均值和方差是最简单的方法,但即便是像最大似然估计这样聪明的方法,也会把它们作为参数估计值。
在详细解答上述两个例子后,我们已经准备好抽象掉细节,引入一般问题。
20.7.3 一般方法
我们已经看过最大似然估计的工作原理。现在,是时候构建抽象的数学框架了。
定义 99.(似然函数)
设 P[𝜃]是由参数𝜃 ∈ℝ^k 参数化的概率分布,且 x[1],…,x[n] ∈ ℝ^d 是该概率分布的独立实现。(即样本来自独立同分布的随机变量 X[1],…,X[n],其分布由 P[𝜃]给出。)
给定样本 x[1],…,x[n],𝜃的似然函数定义为:
(a)
如果 P[𝜃]是离散的,并且
(b)
如果 P[𝜃]是连续的,其中 f[𝜃]是 P[𝜃]的概率密度函数。
我们已经看到了两个似然函数的示例:对于伯努利分布 Bernoulli(p),给定:
对于正态分布𝒩(μ,σ),给定:
从直观上讲,似然函数 LLH(𝜃;x[1],…,x[n])表示当参数𝜃为真时,我们观察到的 x[1],…,x[n]的概率。最大似然估计是通过最大化此概率得到的参数;即在这个参数下,观察结果最可能发生。
定义 100. (最大似然估计)
设 P[𝜃]是由参数𝜃 ∈ℝ^k 参数化的概率分布,且 x[1],…,x[n] ∈ ℝ^d 是该概率分布的独立实现。
𝜃的最大似然估计由以下公式给出:
在这两个示例中,我们使用了对数运算将乘积转化为和。用一次是技巧;用(至少)两次就是方法。这是正式定义。
定义 101. (对数似然函数)
设 P[𝜃]是由参数𝜃 ∈ℝ^k 参数化的概率分布,且 x[1],…,x[n] ∈ ℝ^d 是该概率分布的独立实现。
给定样本 x[1],…,x[n],𝜃的对数似然函数定义为:
其中 LLH(𝜃;x[1],…,x[n])是似然函数。
在经典统计学中,最大似然估计是通过以下方法进行的:
-
从数学家的帽子里抽出一个参数化的概率模型,
-
通过调整(对数)似然函数直到获得一个解析上可处理的形式,
-
通过求解∇LLH = 0(或∇log LLH = 0)来获得参数估计。
统计学在特定情况下可以非常强大,但我们得面对现实:上述方法有不少缺点。首先,构建一个可处理的概率模型是一个具有挑战性的任务,且容易受到专家固有偏见的影响。(我将建模过程间接地比作从帽子里抽出一只兔子,绝非偶然。)此外,模型越复杂,似然函数也越复杂。这反过来增加了我们优化问题的复杂度。
那我们为什么要花这么多页来学习这种古老的技巧呢?
因为这个思想在机器学习中至关重要,我们将通过一步步突破它的障碍,最终达到(或接近)最先进的水平。建模难吗?我们来构造一个拥有数十亿参数的函数来完成这个任务。优化计算密集吗?不用担心,我们有集群的 GPU 可以使用。
20.7.4 德国坦克问题
再举一个例子,来自二战时期。假设你是一个盟军情报官员,负责估算德军装甲师的规模。(也就是,猜测坦克的数量。)
那时候没有卫星图像可供参考,因此除了一个小小的信息来源——敌方摧毁坦克的序列号,我们几乎没有其他可以依赖的资料。我们能从这些信息中做些什么呢?
在没有详细了解制造过程的情况下,我们可以假设这些坦克在出厂时按顺序编号。我们也不知道这些坦克是如何在战场之间分配的。
这两块知识(或者更精确地说,缺乏知识)转化为一个简单的概率模型:遇到敌方坦克就像从均匀分布 Uniform(N)中抽取样本,其中 N 是坦克的总数。因此,如果 x[1],…,x[n]是摧毁坦克的序列号,我们可以使用最大似然法来估计 N。
让我们开始吧。离散均匀分布 Uniform(N)的似然函数由以下公式给出:
其中,概率 P(X[i] = x[i])有一个相当独特的形式:
记住,x[1],…,x[n] ≤N(因为没有观察到的序列号会大于坦克的总数),我们有
想一想:N 越大,LLH(N)就越小。因此,最大似然估计是最小的可能选择。
换句话说,我们对坦克数量的猜测就是我们遇到的最大序列号。
你怎么看这个估计?我不骗你,我自己并不特别喜欢。德国坦克问题凸显了建模假设在统计学中的重要性。最终的估计是我们选择 Uniform(N)的结果。机器学习中的常见智慧是“垃圾进,垃圾出”。建模也是如此。
20.8 小结
在这一章中,我们了解了期望值的概念。从数学上讲,期望值的定义是
对于离散随机变量和
对于连续型随机变量。这些公式虽然可能涉及无限和与积分,但其基本含义很简单:𝔼[X] 代表 X 的平均结果,按其底层概率分布加权。
根据大数法则,期望值也描述了一个长期的平均值:如果独立同分布的随机变量 X[1], X[2], … 描述了一个重复实验的结果——比如说,在扑克中下注——那么样本平均值将收敛到联合期望值,即,
以概率 1 成立。从某种意义上说,大数法则让你能够瞥见未来,看看如果你做出相同的选择会发生什么。在扑克游戏中,如果你只做期望值为正的下注,长期下来你将会赢。
在机器学习中,LLN 同样起着至关重要的作用。查看均方误差
再次强调。如果样本数量(n)达到百万级,计算这个总和的梯度就变得不可行。然而,均方误差是预测误差的样本平均值;因此,采样较少的样本就足够了。这就是随机梯度的核心原理,它使得大规模机器学习变得可行。
本章结束了我们的旅程。然而,还有很多东西可以学习;我可能会一直写这本书,直到时间的尽头。不幸的是,我们必须在某个地方停下。现在,与其总结书中的所有内容,不如谈谈最重要的信息:学习永无止境。
这是一个螺旋式上升的过程,你不断从更高的视角遇见熟悉的景象。如果你继续前行,你会明白我在说什么。
如果你过着充满智力挑战的生活,你也会发现知识就像是保持一打漏水的杯子满满的水。如果你的注意力从其中一个杯子移开,它会比你想象的更快地空掉。换句话说,如果你不使用它,你会失去它。这是完全正常的。好消息是,如果你已经打下了坚实的基础,重新填充杯子是很快就能做到的。有时,只是快速浏览一下你很久以前读过的一本书的页面就能解决问题。
这就是我知道这不是告别的原因。如果你觉得这本书有用,并继续深入机器学习的世界,我们将以概率 1 再次相遇。你只需要继续前行。
20.9 问题
问题 1. 设 X,Y : Ω →ℝ 为两个随机变量。
(a) 证明如果 X ≥ 0,那么 𝔼[X] ≥ 0。
(b) 证明如果 X ≥ Y,那么 𝔼[X] ≥ 𝔼[Y]。
问题 2. 设 X : Ω →ℝ 为一个随机变量。证明如果 Var[X] = 0,那么 X 仅取一个值。(即,X(Ω) = {X(ω) : ω ∈ Ω} 只有一个元素。)
问题 3. 设 X ∼ Geo(p) 为一个几何分布(见 19.2.3 节)的离散型随机变量。证明:
提示:对于任意 q ∈ (0,1),∑ [k=1]^∞ kq^(k−1) = (1 − q)^(−2)。
问题 4:设 X ∼ exp(λ) 为一个指数分布的连续随机变量。证明
问题 5:求指数分布的 λ 参数的最大似然估计。
加入我们的 Discord 社区
与其他用户、机器学习专家以及作者本人一起阅读本书。提出问题,为其他读者提供解决方案,通过“问我任何问题”环节与作者聊天,等等。扫描二维码或访问链接加入社区。packt.link/math
第二十六章
参考文献
-
Jaynes, E. T. (2003). 《概率论:科学的逻辑》。剑桥大学出版社,剑桥。
-
SciPy 文档。
docs.scipy.org/doc/scipy/ -
Shannon, C. E. (1948). 《通信的数学理论》。The Bell System Technical Journal, 27, 379–423。
-
Bishop, C. M. (2006). 《模式识别与机器学习》(第 4 卷)。Springer。
第五部分
附录
本部分包含以下章节:
-
附录 A,这只是逻辑
-
附录 B,数学的结构
-
附录 C,集合论基础
-
附录 D,复数
附录 A
这只是逻辑
逻辑规则对数学的重要性,就如同结构规则对建筑学的重要性。—— 伯特兰·罗素
“数学是一种语言,”我的一位教授常常这么说。“学习数学从建立基本词汇开始。”
他忘记补充的一点是,数学是思维的语言。我经常被问到这个问题:做软件工程师/数据科学家/随机技术专业人员需要学数学吗?我的回答很简单。如果你在职业生涯中需要经常解决问题,那么数学对你是极其有益的。你不一定要有效地思考,但你会受益更多。
数学的学习曲线是陡峭的。你自己也经历过,这种困难可能让你无法熟悉其基础。我有个好消息:如果我们将学习数学视为学习一门外语,我们可以先从建立基本词汇开始,而不是直接深入到诗歌和小说中。正如我的教授所建议的那样。
A.1 数学逻辑 101
逻辑和清晰的思维是数学的基础。但那是什么呢?你会如何解释“逻辑”是什么?
我们的思维过程通过数学逻辑这一领域被形式化。在逻辑中,我们处理命题,也就是那些要么为真要么为假的陈述。“外面在下雨。” “人行道是湿的。”这两个都是有效的命题。
为了能够有效地推理命题,我们通常用罗马大写字母表示它们,比如
每个命题都有一个对应的真值,要么为真,要么为假。它们通常用 1 和 0 来表示。尽管这看起来没什么大不了的,但找出真值可能是非常困难的。想想这个命题
这是著名的 P = NP 猜想,数学中最长期未解决的问题之一。这个命题容易理解,但解决这个问题(也就是找到对应命题的真值)一直令最聪明的大脑也束手无策。
从本质上讲,我们整个科学知识体系都包含在我们已经确定真值的命题中。那么,如何在实践中做到这一点呢?
A.2 逻辑连接词
就命题本身而言,它们不足以提供有效的推理框架。数学(以及现代科学的整个体系)是由逻辑连接词构成的小型构件形成的复杂命题的集合。每个连接词接受一个或多个命题,并转变它们的真值。
“如果外面在下雨,那么人行道就会湿。”这是两个命题通过蕴含连接词结合在一起的例子。蕴含连接词共有四种基本类型:否定、析取、联结和蕴含。我们将逐一详细讨论每一种。
否定将命题的真值翻转为相反的值。它用数学符号¬表示:如果 A 是一个命题,那么¬A 就是它的否定。连接词通过真值表来定义,真值表列举了给定输入时结果表达式的所有可能真值。用文字书写,这看起来可能很复杂,所以这里提供¬的真值表来说明这一概念。
在自然语言中表达命题时,否定通常用“not”来表示。例如,“屏幕是黑色”命题的否定是“屏幕不是黑色”。(而不是“屏幕是白色”。)
逻辑与(conjunction)等同于语法中的“和”连接词,用符号∧表示。命题 A ∧B 只有在 A 和 B 都为真时才为真。例如,当我们说“桌子已摆好,食物也准备好了”时,意味着两个部分都为真。以下是真值表:
析取在英语中被称为“or”,用符号∨表示。命题 A ∨B 在其中一个为真时为真:
析取是包容性的,不像我们在自然语言中常用的排他性“或”。当你说“我正在坐火车或开车旅行”时,不能两者都为真。析取连接词不是排他性的。
最后,蕴含连接词(→)形式化了从前提 A 推导出结论 B 的过程:“如果 A,那么 B。”
蕴含仅在前提为真而结论为假的情况下为假;否则为真。
一个例子是笛卡尔的名言:“我思故我在。”将其翻译为形式逻辑语言,就是
形式为“如果 A,那么 B”的句子称为条件句。这不仅仅是哲学问题。科学是由这样的命题组成的:“如果 X 是一个封闭系统,那么 X 的熵不能减小。”(这是热力学第二定律所述的内容。)
我们的大部分科学知识由 A →B 命题组成,科学研究等同于追求蕴含的真值。在实际问题中,我们依赖于定理(即蕴含),这些定理将我们的前提转化为结论。
A.3 命题演算
如果你觉得连接词类似于算术运算,你是对的。连接词生成命题。因此,连接词可以再次应用,形成复杂的表达式,如 ¬(A ∨B) ∧C。构建这样的表达式和推理论证称为命题演算。
就像算术运算一样,由命题和连接词组成的表达式也有恒等式。想想著名的代数恒等式
这是最常用的符号表达式之一。这样的恒等式意味着我们可以用一种形式写出另一种形式。
在数学逻辑中,我们称这些为逻辑等价性。
定义 102. (逻辑等价性)
如果命题 P 和 Q 总是有相同的真值,则它们在逻辑上等价。
如果 P 和 Q 在逻辑上等价,我们写作
P ≡ Q.
为了给你一个例子,来看一下我们的第一个定理,它建立了合取连接词的逻辑等价性。
定理 140. (合取的性质)
设 A、B 和 C 为任意命题。那么,
(a) (A ∧B) ∧C ≡A ∧ (B ∧C) (结合律)
(b) A ∧B ≡B ∧A (交换律)
(c) A ∨ (B ∧C) ≡ (A ∨B) ∧ (A ∨C) (分配律)
(d) A ∧A ≡A (幂等律)
证明。通过绘制真值表来展示这些性质。我们将为 (a) 做这一步,而其余部分留给你作为练习。(我强烈建议你做这件事,因为自己完成任务是一个很好的学习机会。)
对于结合性性质,庞大的真值表
提供了一个证明。
有几条备注需要说明。首先,我们应该从左到右阅读真值表的列。严格来说,我们可以省略 A∧B 和 B∧C 的列。然而,包含这些列能帮助思维更清晰。
其次,由于结合律,我们可以自由地写 A ∧B ∧C,因为运算顺序无关紧要。
最后,注意我们的第一个定理是一个前提和一个结论,通过蕴含连接词连接起来。如果我们用
那么我们定理的第一部分就是命题 P →Q,我们已经通过列出真值表证明了它是正确的。这展示了我们在此构建的命题演算的巨大力量。
定理 140 有一个关于析取的类似命题。为了完整起见,下面陈述了该命题,但证明留给你作为练习。
定理 141. (析取的性质)
设 A、B 和 C 为任意命题。那么,
(a) (A ∨B) ∨C ≡A ∨ (B ∨C) (结合律)
(b) A ∨B ≡B ∨A (交换律)
(c) A ∧ (B ∨C) ≡ (A ∧B) ∨ (A ∧C) (分配律)
(d) A ∨A ≡A (幂等性)
就像算术运算一样,逻辑连接词也有优先级顺序:¬,∧,∨,→。这意味着,例如,(¬A) ∧B) ∨C 可以写成 ¬A ∧ (B ∨C)。
在我们的命题演算中,最重要的规则之一就是德摩根定律,它描述了合取和析取在否定下的行为。
定理 142. (德摩根定律)
设 A 和 B 为两个任意命题。那么,
(a) ¬(A ∧B) ≡¬A ∨¬B
(b) ¬(A ∨B) ≡¬A ∧¬B
保持成立。
证明。像往常一样,我们可以通过列出两个真值表来证明德摩根定律
并且
来验证我们的论断。
我们到目前为止建立的命题演算是思维的数学形式化。然而,还有一个东西缺失:推理,或者正如维基百科所说的,“推理是从前提的真实性中得出结论的心理过程。”这一点通过著名的假言推理规则得到了体现。
定理 143. (假言推理)
设 A 和 B 为两个命题。如果 A 和 A →B 都成立,那么 B 也成立。
证明。让我们再看一下 → 的真值表:
通过查看其行,我们可以看到,当 A 为真且 A →B 成立时,B 也为真,正如假言推理原则所示。
由于模态假言推理听起来非常抽象,这里有一个具体的例子。从常识上讲,我们知道“如果下雨,那么人行道是湿的”这个命题是成立的。如果我们从屋顶窗户观察到确实在下雨,我们就可以毫不犹豫地得出人行道是湿的结论,即使我们没有亲眼看到它。
在符号表示中,我们可以写成
A → B, A ⊢ B,
其中,推导符号 ⊢ 实质上可以理解为“证明”。因此,假言推理表明 A →B 和 A 证明了 B。
假言推理就是我们如何使用定理。它始终在背后支持着我们。
注 22. (反转蕴含)
这是指出最常见的逻辑谬误之一——反转蕴含关系的绝佳机会。当讨论某个话题时,参与者经常会使用错误的论点
A → B, B ⊢ A。
当然,这是不成立的。例如,考虑我们最喜欢的例子:
显然,A → B 成立,但 B → A 不成立。湿滑的人行道有其他原因。例如,有人不小心把一桶水洒在上面。
A.4 变量和谓词
所以,数学是关于命题、蕴涵以及它们的真值的。我们已经看到,可以使用我们的命题演算来构造命题并推理一些相当复杂的表达式。然而,到目前为止,我们建立的语言并不适用于带有变量的命题。
例如,想想这句话
因为真值依赖于 x,这并不是一个结构良好的命题。
带有变量的句子叫做谓词,我们通过强调它们对变量的依赖来表示它们;例如,
P (x) : x ≥ 0,
或者
每个谓词都有一个域,从中可以获取其变量。你可以将谓词 P(x) 视为一个函数,它将其域映射到集合 {0, 1},表示它的真值。(严格来说,当我们定义我们形式语言的基础时,并没有可用的函数作为工具。然而,我们不是哲学家或集合论专家,所以我们不需要关心这些细节。)
谓词定义了真集,即谓词为真的域的子集。从形式上讲,它们表示为
{x ∈ D : P(x)}, (A.1)
其中 P(x) 是一个具有定义域 D 的谓词。
翻译成英文为(A.1):“对于 D 中的所有元素 x,P(x) 为真。”
虽然我们之前没有讨论过集合,但如果你有计算机科学背景,真集可能显得很熟悉。例如,如果你曾使用过 Python 编程语言,你可能见过像这样的表达式
s = {x for x in range(1, 100) if x % 5 == 0}
一直如此。这些叫做概念化,它们受到所谓的集合构造符号的启发,如(A.1)。
A.5 存在量化和全称量化
谓词是正式化数学思维的一大进步,但我们还没有完全到达目标。举一个机器学习的例子,我们来谈谈如何找到损失函数的最小值(也就是训练模型)。
如果对于其定义域 D 中的所有其他 y,f(x) ≤ f(y) 成立,则称点 x 为函数 f(x) 的全局最小值。例如,点 x = 0 是函数 f(x) = x² 的一个最小值。
我们如何在我们的形式化语言中表达这个呢?首先,我们可以说
其中我们固定 f(x) = x² 和 x = 0。这个句子有两个部分:对于所有 y ∈ D,以及 f(x) ≤ f(y) 为真。第二部分是一个谓词:
其中 y ∈ ℝ。
第二部分似乎是新的,因为我们在我们的形式语言中从未见过“对于所有”的词语。它们表达了一种关于何时谓词 P(y) 为真的量化方式。
在数学逻辑中,我们需要的两个量词是:全称量词“对所有”,用符号 ∀ 表示,以及存在量词“存在”,用符号 ∃ 表示。
例如,考虑句子“我的所有朋友都是数学家。”通过定义集合 F 为我的朋友集合,并将这个定义域上的谓词表示为
我们可以将我们的句子形式化为
记住,谓词 M(x) 的定义域是 F。我们本可以省略这一点,但这样写更易于理解。
类似地,“我至少有一个朋友是数学家”可以翻译为
当量词后面有更复杂的命题时,我们用括号标记它的范围:
注意到,由于 (∀x ∈F,M(x)) 和 (∃x ∈F,M(x)) 只有一个真值,它们是命题,而不是谓词!因此,量词将谓词转化为命题。像其他命题一样,逻辑联接词可以应用于它们。
在所有运算中,否定是最有趣的。为了看清楚为什么,假设我们考虑之前的例子:“我的所有朋友都是数学家。”起初,你可能会说它的否定是“我的朋友都不是数学家”,但这并不正确。想一想:我可以有数学家的朋友,只要不是所有朋友都是数学家。所以,
换句话说(或者应该说是符号),我们有
也就是说,粗略地说,∀ 的否定是 ∃,而 ∃ 的否定是 ∀。
A.6 问题
问题 1. 使用真值表证明
(a) A ∨¬A 为真,
(b) 和 A ∧¬A 为假。
换句话说,A ∨¬A 是一个重言式,而 A ∧¬A 是一个矛盾式。(我们称总为真的表达式为重言式,总为假的表达式为矛盾式。)
问题 2. 定义异或运算 XOR,用 ⊕ 表示,真值表如下
证明
(a) A ⊕B ≡ (¬A ∧B) ∨ (A ∧¬B)
(b) 和 A ⊕B ≡ (¬A ∨¬B) ∧ (A ∨B)
保持成立。
加入我们的 Discord 社区
与其他用户、机器学习专家以及作者本人一起阅读本书。提出问题,为其他读者提供解决方案,通过“问我任何问题”环节与作者聊天,等等。扫描二维码或访问链接加入社区。packt.link/math
附录 B
数学的结构
我们已经走过了很长的路程:我们研究了命题、逻辑联结词、谓词、量词和所有形式逻辑。这是为了能够谈论数学。然而,最终,我们希望做的是数学。
作为唯一的精确科学,数学建立在定义、定理和证明的基础上。我们精确地定义对象,对它们提出猜想,然后用数学上正确的论证证明这些猜想。你可以把数学看作是由命题、蕴涵和 modus ponens 组成的庞大建筑。如果一个定理失败,那么所有依赖于它的其他定理也都会失败。
在其他科学领域,操作方式是假设、实验和验证。然而,在数学中,实验并不足够。例如,考虑著名的费马数,即形如 F[n] := 2^(2^n) + 1 的数。费马曾猜测它们都是素数,因为 F[0]、F[1]、F[2]、F[3] 和 F[4] 都是素数。
在某些科学领域,五次肯定的“实验”可能足以接受假设为真。然而在数学中却不行。1732 年,欧拉证明了 F[5] = 4,294,967,297 不是素数,因为 4,294,967,297 = 641 × 6,700,417。(想象一下在 18 世纪计算这个数字,计算机时代还远未到来。)
到目前为止,我们在讨论数学逻辑时已经看到了若干定义、定理,甚至证明。现在是时候放大镜下审视它们,看看它们究竟是什么!
B.1 什么是定义?
模糊性是自然语言的缺点。例如,如何定义“热”这一概念?经过几次尝试,你会很快发现没有两个人对其有相同的定义。
在数学中,没有模糊性存在的余地。每个对象和每个属性必须被精确定义。最好通过一个好的例子来理解,而不是进行哲学思考。
定义 103.(约数)
设 b ∈ ℤ 是一个整数。我们说 a ∈ ℤ 是 b 的约数,当且仅当存在一个整数 k ∈ ℤ,使得 b = ka。
“a 是 b 的约数”这一属性用 a∣b 表示。
例如,2∣10 和 5∣10,但 7 ∤ 10。(交叉符号表示所述属性的否定。)
用我们正式语言来表达,“a 是 b 的约数”的定义可以写作:
a ∣ b :∃ k ∈ ℤ,b = k**a。(B.1)
不要让 a∣b 的符号迷惑了你;这实际上是一个伪装的谓词。我们本可以用其他方式表示 a∣b,例如:
尽管每一个数学定义都可以形式化,但我们更倾向于使用自然语言,因为它更容易理解。(至少对人类来说是这样,对计算机来说则不然。)
就像积木一样,定义是层层叠加的。
(如果你有敏锐的细节观察力,你会注意到,即使是定义 103 也建立在其他概念之上,比如数字、乘法和等式。我们没有精确定义这些概念,只是假设它们是存在的。由于我们的目标不是从零开始重建数学,因此我们会对此略过不提。)
再次强调,最好在这里看一个例子。让我们来看一下偶数和奇数!
定义 104. (偶数和奇数)
设 n ∈ℤ 是一个整数。我们说 n 是偶数,当且仅当 2∣n。
反过来,我们说 n 是奇数,当且仅当 2 ∤ n。(符号 a ∤ b 表示“a 不是 b 的约数”的否定。)
再一次,用我们正式的语言。对于整数 n ∈ℤ,谓词
并且
表示与定义 104 相同。
这些例子并不太吸引人,所以让我们看看更有趣的内容!
定义 105. (质数)
设 p ∈ℕ 是一个正整数。我们说 p 是质数,如果
(a)p/span>1,
(b)如果 a∣p,则 a = 1 或 a = p。
换句话说,质数除了它们自己之外没有其他整数约数。前几个质数是 2、3、5、7、11、13、17 等等。非质数整数称为合成数。
图 B.1:谓词逻辑中质数定义的分解
质数的定义可以写成:
P (p) : (p >1)∧ (∀a ∈ ℤ,(a | p → ((a = 1) ∨ (a = p))))。
这看起来可能很复杂,但我们可以将其分解成几个部分,如图 B.1 所示。
质数在我们日常生活中起着至关重要的作用!例如,许多主流的加密方法使用大质数来加密和解密信息。没有它们,你就无法安全地发起金融交易。
它们的有用性通过它们的各种性质得到保证,这些性质以定理的形式被建立起来。我们很快就会看到其中的一些,但首先,让我们谈谈定理到底是什么。
B.2 什么是定理?
所以,定义本质上是一个谓词,它的真值集由我们关心的对象组成。数学的核心就是发现涉及这些对象的真命题,通常以 A → B 的形式。考虑以下定理。
定理 144. (凸函数的全局最小值存在性)
设 是一个函数。如果
是连续的,则存在一个
,使得
在
处达到最小值,且该点属于区间
。
(即,对于所有 ,我们有
。)
如果你对连续性和最小值的概念不熟悉,不用担心;这不是重点。关键是,定理 144 可以写成:
其中,F 表示所有函数的集合 [0,1] →ℝ,谓词 C(f) 和 M(f) 定义如下:
注意定理的结构:“设 x ∈A。如果 B(x),则 C(x)。” 在第一句中,我们确定了谓词 A(x) 和 B(x) 的定义域,并且在条件句“如果 B(x),则 C(x)”前放置了一个全称量词。
B.3 什么是证明?
现在我们理解了什么是定理,是时候看看证明了。我们刚刚看到,定理是正确的命题。证明是建立命题真理的推理过程。让我们来看一个例子,而不是像哲学家那样讨论!
定理 144 的证明我们还无法完成,因此让我们看看一个更简单的例子:偶数之和。
定理 145. (偶数之和)
设 n,m ∈ℤ 为两个整数。如果 n 和 m 都是偶数,那么 n + m 也是偶数。
证明。由于 n 是偶数,2∣n。根据定义 103,这意味着存在一个整数 k ∈ℤ,使得 n = 2k。
类似地,由于 m 也是偶数,存在一个整数 l ∈ ℤ,使得 m = 2l。将两者相加,我们得到
给定 n + m 确实是偶数。
如果仔细阅读上面的证明,你可能会注意到它是一系列的蕴含和模态推理。正是这两者构成了我们推理技能的支柱。所证明的结论已经铁定。
理解什么是证明是数学中最大的技能差距之一。如果你没有马上理解,别担心;这是一个深奥的概念。你最终会习惯证明的。
B.4 等价命题
数学的基本构建块是形式为 A →B 的命题;至少,这是我在本章中强调的内容。
我没有说得很准确。命题 A →B 翻译为“如果 A,那么 B”,但有时,我们知道得更多。通常,A 和 B 具有相同的真值。在自然语言中,我们通过说“当且仅当 B 时 A”来表达这一点。(尽管这种情况比简单的条件句要少得多。)
在逻辑中,我们用双条件连接词 ↔︎ 来表示这种关系,其定义为
“当且仅当”类型的定理称为等价命题,它们在数学中起着至关重要的作用。在证明等价命题时,我们必须同时证明 A →B 和 B →A。
为了看到一个例子,让我们回到初等几何学。正如你可能在高中学到的那样,我们可以用由两个实数构成的元组来描述平面上的几何对象。通过这种方式,几何性质可以转化为分析性质,并且我们通常可以通过简单的计算证明困难的定理。
例如,让我们讨论正交性,这是数学中最重要的概念之一。这里是平面上两个向量的正交性定义。
定义 106. (正交性)
设 a 和 b 是平面上的两个非零向量。如果它们夹角为 π∕2,则称 a 和 b 互相正交。
正交性用 ⊥ 符号表示;也就是说,a ⊥ b 意味着 a 和 b 是正交的。
为了简便起见,我们总是假设夹角在 0 和 π 之间。(π 弧度等于 180 度,但我们总是使用弧度。)
然而,测量两个任意向量之间的夹角并不像听起来那么简单。我们需要一个可操作的公式,这就是点积的用武之地。
定义 107. (平面向量的点积)
设 a = (a[1], a[2]) 和 b = (b[1], b[2]) 是平面上的两个向量。它们的点积 a ⋅ b 定义为
其中,α 是两个向量之间的夹角,|⋅| 表示向量的大小。
点积提供了一个关于正交性的等价定义,以“当且仅当”定理的形式表达。
定理 146\。
设 a = (a[1], a[2]) 和 b = (b[1], b[2]) 是平面上的两个非零向量。那么,当且仅当 a ⋅ b = 0 时,a 和 b 是正交的。
让我们来看一下这个等价关系的证明!
证明。我们需要证明两个命题:
(a) a ⊥ b ⇒ a ⋅ b = 0,
(b) a ⋅ b = 0 ⇒ a ⊥ b。
我们从 (a) 开始。如果 a ⊥ b,那么它们之间的夹角 α 等于 π∕2。于是,
这正是我们需要展示的内容。
为了证明 (b),我们必须注意到,由于 a 和 b 都是非零向量,它们的大小 |a|、|b| 也都是非零的。因此,
只有当 cosα = 0 时,这个式子才成立。反过来,这意味着 α = π∕2;也就是说,a ⊥ b。(回想一下,我们假设夹角 α 在 0 和 π 之间。)
所以,我们已经知道了关于定理和证明的一切。那么,如何在实际中找到证明呢?让我们来看看基本的技巧。
B.5 证明技巧
这没有捷径可走:证明定理是困难的。有些最聪明的人花了几十年,有些猜想在一个世纪后仍未解决。(也就是说,它们既未被证明也未被反驳。)
一些基本而强大的工具可以帮助人们克服困难。接下来,我们将看看三种最重要的工具:数学归纳法、反证法和对立命题原则。
B.5.1 数学归纳法证明
你如何爬一段楼梯?很简单。你先爬第一步,然后爬下一步,依此类推。
你可能会感到惊讶,但这正是我们在数学中经常使用的东西。
让我们通过一个例子来阐明这一点。
定理 147. (自然数之和)
设 n ∈ℕ 为任意整数。那么,
1 + 2 + ⋯ + n = n(n + 1) 2 (B.2)
成立。
证明。对于 ,情况很明确:(B.2) 的左侧计算结果为 1,而右侧是
因此,我们的命题对于 n = 1 成立,这叫做基本情况。
这里就是关键步骤,即归纳步骤。我们假设 (B.2) 对给定的 n 成立;也就是说,我们有
这就是所谓的归纳假设。使用这个假设,我们将证明 (B.2) 对 n+1 也成立。换句话说,我们的目标是证明:
根据我们的归纳假设,我们有:
继续计算,我们得到:
这就是我们需要证明的。
总结一下发生了什么,我们用谓词来表示方程 (B.2):
归纳证明分为两个主要步骤。首先,我们证明基本情况 S(1) 是成立的。然后,我们证明对于任意 n,蕴含式 S(n) → S(n + 1) 成立。从归纳步骤出发,这意味着 S(n) 对所有 n 都成立:这一系列的蕴含
结合 S(1) 和强大的模态推理(定理 143)得出 S(n) 为真。我们首先完成了第一步 S(1),然后证明我们可以从任意位置进行下一步。
归纳法并不容易理解,因此这里提供另一个例子。(它比之前的稍微复杂一些。)跟随证明过程,看看你是否能识别出归纳法的痕迹。
定理 148.(数论的基本定理)
设 n ∈ ℤ 是一个整数,并假设 n > 1。那么,n 可以唯一地表示为素数的乘积;即,存在素数 p[1], p[2], ..., p[l] 和指数 k[1], k[2], ..., k[l],使得:
n = p[1]^(k[1]) p[2]^(k[2]) ⋯ p[l]^(k[l])。(B.3)
此外,这个表示是唯一的。
例如,24 = 2³3,且 24 不能写成其他素数的乘积。
自然语言的表达掩盖了它的本质,但事实上,定理 148 可以转化为以下句子:
为了简单起见,我们只证明素因数分解的存在性,而不证明唯一性。
证明。(存在性)对于 n = 2,定理显然成立,因为 2 本身就是一个素数。
现在,设 n > 2,并假设 (B.3) 对所有小于或等于 n 的整数 m 都成立。(这是我们的归纳假设。)
我们的目标是证明 (B.3) 对 n + 1 也成立。
有两种可能性:要么 n + 1 是一个素数,要么是一个合成数。如果它是素数,那么我们已经完成了,因为 n + 1 本身就是 (B.3) 的形式。否则,如果 n + 1 是一个合成数,我们可以找到一个不是 1 或 n + 1 的约数:
对于某些 a,b ∈ ℤ。由于 a,b ≤ n,我们可以应用归纳假设!展开来说,这意味着我们可以把它们写成
其中 p[i],q[i] 是质数,α[i],β[i] 是指数。因此,
这只是(B.3),不过符号多了一些。
数学中的归纳法就像是一把电动工具。它非常强大,只要适用,几乎总能完成任务。
B.5.2 反证法证明
有时候,通过假设结论为假,然后推导出矛盾,证明定理会更容易。
再次,最好看一个快速的例子。让我们重新回顾一下我们亲爱的老朋友——质数。
定理 149\。
有无限多个质数。
证明。假设质数是有限个:p[1],p[2],…,p[n]。
整数 p[1]p[2]…p[n] + 1 是质数吗?如果 p[1],p[2],…,p[n] 是所有质数,那么只需检查是否
这确实成立,因为根据定义,p[1]p[2]…p[n] + 1 = p[i]k + 1,其中 k 只是除 p[i] 之外的质数的乘积。
由于没有 p[i] 是 p[1]p[2]…p[n] + 1 的约数,它必须是一个质数。我们发现了一个新的质数,它不在我们的列表中!这意味着我们的假设(即质数是有限个)导致了矛盾。
因此,质数必须是无限多个。
如果你眼光敏锐,你可能已经注意到,上面的例子并不是 A →B 的形式;它只是一个简单的命题:
在这些情况下,证明 ¬A 为假会得到所需的结论。然而,这种技巧对于 A →B 风格的命题同样适用。(顺便说一句,定理 148 的存在部分也可以通过反证法证明;我将这个留给你作为练习。)
B.5.3 逆命题
我们将要学习的最后一个技巧是逆命题,这是一个巧妙的方法,它给经典的 A →B 风格的思维方式带来了变化。
我们应该更好地了解蕴含连接词,看看它是什么。事实证明,A →B 可以通过否定和析取来表示。
定理 150\。
设 A 和 B 为两个命题。那么,
证明。真值表
提供了一个证明。
为什么这与我们有关呢?很简单。看一下以下的推论。
推论 4\。 (逆命题原理)
设 A 和 B 为两个命题。那么,
证明。定理 150 说明
这就是我们需要证明的内容。
这里有一个简单的整数命题,给你一个数学例子。
定理 151\。
让表示一个整数。如果
,则
。
证明。我们应该通过对立命题来证明这一点。因此,假设 4∣n。这意味着
对于某个整数 k ∈ℤ。然而,这意味着
这表明 2∣n。由于对立命题的原理,(4∣n)→(2∣n)与(2∤ n)→(4∤ n)在逻辑上是等价的,这就是我们需要证明的内容。
对立命题不仅在数学中有用,它还是一种非常有价值的思维工具。我们来考虑一个反复出现的命题:“如果外面下雨,那么人行道是湿的。”我们知道这是对的,但这也意味着“如果人行道不湿,那么外面就没有下雨”(因为如果下雨的话,人行道应该是湿的)。
你每天都会不自觉地进行这类推理。现在你有了一个名字,可以开始有意识地应用这个模式了。
加入我们的 Discord 社区
与其他用户、机器学习专家和作者本人一起阅读这本书。提出问题,为其他读者提供解决方案,通过“问我任何问题”环节与作者交流,还有更多内容。扫描二维码或访问链接加入社区。packt.link/math
附录 C
集合论基础
换句话说,一般的集合理论其实非常基础,但如果你想成为一名数学家,你需要了解它,这里有它;读一读,吸收它,然后忘掉它。——保罗·哈尔莫斯
虽然保罗·哈尔莫斯很久以前说过上述话,但它依然非常准确。只有一个部分已经过时:集合论不仅对数学家必要,对于计算机科学家、数据科学家和软件工程师同样重要。
你可能以前听说过或学习过集合论。可能很难理解它为何对机器学习如此重要,但相信我,集合论是数学的基础。深层次来看,一切都是集合,或者是集合之间的函数。(正如我们在第九章看到的,甚至函数也可以定义为集合。)
可以将集合论与机器学习的关系比作语法与诗歌的关系。要写出优美的诗歌,一个人需要熟悉语言的规则。例如,数据点在向量空间中表示为向量,通常是通过集合的笛卡尔积构造的。(如果你不熟悉笛卡尔积,不用担心,我们很快会讲到的。)或者,要真正理解概率论,你需要熟悉事件空间,它是一些在特定操作下封闭的集合系统。
那么,集合到底是什么呢?
C.1 什么是集合?
从表面上看,集合只是一个事物的集合。我们通过列举其元素来定义集合,例如
如果两个集合具有相同的元素,则这两个集合相等。给定任何元素,我们总是能判断它是否是某个集合的成员。当 A 的每个元素也是 B 的元素时,我们说 A 是 B 的子集,或者用符号表示为,
如果 A ⊆B 且 A≠B,我们说 A 是 B 的真子集,并写作 A ⊂B。如果我们有一个集合,我们可以通过指定所有元素满足的某个属性来定义子集,例如,
(%表示取模运算符。)这种方法被称为集合构造符号,如果你熟悉 Python 编程语言,你可以看到它启发了列表推导式。在那里,人们会写出类似这样的代码:
even_numbers = {n for n in range(10) if n%2 == 0}
print(even_numbers)
{0, 2, 4, 6, 8}
我们甚至可以将集合描述为其他集合的集合,比如,A 的所有子集的集合。这称为幂集,是一个如此重要的概念,值得为其单独定义。
定义 108. (幂集)
设 A 为任意集合。由以下定义的集合
包含 A 的所有子集的集合称为 A 的幂集。
∅和 A 都是幂集 2^A 的元素。
不幸的是,定义集合为元素的集合并不可行。没有更多的条件,它可能导致悖论,正如著名的罗素悖论所示。(我们将在本章后面讨论这个问题。)为了避免深入集合论的困境,我们接受集合有某种正式的定义,这个定义埋藏在数学的千页大书中。与其担心这些,不如专注于我们可以用集合做些什么。
C.2 集合运算
仅用这两种方法(列出成员或使用集合构造符号)描述更复杂的集合是非常困难的。为了简化工作,我们定义了集合上的运算。
C.2.1 并集、交集、差集
最基本的运算是并集、交集和差集。你可能对这些比较熟悉,因为它们在高中时就经常遇到。即使你已经熟悉了它们,接下来还是看看正式的定义吧。
定义 109.(集合运算)
设 A 和 B 为两个集合。我们定义
(a) 它们的并集由 A ∪B := {x : x ∈A 或 x ∈B} 定义,
(b) 它们的交集由 A ∩B := {x : x ∈A 且 x ∈B} 定义,
(c) 它们的差集由 A ∖B := {x : x ∈A 且 xB} 定义。
我们可以通过文氏图轻松地可视化这些运算,如下所示。
图 C.1:通过文氏图可视化的集合运算
我们也可以用简单的英语表达集合运算。例如,A∪B 表示“A 或 B”。类似地,A ∩B 表示“A 且 B”,而 A ∖B 表示“A 但不是 B”。在谈到概率时,这些表达将有助于将事件转化为集合论的语言。
这些集合运算也有许多愉快的性质。
例如,它们在括号方面表现良好。
定理 152\。
设 A、B 和 C 为三个集合。并集操作是
(a) 结合性,即 A ∪ (B ∪C) = (A ∪B) ∪C,
(b) 交换性,即 A ∪B = B ∪A。
此外,交集运算也是结合性和交换性的。最后,
(c) 并集对交集具有分配性,即 A∪(B∩C) = (A ∪B) ∩ (A ∪C),
(d) 交集对并集具有分配性,即 A ∩ (B ∪C) = (A ∩B) ∪ (A ∩C)。
并集和交集可以为任意多个操作数定义。也就是说,如果 A[1]、A[2]、…、A[n]是集合,
交集的情况类似。请注意,这是一种递归定义!由于结合性,括号的顺序无关紧要。
结合性和交换性可能看起来既抽象又微不足道。然而,并非所有运算都是如此,因此强调这些概念是值得的。如果你感兴趣,非交换性运算就在我们眼前,一个简单的例子是字符串连接。
a = /span>string/span>
b = /span>concatenation/span>
a + b == b + a
False
C.2.2 德·摩根定律
其中一个基本规则描述了集合差、并集和交集在集合运算中的共同行为,这些被称为德·摩根定律。
定理 153.(德摩根定律)
设 A、B 和 C 为三个集合。那么
(a) A ∖ (B ∪C) = (A ∖B) ∩ (A ∖C),
(b) A ∖ (B ∩C) = (A ∖B) ∪ (A ∖C)。
证明。为了简单起见,我们将通过维恩图来证明这一点。虽然画图并不是一种“正式”的数学证明,但这不是问题。我们在这里是为了理解事物,而不是陷入哲学讨论。
这里是该图示。
图 C.2:德摩根定律,用维恩图表示
基于此,你可以轻松看到(a)和(b)。
注意,德摩根定律可以推广到任何数量的集合。因此,对于任何Γ索引集,
C.3 笛卡尔积
构造新集合的最基本方法之一就是笛卡尔积。
定义 110.(笛卡尔积)
设 A 和 B 为两个集合。它们的笛卡尔积 A ×B 定义为
积的元素称为元组。注意,这个操作既不是结合的也不是交换的!
为了证明这一点,考虑到,例如,
以及
任意数量集合的笛卡尔积通过递归定义进行定义,就像我们处理并集和交集时一样。因此,如果 A[1]、A[2]、…、A[n]是集合,那么
在这里,元素是由多个元组组成的元组,为了避免写太多括号,我们可以将其简化为(a[1],…,a[n])。当操作数相同的时候,我们通常写 A^n 来代替 A ×⋅⋅⋅×A。
最常见的例子之一是笛卡尔平面,你可能之前见过。
图 C.3:笛卡尔平面
为了给出一个与机器学习相关的例子,看看数据通常是如何呈现的。我们将重点关注著名的鸢尾花数据集(scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html),它是! ℝ4 的一个子集。在这个数据集中,四个轴分别表示花萼长度、花萼宽度、花瓣长度和花瓣宽度。
图 C.4:鸢尾花数据集中的花萼宽度与花萼长度的散点图。来源:scikit-learn 文档
正如示例所示,笛卡尔积很有用,因为它将相关信息结合成一个数学结构。这是数学中的一个重复模式:通过更简单的构建块构建复杂的事物,并通过将结果转化为另一个构建块来抽象化细节。(就像创建复杂软件一样。)
到目前为止,我们已经看到了集合的愉快一面。然而,在数学家们首次尝试形式化集合论时,它们却带来了相当大的头疼。现在我们准备好看看原因了。
C.4 集合的基数
在集合论中,“一个集合有多少个元素?”是一个自然的问题。你可能没想到的是,这样一个看似简单的问题会把我们带入一个如此深邃的洞穴!
很快,你就会明白为什么了。“集合的大小”通过基数的概念来形式化,记作 jAj;也就是说,把集合 A 放在绝对值符号中。直观上,jAj 看起来很清晰,但让我向你保证,它并不是那么简单。
这就是数学中真正让人大吃一惊的地方。当然,对于像 {4,6,42} 这样的有限集合,我们可以自信地声称 j{4,6,42}j = 3,但 jℤj、jℚj、jℝj,甚至 jℝ²j 呢?
看这个:jℤj = jℚj,但 jℤj ≠ jℝj,且 jℝj = jℝ²j。换句话说:
-
整数的数量与有理数的数量是“相同的”。
-
但实数比整数“更多”。
-
以及实数线上的“点的数量”与平面上的一样多。
看吧,我告诉过你,基数是疯狂的开始。(“相同数量”和“更多”的引号是因为我们还没有定义这些术语,至少在数学意义上没有定义。)
与数学中的多个概念一样,我们不会直接定义基数。相反,我们将定义如何比较集合的基数,然后固定一些特殊集合作为比较的基准。
定义 111. (基数比较)
设 A 和 B 是两个任意的集合。
(a) 如果存在从 A 到 B 的双射函数,我们就说 jAj = jBj。
(b) 如果存在从 A 到 B 的单射函数,我们就说 jAj ≤ jBj。
(c) 如果存在从 A 到 B 的单射但不是满射的函数,我们就说 jAj/span> jBj。
让我们通过几个例子来解析这个问题。
示例 1. 设 A = {1,2,3} 和 B = {−3.2,12.452,−5.82}。那么 jAj = jBj,因为 f : A → B,
是一个双射。
示例 2. 设 A = {0,1} 和 B = {2,3,4}。那么 jAj/span> jBj,因为 f : A → B,
是单射,但不是满射。
那些更有趣的集合呢,比如 ℕ、ℤ、ℚ、ℝ?这就是事情变得奇怪的地方。
以下结果如此重要,以至于我们将其作为定理陈述。
定理 154. (自然数集合是无限的)
设 n ∈ ℕ 为任意自然数,并定义集合 A = {1,2,…,n}。那么 jAj/span> ℕ。
证明。证明很简单,因为很容易看出,函数 f : A → ℕ,由 f(a) = a 定义,是单射但不是满射。
换句话说,ℕ 不是一个有限集合!自然数集合是我们第一个无限集合的例子,定义了可数集合的概念。
定义 112. (可数集合)
设 是一个任意集合。如果
,那么
称为可数集合。
我们可以通过列举元素来证明一个集合是可数的,因为每个列举都定义了一个单射映射。例如,ℤ是可数的,因为函数 f : ℕ → ℤ定义了
是一个双射。换句话说,序列
是ℤ的列举。更多示例,请参见第十章。
关于可数性,有两个重要的结果:可数集合的并集和笛卡尔积仍然是可数的。
定理 155. (可数集合的并集和笛卡尔积)
令 A[1], A[2], …是可数集。
(a) A[1] × A[2]是可数的。
(b) ∪[n=1]^∞A[n]是可数的。
在无限基数中,有两个我们常遇到的:可数无限和连续统。可数无限是自然数集合的基数,记作
其中,ℵ是希伯来字母“阿列夫”。另一方面,连续统是实数集合的基数,记作
C.5 拉塞尔悖论(可选)
让我们回到我之前提到的一个观点:天真地将集合定义为事物的集合是行不通的。接下来,我们将看到为什么。准备好迎接一些令人费解的数学吧。
这是一个谜语。一位理发师是“为所有不剃自己胡子的人刮胡子,并且仅为他们刮胡子。”那么,这位理发师自己剃胡子吗?没有正确的答案:无论是“是”还是“否”,定义都暗示着不然。这就是著名的理发师悖论。它不仅仅是一个有趣的小故事;它是一个动摇数学基础的悖论。
如我们所见,集合可以由集合组成。例如,{ℕ, ℤ, ℝ}是最常用的数集的集合。我们也可以定义所有集合的集合,我们用Ω来表示它。
有了这个,我们可以使用集合构造符号来描述以下集合的集合:
用简单的话来说,S 是一个包含所有不属于自身的集合的集合。尽管这很奇怪,但看起来有效。我们使用了属性“”来过滤所有集合的集合。问题出在哪里?
首先,我们无法决定 S 是否是 S 的元素。如果 S ∈ S,那么根据定义,SS。另一方面,如果 S
S,那么根据定义,S ∈ S。这确实非常奇怪。
我们可以通过分解集合构造符号来诊断问题。一般来说,它可以写作
其中 A 是某个集合,T(x)是一个属性,即关于 x 的真或假的陈述。
在定义{A ∈ Ω : AA}中,我们的抽象属性通过以下方式定义
这是完全有效的,所以问题必须出现在另一个部分:集合Ω。事实证明,所有集合的集合并不是一个集合。因此,将集合定义为事物的集合是不够的。由于集合是数学的基础,这一发现给 19 世纪末到 20 世纪初的数学发展带来了巨大的阻碍,解决这个问题花费了许多年和无数聪明的头脑。
幸运的是,作为机器学习从业者,我们不需要关心像集合论公理这样的低级细节。对我们来说,知道某个地方存在坚实的基础就足够了。(希望如此。)
加入我们的 Discord 社区
与其他用户、机器学习专家以及作者本身一起阅读本书。提出问题,为其他读者提供解决方案,通过“问我任何问题”环节与作者互动,还有更多。扫描二维码或访问链接加入社区。packt.link/math
附录 D
复数
学习是一个向上的螺旋。根据我们在学习旅程中的位置,我们会不断回顾过去的知识,并从不同的角度去审视它。
复数是需要不断复习的一个主题,理解它们使我们重新评估某些我们习以为常的知识。例如,你可能曾被教导过 −1 没有平方根。然而,在熟悉了复数之后,你会发现其实有两个平方根;它们都是复数。
这里的主要例子是二次方程:
为了证明它在实数范围内没有解(或者说没有根),我们可以检查判别式 b² − 4ac = −4 小于 0,但我们也可以简单地绘制 x² + 1 的图像。
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-3, 3, 1000)
Y = X**2+1
with plt.style.context("/span>seaborn-v0_8":
plt.figure()
plt.axhline(0, color=’black’, linewidth=1)
plt.axvline(0, color=’black’, linewidth=1)
plt.plot(X, Y)
plt.xlim([-3, 3])
plt.ylim([-5, 10])
plt.xlabel("/span>x
plt.ylabel("/span>y
plt.title("/span>The graph of x² + 1"
plt.show()
图 D.1: x² + 1 的图像
这看似不是什么大问题,但具有实数系数的多项式方程如果没有实数解,那将是一个巨大的问题。许多重要的量都是通过多项式的根来描述的,比如矩阵的特征值。
那么,我们该如何解决这个问题呢?
在大多数情况下,我们可以将二次多项式分解为两个线性项的积。例如,
这揭示了方程 x² − 1 = 0 的解(在这个例子中,解为 x = 1 和 x = −1)。
为了因式分解多项式 x² − 1,我们使用了恒等式:
那么我们能怎么做呢?对于 x² + 1,我们可以稍微发挥一点创造力。我们可以将我们的多项式写作:
其中原则上我们可以使用前面的恒等式。然而,有一个问题:没有实数满足 a² = −1。
经过几个世纪,数学家们最终得出了这个解决方案,这其实很简单:我们假设有这样的一个数。在数学中,最具创造性的规则滥用往往能够带来最大的回报。所以,假设我们的虚数 i 满足:
这样,我们得到:
换句话说,著名的二次方程 x² + 1 = 0 的解是 x = i 和 x = −i。这个 i 被称为虚数,它的发现开启了复数的世界。
那么,这些奇异的对象到底是什么?
D.1 复数的定义
让我们直接进入定义。
定义 113. (复数)
形如以下的数集:
满足 i² = −1 的数,被称为复数。我们称 a 为实部,b 为虚部,记作:
如果 a + bi 和 c + di 是两个复数,那么我们定义加法和乘法为:
(a)
(b)
复数集用 ℂ 表示。因此,我们写作:
根据定义,加法很简单。然而,乘法看起来有些复杂。为了理解为什么这样定义,像处理两个多项式一样逐项相乘。
复数的一个重要特性是它们的模,换句话说,就是它们与 0 的距离。
定义 114.(复数的模)
设 z = a + bi 为复数。它的模定义为
此外,每个复数都有一个共轭复数,正如我们稍后将看到的,它对应于关于实轴的镜像。
定义 115.(复数的共轭)
设 z = a + bi 为复数。它的共轭复数 z 定义为
注意到 zz = |z|²。
除了代数表示法 z = a + bi,复数还有丰富的几何解释,正如我们接下来要看到的那样。
D.2 几何表示法
我们可以用不同于定义中的方式来表示复数。如果你仔细想一想,每个复数 z = a + bi 可以看作有序对(a,b)。这些可以在笛卡尔平面上作为向量来可视化。
图 D.2:复数作为笛卡尔平面上的向量
复数 z = a + bi 的模|z| = 表示从原点到向量(a,b)的长度,而共轭复数 z = a−bi 则对应于将该点关于实轴进行反射。
这种几何视角为我们提供了一种新的代数方式来表示复数。
为了理解原因,回顾一下单位圆和平面上三角函数的关系。
图 D.3:复数的几何表示
这意味着每个模为 1 的复数都可以写成 cos(φ) + isin(φ)的形式。从几何表示中,我们可以看到每个复数都由其模|z|和角度φ唯一确定。所以,我们可以将所有复数写成所谓的极坐标形式
![ ( ) z = r cos(φ )+ isin (φ ) , r ∈ 0,∞ ), φ ∈ [0,2π), 其中 r = |z|被称为模,而φ被称为相位或辐角。这种几何表示法也能帮助我们更好地理解乘法。为了更清楚地理解这一点,我们先做一些代数运算!当我们乘以复数时
合起来,我们得到
你能识别出实部和虚部吗?这正是著名的三角函数加法公式。有了这些公式,我们得到了
这揭示了代数定义中不明确的许多内容。最重要的是,
-
乘积的模是各自模的乘积,
-
并且积的辐角是各个辐角的和。(模是模数的复数形式。)
换句话说,复平面中的乘法等同于一个缩放和旋转。突然间,像 i² = −1 这样的恒等式变得更加有意义:由于 i 的辐角是 π∕2(或 90 度),将其逆时针旋转 π∕2 就得到 −1。
那么,为什么我们喜欢实数呢?因为所有的多项式方程在实数范围内都有解。让我们看看!
D.3 代数基本定理
还记得我们的动机例子吗?我们引入了虚数 i 使得方程 x² + 1 = 0 有解。事实证明,复数为任何多项式方程提供了解。
让我们介绍一组具有复系数的多项式:
类似地,ℝ[x]、ℚ[x]、ℤ[x] 和 ℕ[x] 也可以被定义。多项式的次数(或简称 deg p)是 x 的最高幂。(例如,−3x⁸ + πx 的次数为 8。)
对于给定的多项式 p(x),方程 p(x) = 0 的解称为根。从代数角度看,我们希望对于特定数集上的一组多项式,每个多项式在该数集上都有根。正如我们所看到的,这在 ℝ[x] 中不成立,因为 x² + 1 = 0 没有实数解。
然而,这对于 ℂ[x] 来说有所不同,正如代数基本定理所述。
定理 156.(代数基本定理)
每个非恒定多项式 p(x) ∈ ℂ[x](即次数 deg p ≥ 1 的多项式)至少在 ℂ 中有一个根。
虽然看起来很容易证明,但我向你保证,这并不简单。原始的代数证明非常长且复杂,尽管有更简短的版本,但它需要高级的数学分析工具。
我们可以进一步理解代数基本定理。如果 p(x) 是一个次数至少为 1 的多项式,且 x[1] 是它的根,那么
是一个次数为 deg q = deg p − 1 的多项式。如果 q 不是恒定的,代数基本定理再次保证 q 也在 ℂ 中有一个根。最终,定理的反复应用导致 p(x) 可以写成
其中 x[1], x[2], …, x[n] 是 p 的根。它们中的某些可以相同,一个给定的 x[i] 在其根中出现的次数称为其代数重数。
定义 116.(根的代数重数)
令 p(x) ∈ ℂ[x],并假设
整数 p[i] 称为根 x[i] 的代数重数。
代数基本定理之所以被称为基本定理,是有原因的。例如,这就是为什么矩阵有特征值的原因,正如我们在第六章中学到的。
D.4 为什么复数很重要?
初看之下,复数在机器学习中似乎不那么重要。让我向你保证,事实并非如此:它们是绝对必不可少的。在本节中,我们将简要展望一下复数所能实现的功能。
例如,复数最重要的应用之一就是矩阵的特征值-特征向量对。对于给定的矩阵 A,有一些特殊的数字λ,称为特征值,以及相应的向量 v,称为特征向量,使得 Av = λv 成立。在线性变换的语言中,这意味着在λ的特征向量所张成的线性子空间中,变换 A 仅仅是一个拉伸操作。
这些工具非常强大,因为在某些条件下,特征值允许我们简化矩阵。
某些实数方阵可以写成以下形式
是由 A 的特征值组成的对角矩阵。猜猜是什么保证了特征值的存在:代数基本定理。
通过从实数到复数的转换,我们获得了更大的自由度和更强大的工具集。其中一个工具就是著名的傅里叶变换。为了给你一个实际的例子,让我们谈谈音频。音频数据以函数 f : ℝ →ℝ的形式出现,将时间映射到信号强度。然而,在信号处理领域,将信号理解为频率是非常重要的。每个声音都是不同频率的正弦波的叠加,量化每个频率的贡献可以揭示信号的许多信息。
import matplotlib.pyplot as plt
import numpy as np
def sin(freq, x):
return np.sin(freq*x)
X = np.linspace(0, 2*np.pi, 1000)
freqs = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = {freq: sin(freq, X) for freq in freqs}
with plt.style.context("/span>seaborn-v0_8-white:
plt.figure(figsize=(10, 10), dpi=100)
for i, freq in enumerate(freqs):
plt.subplot(3, 3, i+1)
plt.plot(X, y[freq])
plt.title(f/span>frequency = {freq}"
plt.show()
图 D.4:傅里叶变换
问题是,傅里叶变换是一个复数积分。也就是说,f 的变换是由下式定义的
没有复数,我们无法使用这个工具。
尽管我们不会详细讨论傅里叶变换,但它们在概率论中是不可或缺的工具。应用于概率分布时,它们的收敛性特性可以轻松地研究。例如,一些版本的中心极限定理(en.wikipedia.org/wiki/Central_limit_theorem)就是通过这种方式证明的。
加入我们在 Discord 上的社区
与其他用户、机器学习专家以及作者本人一起阅读本书。提问、为其他读者提供解决方案、通过问我任何问题环节与作者互动,更多内容等你来发现。扫描二维码或访问链接加入社区。packt.link/math