贝叶斯优化
第一部分:基础
EN

概率:为不确定性记账

第 1.3 节提出了一个要求。目标函数的评估代价高昂,为了决定下一次在何处评估,贝叶斯优化器需要一个知道自己不知道什么的模型,它能够表达“目标函数在这里可能很高,而那边我们完全不知道”。这类陈述需要一种语言来表达,使程序能够将其转化为可存储、可组合、可更新的数值。这种语言就是概率。

可以把概率理解为记账:总量为 1 的信念预算,分配给所有可能成立的情形。账目如何保持平衡,由两条规则规定:不再追踪某个量时,使用加法规则(sum rule);把一个量与依赖于它的量结合起来时,使用乘法规则(product rule)。贝叶斯定理是把数据转化为修正后信念的那一步,由这两条规则一行即可推出。后续各章都不需要第三条规则。代理模型、采集函数以及描述人的偏好的模型,都是把这两条规则用于更大的对象。

本章先说明概率是什么、描述的是什么,再从一张小小的数表推出这两条规则,然后借助一枚可以亲手抛掷的硬币,用这两条规则逐个观测地更新信念。本章最后介绍后续各章经常依赖的概括量(期望与方差)和假设(独立性)。学过概率课程的读者可以略读,但不要跳过第 2.5 节和第 2.7 节,高斯过程各章还会用到其中的思想。

2.1 把不确定性当作一个量 #

回顾第 1.1 节的第一个场景:调节神经网络的学习率,每次训练运行都要花费数小时。运行任何实验之前,我们心中已有一些看法。学习率为 10−310^{-3} 时很可能训练成功;学习率为 1010 时步长过大,训练几乎肯定会发散;10−210^{-2} 则两种结果都有可能。这些看法决定了先启动哪一次运行。自动化的方法同样需要持有看法,而且看法的形式必须能够用于计算:方法需要用一个数值表达“可能”,并在一次运行结束后按一定规则修改这个数值。

2.1.1 概率的两种解释 #

概率测量的是什么?常见的回答有两种。

按照频率解释(frequency reading),正面的概率就是长期重复抛掷中正面所占的比例。这种解释很具体,可以用实验检验,但需要一个可以重复的实验。

按照信念解释(belief reading),概率衡量的是:根据手头的信息,一个人应当在多大程度上相信某个陈述。这种解释也适用于无法重复的陈述。“这个网络在这个数据集上的最佳学习率介于 10−310^{-3} 与 10−210^{-2} 之间”这句话非真即假,并没有一长串网络可供计数。不确定的是我们的知识,而不是世界本身。

贝叶斯优化需要信念解释,因为它的未知量是一个固定的函数。目标函数在两次评估之间不会改变(测量噪声除外,第 2.7 节会单独讨论)。当模型给出“xx 处的值可能介于 0.8 与 0.9 之间”时,这一范围描述的是我们对某个特定函数的无知,而每次评估都会减少这种无知。本书的方法称为贝叶斯方法,原因即在于此。这一名称来自 Thomas Bayes。他的论文在他去世后于 1763 年发表,解决了这样一个问题:已知一个事件发生与未发生的次数,如何修正对某个未知机会的这种信念(Bayes,1763)。这正是第 2.5.2 节的硬币问题。

读者或许会问:信念的程度为什么要遵循与频率相同的算术,而不是其他某种演算?Cox(1946)论证,任何给可信度赋予数值的方式,只要满足几条一致性要求,就必须遵循同样的加法规则与乘法规则。举两条这样的要求为例:等价的信息必须给出相等的可信度;“A 且 B”的可信度,必须由 A 的可信度以及已知 A 时 B 的可信度共同决定。Jaynes(2003)以这一论证为基础建立了整个概率论。对本书而言,结论是实际的:两种解释共用一套演算,因此计算时无须在两者之间做出选择。

2.1.2 结果、事件与公理 #

要用信念来计算,需要少量结构。结果(outcome)是世界可能呈现的一种完整情形,样本空间(sample space)Ω\Omega 是所有结果构成的集合。事件(event)是一组结果,例如“训练运行发散”。概率为每个事件指定一个数。

定义 2.1 概率

概率 P\Prob 给每个事件 AA 指定一个数 P(A)\Prob(A),满足

  1. 对每个事件 AA,P(A)≥0\Prob(A) \ge 0;
  2. P(Ω)=1\Prob(\Omega) = 1;
  3. 只要 AA 与 BB 没有共同的结果,就有 P(A∪B)=P(A)+P(B)\Prob(A \cup B) = \Prob(A) + \Prob(B)。

这三条公理是记账规则最基本的形式(Blitzstein 与 Hwang,2019)。一个单位的信念分配在各个结果上;事件的概率就是落在其所含结果上的信念;两个没有共同结果的事件不可能共享信念,因此二者的信念相加。其余一切都由此推出。例如,事件 AA 与其对立事件“非 AA”没有共同的结果,合起来覆盖 Ω\Omega,所以 P(not A)=1−P(A)\Prob(\text{not } A) = 1 - \Prob(A)。

2.1.3 随机变量 #

我们很少关心结果的全部细节,关心的是由结果算出的数:准确率、计数、目标函数的值。随机变量(random variable)就是这样的数。

定义 2.2 随机变量

随机变量 XX 是一个函数,它给样本空间中的每个结果 ω\omega 指定一个数 X(ω)X(\omega)。

这一名称在两方面都有误导性:随机变量既不随机,也不是变量。它是一个确定性的函数,只是其输入未知。以一次训练运行为例。结果 ω\omega 包括一切可能变化的因素:随机种子、数据的顺序、硬件中的非确定性。验证准确率是 ω\omega 的函数。运行结束后,ω\omega 随之确定,准确率是一个确定的数;运行结束之前,只能说明信念如何分配在它可能取的各个数上。程序员可以把 XX 理解为作用在一个隐藏参数上的纯函数。

后续各章都依赖这里的记号,因此先作说明。大写字母 XX 表示随机变量,小写字母 xx 表示它可能取的一个值,因此“X=xX = x”是该变量取值为 xx 的事件,P(X=x)\Prob(X = x) 是这一事件的概率。上下文能够明确所指变量时,这一概率记作 p(x)p(x)。符号 ∼\sim 读作“服从”:X∼Bernoulli(0.3)X \sim \text{Bernoulli}(0.3) 表示 XX 服从右边所写的分布。竖线读作“给定”:p(x ∣ y)p(x \given y) 是假定 yy 已知时算出的 xx 的概率,其确切含义见第 2.4 节。从第 3 章起,本书遵循机器学习的惯例,不再使用大写字母,写作 p(y)p(y) 与 y∼N(0,1)y \sim \N(0, 1),用同一个字母表示变量及其取值;所指为何,上下文总能说明。

第 2.1 节引用的文献 4
  1. Bayes(1763)An Essay towards Solving a Problem in the Doctrine of Chances
  2. Cox(1946)Probability, Frequency and Reasonable Expectation
  3. Jaynes(2003)Probability Theory: The Logic of Science
  4. Blitzstein 与 Hwang(2019)Introduction to Probability

2.2 离散分布 #

随机变量的可能取值可以一一列出时,称其为离散的(discrete):硬币落地为正面或反面,骰子朝上的是六个面之一,计数是 0,1,2,…0, 1, 2, \dots。对于这样的变量,账本就是一张表,每个取值占一项。

定义 2.3 概率质量函数

离散随机变量 XX 的概率质量函数是 p(x)=P(X=x)p(x) = \Prob(X = x)。它满足:对每个 xx,p(x)≥0p(x) \ge 0,且 ∑xp(x)=1\sum_x p(x) = 1。

最简单的离散分布只有两个取值。Bernoulli(Bernoulli)随机变量以概率 θ\theta 取 1(“正面”“成功”),以概率 1−θ1 - \theta 取 0。两种情况可以写进一个公式:

p(x ∣ θ)=θx(1−θ)1−x,x∈{0,1},p(x \given \theta) = \theta^{x} (1 - \theta)^{1 - x}, \qquad x \in \{0, 1\},
(2.1)

当 x=1x = 1 时它给出 θ\theta,当 x=0x = 0 时给出 1−θ1 - \theta。p(x ∣ θ)p(x \given \theta) 中的竖线,把要陈述其概率的值与该概率所依赖的量分隔开。在信念解释下,这不只是表示参数的记号:未知的 θ\theta 也只是一个不确定的量,而 p(x ∣ θ)p(x \given \theta) 就是第 2.4 节意义上的条件概率。

本书中所有是或否的结果,都由 Bernoulli 分布描述。一次训练运行会不会发散?一个测试会不会失败?向一个人展示两个设计,他会不会更喜欢第一个?第四部分把每一次这样的比较都建模为一个 Bernoulli 变量,其 θ\theta 取决于第一个选项比第二个好多少(第 16 章)。

统计 nn 次抛掷中正面的次数,就得到一个二项(binomial)随机变量 KK。任何一个含有 kk 次正面、n−kn - k 次反面的具体抛掷序列,概率都是 θk(1−θ)n−k\theta^k (1 - \theta)^{n - k},因为各次抛掷互不影响,而互不影响的事件的概率相乘(第 2.7 节会严格表述这一事实)。这样的序列共有 (nk)\binom{n}{k} 个,每个对应一种选出哪 kk 次为正面的方式,且任意两个都不可能同时发生,因此由第三条公理,它们的概率相加:

p(k ∣ n,θ)=(nk)θk(1−θ)n−k,k=0,1,…,n.p(k \given n, \theta) = \binom{n}{k} \theta^k (1 - \theta)^{n - k}, \qquad k = 0, 1, \dots, n.
(2.2)

公平硬币抛十次,恰好五次正面的概率是 (105)/210=252/1024≈0.246\binom{10}{5} / 2^{10} = 252 / 1024 \approx 0.246。即使是公平硬币,正反各半的情形出现的概率也不到四分之一。

骰子有六个取值,各有其概率 p1,…,p6p_1, \dots, p_6,总和为一。这是类别分布(categorical distribution),它把 Bernoulli 分布推广到任意有限个结果。人从同时呈现的几个选项中挑出最喜欢的一个时,就会出现类别分布,这正是第 16.4 节中 Luce 选择模型所处理的情形。

2.3 连续分布 #

验证准确率和目标函数在某个输入处的值都是实数,一张表无法容纳。计数的取值至少还能列出,0,1,2,…0, 1, 2, \dots,每个取值对应一个概率;区间中的实数却无法一一列出,无论怎样给其中每个实数赋予正的概率,总和都不可能为一。事实上,对于连续的量,每个确切值的概率都是零:准确率恰好等于 0.9137000…0.9137000\dots 的概率是零。承载概率的是区间,例如准确率介于 0.91 与 0.92 之间。

2.3.1 密度 #

解决办法是记录单位长度上的概率,正如物理学记录单位长度上的质量。一根钢棒的密度是每厘米若干克;钢棒上任何单独的一点都没有质量,但每一段都有,一段的质量等于密度在该段上的积分。概率密度(probability density)的道理与此相同。

定义 2.4 概率密度

连续随机变量 XX 具有密度 p(x)p(x),是指对每个区间都有

P(a≤X≤b)=∫abp(x) dx.\Prob(a \le X \le b) = \int_a^b p(x)\, \dd x.

密度满足 p(x)≥0p(x) \ge 0 且 ∫−∞∞p(x) dx=1\int_{-\infty}^{\infty} p(x)\, \dd x = 1。

对于 xx 附近宽度为 Δ\Delta 的短区间,积分近似等于高度乘以宽度,因此 P(x≤X≤x+Δ)≈p(x) Δ\Prob(x \le X \le x + \Delta) \approx p(x)\, \Delta。密度就是小区间的概率除以区间的宽度。

易错点密度不是概率

密度可以大于一。区间 [0,0.1][0, 0.1] 上的均匀分布在该区间内的密度是 1010,因为总量为一个单位的概率被压缩在长度为 0.10.1 的区间里。密度还带有单位,即 xx 的单位的倒数。两点处密度的比值有意义(它比较的是这两点附近小区间的概率),密度曲线下的面积也有意义,但单个密度值并不是任何事件的概率。这一点在后文中很重要:在观测数据处算得的对数密度是一个很大的正数时,并不意味着出了错。

2.3.2 累积分布函数 #

描述任何随机变量(无论离散还是连续)的第二种方式,是它的累积分布函数(cumulative distribution function,CDF),

F(x)=P(X≤x).F(x) = \Prob(X \le x).

累积分布函数从最左端的 0 上升到最右端的 1,从不减小。区间的概率是两个累积分布函数值之差,P(a<X≤b)=F(b)−F(a)\Prob(a < X \le b) = F(b) - F(a);对于连续变量,密度是累积分布函数的斜率,p(x)=F′(x)p(x) = F'(x)。标准正态分布的累积分布函数记作 Φ\Phi,在第 4.1 节中引入,并贯穿全书:改进概率与期望改进中有它(第 12.2 节、第 12.3 节),描述人如何做比较的模型中也有它(第 16.3 节)。

2.3.3 两个例子 #

[a,b][a, b] 上的均匀分布(uniform distribution)在 aa 与 bb 之间具有恒定的密度 1/(b−a)1 / (b - a),在其他地方为零。它表达的是“范围内的每个值都同样可信”,随机搜索和许多初始设计正是按这种方式选择输入(第 11.4 节)。

指数分布(exponential distribution)描述以恒定速率 λ\lambda 发生的事件需要等待多久,例如在故障随机出现时,一个长时间运行的任务何时发生下一次故障。对 x≥0x \ge 0,它的密度与累积分布函数是

p(x)=λe−λx,F(x)=1−e−λx.p(x) = \lambda e^{-\lambda x}, \qquad F(x) = 1 - e^{-\lambda x}.

若平均每天发生一次故障,则 λ=1\lambda = 1(每天),下一次故障发生在从现在起一到两天之间的概率是 F(2)−F(1)=e−1−e−2≈0.233F(2) - F(1) = e^{-1} - e^{-2} \approx 0.233。把密度从 1 积分到 2,也得到同一个数。

2.4 联合、边际与条件 #

到目前为止,每个分布都只描述一个量。贝叶斯优化则同时涉及多个量:目标函数在两个相邻输入处的值,人的回答及其背后的偏好,测试结果与代码是否有缺陷。建模的意义在于,了解其中一个量,便能对另一个量有所认识。这需要一个同时覆盖多个量的分布。

2.4.1 一张联合概率表 #

以软件工程师熟悉的情形为例。一个提交要么有缺陷(broken),要么正常(fine);在它上面运行的持续集成测试要么失败(fail),要么通过(pass)。假设团队的历史记录表明:10% 的提交有缺陷;有缺陷的提交中,测试失败的占 90%;由于测试不稳定和超时,正常的提交中也有 5% 测试失败。换成计数:1,000 个提交中,100 个有缺陷,其中 90 个测试失败;900 个正常,其中 45 个同样失败。

把这些计数除以 1,000,就得到关于下一个提交的信念,分配在四种组合上。这就是两个变量的联合分布(joint distribution)。它的表格连同写在表边的各行之和与各列之和,包含了关于这两个变量的全部信息。

表 2.1 提交的状态与测试结果的联合概率,附各行与各列之和。
失败 通过 合计
有缺陷 0.090 0.010 0.100
正常 0.045 0.855 0.900
合计 0.135 0.865 1

从这张表中可以读出三个不同问题的答案,每个问题对应一种运算。

2.4.2 加法规则:边际化 #

不论测试结果如何,下一个提交有缺陷的概率是多少?将“有缺陷”这一行相加:0.090+0.010=0.1000.090 + 0.010 = 0.100。不论提交状态如何,测试失败的概率是多少?将“失败”这一列相加:0.090+0.045=0.1350.090 + 0.045 = 0.135。写在表边的每个合计,都是单个变量的分布,因此称为边际分布(marginal distribution)。对不再需要追踪的变量求和,就是把它边际化(marginalize out)掉。这并没有丢弃该变量上的信念,而是将其汇总。

2.4.3 条件化 #

现在假设测试失败了。哪些提交仍有可能?只有“失败”这一列中的那些,“通过”这一列已被排除。“失败”列中的信念总和只有 0.1350.135,为使它重新成为合格的分布,将每一项都除以 0.1350.135:

P(broken ∣ fail)=0.0900.135≈0.667,P(fine ∣ fail)=0.0450.135≈0.333.\Prob(\text{broken} \given \text{fail}) = \frac{0.090}{0.135} \approx 0.667, \qquad \Prob(\text{fine} \given \text{fail}) = \frac{0.045}{0.135} \approx 0.333.

这就是条件化(conditioning):划去观测所排除的部分,再把剩余部分重新缩放,使总和为一。一次测试失败,使提交有缺陷的概率从 10% 升至约 67%。本书中每一次从数据中学习,从高斯过程吸收一次评估,到偏好模型吸收一个回答,都是在一张更大的表上执行这一运算。

2.4.4 乘法规则 #

写成公式,条件化就是用联合概率除以边际概率:p(y ∣ x)=p(x,y)/p(x)p(y \given x) = p(x, y) / p(x)。两边同乘以 p(x)p(x),再反过来解读结果,它说明的是如何构建联合分布:先以概率 p(x)p(x) 选定 xx,再以已知 xx 时适用的概率选定 yy。表 2.1 正是这样构建的:“有缺陷且失败”这一项是 P(broken)×P(fail ∣ broken)=0.1×0.9=0.09\Prob(\text{broken}) \times \Prob(\text{fail} \given \text{broken}) = 0.1 \times 0.9 = 0.09。连同加法规则,本章开头所说的两条规则就都已得到。

定义 2.5 加法规则与乘法规则

对随机变量 XX 与 YY,

p(x)=∑yp(x,y)(sum rule),p(x) = \sum_y p(x, y) \qquad \text{(sum rule)},
(2.3)
p(x,y)=p(y ∣ x) p(x)=p(x ∣ y) p(y)(product rule).p(x, y) = p(y \given x)\, p(x) = p(x \given y)\, p(y) \qquad \text{(product rule)}.
(2.4)

只要 p(x)>0p(x) > 0,条件分布(conditional distribution)p(y ∣ x)=p(x,y)/p(x)p(y \given x) = p(x, y) / p(x) 就有定义。对于连续变量,求和换成积分,概率换成密度。

反复应用乘法规则,每次分离出一个变量,即可推广到任意多个变量:

p(x1,x2,x3)=p(x1) p(x2 ∣ x1) p(x3 ∣ x1,x2).p(x_1, x_2, x_3) = p(x_1)\, p(x_2 \given x_1)\, p(x_3 \given x_1, x_2).

本书中每个模型都具有这条链式法则(chain rule)的结构:先是未知量上的分布,再是给定未知量时数据的分布。

将两条规则结合起来,得到一个使用极为频繁、因而有专门名称的公式。先用加法规则求 yy 的边际,再用乘法规则展开每个联合项:

p(y)=∑xp(y ∣ x) p(x).p(y) = \sum_x p(y \given x)\, p(x).
(2.5)

这就是全概率公式(law of total probability)。用文字表述:一个观测的概率,等于它在每种可能性下的概率,以各可能性自身的概率为权重求得的平均。就这个测试而言,P(fail)=0.9×0.1+0.05×0.9=0.135\Prob(\text{fail}) = 0.9 \times 0.1 + 0.05 \times 0.9 = 0.135,正是表 2.1 中的列合计。这一公式还将作为贝叶斯定理的分母再次出现。

2.4.5 把规则画出来 #

图 2.1 把同一个联合分布画成面积。单位正方形被切成两列,宽度分别是有缺陷与正常的概率;每一列在一定高度处横切,该高度是这类提交测试失败的概率。宽乘高即面积,因此每个区域的面积都是一个联合概率:这就是画出来的乘法规则。

有缺陷 10%正常 90%失败 90%通过 10%失败 5%通过 95%宽 = P(提交) · 高 = P(测试 | 提交)面积 = P(提交, 测试)联合概率及其行列之和失败通过合计有缺陷0.0900.0100.100正常0.0450.8550.900合计0.1350.8651运行任何测试之前:P(有缺陷) = 0.100有缺陷 10%正常 90%
有缺陷 10%正常 90%失败 90%通过 10%失败 5%通过 95%宽 = P(提交) · 高 = P(测试 | 提交)面积 = P(提交, 测试)联合概率及其行列之和失败通过合计有缺陷0.0900.0100.100正常0.0450.8550.900合计0.1350.8651运行任何测试之前:P(有缺陷) = 0.100有缺陷 10%正常 90%
图 2.1 把两个是或否的量的联合分布画成面积。列宽是提交有缺陷或正常的概率;每一列中,实色区域是给定该状态时测试失败的概率,浅色区域是测试通过的概率。每个区域的面积是一个联合概率,表中列出了这些概率及各行、各列之和。选择以什么为条件,或点击某个区域,图中便只保留与之相符的区域,并重新缩放使总和为一。这些比率仅为示意。

可以尝试以下操作:

  • 先以失败为条件,再以有缺陷为条件。前者给出 P(broken ∣ fail)≈0.667\Prob(\text{broken} \given \text{fail}) \approx 0.667,后者给出 P(fail ∣ broken)=0.9\Prob(\text{fail} \given \text{broken}) = 0.9。这是两个不同的数,回答的是不同的问题:前者保留两列中的失败区域,后者保留有缺陷这一列。将两者混为一谈,正是第 2.5 节要防范的错误。
  • 以通过为条件。一次测试通过,使提交有缺陷的概率从 0.1 降至约 0.012,但不会降到零,因为有缺陷的提交中有 10% 能通过测试。
  • 把 P(fail ∣ fine)\Prob(\text{fail} \given \text{fine}) 设为零。没有误报时,每次失败都来自有缺陷的提交,以失败为条件便得到确定的结论。
  • 把 P(broken)\Prob(\text{broken}) 降到 0.01。有缺陷这一列缩成极窄的一条,它在失败区域中所占的份额也随之缩小。这会如何改变一次失败的含义,见第 2.5 节的解释。

2.4.6 密度也遵循同样的规则 #

将求和换成积分,以上内容对连续的量同样成立。两个实数上的联合密度 p(x,y)p(x, y) 有边际 p(x)=∫p(x,y) dyp(x) = \int p(x, y)\, \dd y 和条件 p(y ∣ x)=p(x,y)/p(x)p(y \given x) = p(x, y) / p(x)。这里有一处微妙之处:以确切值 X=xX = x 为条件,就是以一个概率为零的事件为条件,而针对事件定义的条件概率无法处理这种情形。密度形式则能自然地处理:沿直线 X=xX = x 截取联合密度,得到一个一维切片,再将切片重新缩放,使其积分为一。高斯分布以观测值为条件,恰好就是这种切片(第 4.5 节),高斯过程回归也是如此(第 8.1 节)。

2.5 贝叶斯定理 #

在测试的例子中,已有的知识自然地朝一个方向延伸:测试在有缺陷与正常的提交上表现如何,即 P(fail ∣ broken)\Prob(\text{fail} \given \text{broken}),是已知的,因为可以故意破坏代码来测量。需要回答的问题却朝向另一个方向:测试失败了,这个提交有缺陷的可能性有多大?贝叶斯定理把一个条件概率转化为另一个。

推导贝叶斯定理
  1. 按一种方式写出乘法规则(式(2.4)),p(x,y)=p(y ∣ x) p(x)p(x, y) = p(y \given x)\, p(x)。
  2. 按另一种方式写出同一条规则,p(x,y)=p(x ∣ y) p(y)p(x, y) = p(x \given y)\, p(y)。
  3. 两式右边都等于 p(x,y)p(x, y),所以 p(x ∣ y) p(y)=p(y ∣ x) p(x)p(x \given y)\, p(y) = p(y \given x)\, p(x)。
  4. 两边同除以 p(y)p(y)(只要 p(y)>0p(y) > 0 即可):p(x ∣ y)=p(y ∣ x) p(x)/p(y)p(x \given y) = p(y \given x)\, p(x) / p(y)。
  5. 用全概率公式(式(2.5))展开分母,并把求和变量改记为 x′x',以免与分子中的 xx 混淆:p(y)=∑x′p(y ∣ x′) p(x′)p(y) = \sum_{x'} p(y \given x')\, p(x')。

所得结果即贝叶斯定理。当作为条件的变量是数据 D\D,另一个变量是未知量 θ\theta(例如硬币的偏差、提交是否有缺陷,或后文中的整个函数)时,式中各部分都有专门的名称:

p(θ ∣ D)⏟posterior=p(D ∣ θ)⏞likelihood  p(θ)⏞priorp(D)⏟evidence,p(D)=∑θp(D ∣ θ) p(θ).\underbrace{p(\theta \given \D)}_{\text{posterior}} = \frac{\overbrace{p(\D \given \theta)}^{\text{likelihood}}\; \overbrace{p(\theta)}^{\text{prior}}} {\underbrace{p(\D)}_{\text{evidence}}}, \qquad p(\D) = \sum_{\theta} p(\D \given \theta)\, p(\theta).
(2.6)
  • 先验(prior)p(θ)p(\theta) 是看到数据之前关于 θ\theta 的信念。
  • 似然(likelihood)p(D ∣ θ)p(\D \given \theta) 表示:若 θ\theta 为真,观测到的数据出现的概率有多大。它应理解为数据固定时 θ\theta 的函数,而不是 θ\theta 上的分布:其取值之和不一定为一。
  • 后验(posterior)p(θ ∣ D)p(\theta \given \D) 是修正后的信念。
  • 模型证据(evidence)p(D)p(\D),也称边际似然(marginal likelihood),是模型在看到数据之前赋予这些数据的概率。它与 θ\theta 无关;在一次更新中,它只负责重新缩放。

由于模型证据对每个 θ\theta 都相同,贝叶斯定理常写成正比形式:

p(θ ∣ D)∝p(D ∣ θ) p(θ).p(\theta \given \D) \propto p(\D \given \theta)\, p(\theta).
(2.7)

符号 ∝\propto 的意思是“除去一个与 θ\theta 无关的因子之外相等”。具体操作是:把先验与似然逐项相乘,再重新缩放,使结果的总和为一;缩放因子是模型证据的倒数。第 5.1 节将进一步展开这套术语,模型证据也会再次出现,成为选择模型自身设置的工具(第 5.6 节、第 9.3 节)。

要点后验是先验乘以似然,再重新缩放

从数据中学习的方法是:将原有的信念,乘以每种可能性对所见结果的预测程度,再重新缩放,使总和回到一。缩放的幅度,就是原先赋予所见结果的概率。

2.5.1 当先验很小时 #

下面的例子应用贝叶斯定理所得的结果,大多数人初次见到时都会感到意外。

例 2.2 很少出问题的代码库上的一次测试失败

假设只有 1% 的提交有缺陷,测试的各项比率不变:有缺陷的提交中 90% 测试失败,正常的提交中 5% 测试失败。现有一个提交未通过测试。由式(2.6),

P(broken ∣ fail)=0.9×0.010.9×0.01+0.05×0.99=0.0090.0585≈0.154.\Prob(\text{broken} \given \text{fail}) = \frac{0.9 \times 0.01}{0.9 \times 0.01 + 0.05 \times 0.99} = \frac{0.009}{0.0585} \approx 0.154.

一次失败出自有缺陷提交的可能性,是出自正常提交的十八倍,但这个提交有缺陷的概率仍然只有约 15%。通过计数可以看清原因:10,000 个提交中,100 个有缺陷,其中 90 个失败;9,900 个正常,其中 495 个失败。在 585 次失败中,只有 90 次来自有缺陷的提交。正常的提交多得多,以至于其中少见的误报,数量反而超过了真正的警报。

有缺陷 1%正常 99%失败 90%通过 10%失败 5%通过 95%宽 = P(提交) · 高 = P(测试 | 提交)面积 = P(提交, 测试)联合概率及其行列之和失败通过合计有缺陷0.00900.00100.0100正常0.04950.94050.9900合计0.05850.94151只保留测试失败的运行:P(有缺陷 | 失败) = 0.0090 / 0.0585 = 0.154有缺陷 15.4%正常 84.6%
有缺陷 1%正常 99%失败 90%通过 10%失败 5%通过 95%宽 = P(提交) · 高 = P(测试 | 提交)面积 = P(提交, 测试)联合概率及其行列之和失败通过合计有缺陷0.00900.00100.0100正常0.04950.94050.9900合计0.05850.94151只保留测试失败的运行:P(有缺陷 | 失败) = 0.0090 / 0.0585 = 0.154有缺陷 15.4%正常 84.6%
图 2.2 例 2.2 的情境:有缺陷的提交很少(1%),图以测试失败为条件。有缺陷这一列只是极窄的一条,因此它的失败区域与正常列的失败区域相比很小,尽管后者只占所在列的 5%。拖动滑块,观察答案如何依赖于每个比率;这些比率仅为示意。

人们凭直觉推理时,在这类问题上往往给先验的权重过小,这种现象称为基础比率忽视(base-rate neglect)(Kahneman 与 Tversky,1973;Bar-Hillel,1980)。如果把数字表述为总体中的计数(如例 2.2 最后一段所示),而不是概率,同样的问题会更常得到正确解答(Gigerenzer 与 Hoffrage,1995)。按式(2.6)计算的程序没有这种困难,这也是应当把这条规则写下来、而不是依赖直觉的一个理由。

同样的算术也适用于优化。如果好的配置很少,而单次评估带有噪声,那么一个配置胜过基线一次,单凭这一证据,它并不太可能是好的:为数众多的平庸配置中碰巧走运的那些,数量可能超过少数好配置的真实结果。同时追踪先验与噪声的模型会自动考虑到这一点。

2.5.2 逐次抛掷,更新信念 #

测试的例子有两种可能性和一次观测。优化则需要针对一个可取许多值的未知量收集许多次观测。具有这种结构的最小问题,是一枚偏差未知的硬币,也就是 Bayes 本人研究过的问题。

设 θ\theta 为硬币正面朝上的概率。为使账目一目了然,只允许它取十一个值,θ∈{0,0.1,0.2,…,1}\theta \in \{0, 0.1, 0.2, \dots, 1\}。关于 θ\theta 的信念是一张含有十一个概率的表;没有理由偏向任何一个值,因此先验在每个值上都放 1/111/11。

抛一次硬币,得到正面(H)。由式(2.1),在假设 θ\theta 下,正面的似然就是 θ\theta 本身。由式(2.7),后验正比于 θ×1/11\theta \times 1/11,重新缩放即除以全部十一个乘积之和:

p(θ ∣ H)=θ/11∑θ′θ′/11=θ5.5.p(\theta \given \text{H}) = \frac{\theta / 11}{\sum_{\theta'} \theta' / 11} = \frac{\theta}{5.5}.

于是,假设 θ=0\theta = 0,即永远不会正面朝上的硬币,现在的概率为零:一次正面就将其彻底排除。假设 θ=1\theta = 1 的概率从 1/11≈0.0911/11 \approx 0.091 上升到 1/5.5≈0.1821/5.5 \approx 0.182。模型证据,即重新缩放之前的和,是 ∑θ(θ/11)=0.5\sum_{\theta} (\theta / 11) = 0.5:抛掷之前,模型赋予正面的概率是二分之一,这对平坦先验而言理应如此。

下一次抛掷沿用同一条规则,以当前的后验作为下一步的先验。如果得到反面,似然是 1−θ1 - \theta,新的信念正比于 θ(1−θ)\theta (1 - \theta)。无论顺序如何,得到 hh 次正面和 tt 次反面之后,信念都是

p(θ ∣ flips)∝θh(1−θ)t p(θ).p(\theta \given \text{flips}) \propto \theta^h (1 - \theta)^t\, p(\theta).
(2.8)
推导逐次更新等于一次性更新

把数据记为两次抛掷 x1,x2x_1, x_2,并假设一旦已知 θ\theta,各次抛掷就相互独立(第 2.7 节),于是 p(x1,x2 ∣ θ)=p(x1 ∣ θ) p(x2 ∣ θ)p(x_1, x_2 \given \theta) = p(x_1 \given \theta)\, p(x_2 \given \theta)。

  1. 对两次抛掷一次性应用贝叶斯定理式(2.7),得到 p(θ ∣ x1,x2)∝p(x1,x2 ∣ θ) p(θ)p(\theta \given x_1, x_2) \propto p(x_1, x_2 \given \theta)\, p(\theta)。
  2. 由独立性假设,这等于 p(x2 ∣ θ) p(x1 ∣ θ) p(θ)p(x_2 \given \theta)\, p(x_1 \given \theta)\, p(\theta)。
  3. 单独对第一次抛掷应用式(2.7),有 p(x1 ∣ θ) p(θ)∝p(θ ∣ x1)p(x_1 \given \theta)\, p(\theta) \propto p(\theta \given x_1)。
  4. 所以 p(θ ∣ x1,x2)∝p(x2 ∣ θ) p(θ ∣ x1)p(\theta \given x_1, x_2) \propto p(x_2 \given \theta)\, p(\theta \given x_1):这正是对第二次抛掷应用贝叶斯定理,并以第一次抛掷后的后验为先验。
  5. 乘法与顺序无关,因此无论先处理哪一次抛掷,结果都相同。对 nn 次抛掷重复这一论证,即得式(2.8)。

在图 2.3 中,可以亲手运行这些更新。每次抛掷都画成式(2.7)的一次应用:抛掷前的信念,乘以这次抛掷的似然,再重新缩放。

抛掷HHTH4 次 · 3 次 H,1 次 T最近一次抛掷之前00.150.300.51H(正面)的似然:θ00.5100.51之后:当前信念00.150.300.51×∝÷0.596偏差 θ偏差 θ偏差 θ下一次为 H 的概率 = 0.661θ 大于 0.5 的概率 = 0.742重新缩放之前的乘积最近一次抛掷(H)此前被预测的概率为 0.596;除以 0.596,乘积的总和就重新缩放为一。
HHTH4 次 · 3 次 H,1 次 T最近一次抛掷之前00.150.300.51H(正面)的似然:θ00.5100.51之后:当前信念 (乘积 ÷ 0.596)00.150.300.51×∝偏差 θ下一次为 H 的概率 = 0.661θ 大于 0.5 的概率 = 0.742重新缩放之前的乘积最近一次(H)的预测概率为 0.596:即归一化因子。
图 2.3 在由硬币偏差的十一个假设构成的网格上应用贝叶斯定理。第一个面板显示最近一次抛掷之前的信念,第二个显示这次抛掷在每个假设下的似然,第三个显示二者的乘积(虚线轮廓),并重新缩放使总和为一。可以自行指定每次抛掷的结果,也可以抛神秘硬币:它的偏差是 0.1、0.2、0.3、0.4、0.6、0.7、0.8、0.9 之一,揭晓之前一直隐藏。读数给出下一次抛掷为正面的概率,以及偏差大于二分之一的概率。四种先验仅为示意。

可以尝试以下操作:

  • 重新开始,连续指定三次正面。按换一枚硬币清除已有的抛掷。θ=0\theta = 0 处的柱子在第一次正面之后即消失,此后不再出现。数据一旦排除某个假设,它就再也无法恢复,因为零乘以任何数都是零。
  • 留意归一化因子。每次抛掷之前,读数给出下一次抛掷为正面的概率,∑θθ p(θ ∣ flips)\sum_\theta \theta\, p(\theta \given \text{flips})。指定这次抛掷的结果后,下方一行会报告同一个数(若为反面,则是一减去它),作为乘积重新缩放的幅度。模型证据就是模型此前赋予实际发生之事的概率。出人意料的抛掷,即模型证据小的那一次,会使信念移动得最多。
  • 更换先验,保留抛掷。选择多半公平时,几次正面几乎不能使信念离开 0.5;选择也许是作弊硬币时,正反两面各出现几次,就会迅速排除两个作弊假设。选择确信公平时,信念不会发生任何变化:在其他每个值上都为零的先验,无论多少数据都无法推翻。先验应当为数据可能需要揭示的一切都保留一些概率。
  • 与神秘硬币较量。按换一枚硬币,把神秘硬币抛十次,猜测它的偏差,然后揭晓。继续抛掷:信念会向真实值附近集中,但速度很慢。要较有把握地区分偏差 0.6 与 0.5,大约需要一百次抛掷;正面比例的标准差(第 2.6.2 节)只按 1/n1/\sqrt{n} 的速度缩小,原因见第 2.7 节。

这枚硬币与本书的主题并不像看上去那样遥远。把抛掷换成询问一个人设计 A 是否比设计 B 好,把 θ\theta 换成他回答“是”的概率。每个回答都是一次 Bernoulli 观测,更新同样是先相乘、再重新缩放。第四部分正是这样做的,只是用一个未知的效用函数代替了单个数 θ\theta(第 18 章)。在第 5.2 节中,十一个假设变为 [0,1][0, 1] 中的连续取值,表格变为密度;更新方式不变,只是求和换成积分。

2.5.3 动手计算 #

假设网格是贝叶斯定理最直接的实现。以下两个实际问题既适用于它,也适用于后文的所有方法。

第一,许多概率的乘积会下溢。几百次观测之后,像 θh(1−θ)t\theta^h (1 - \theta)^t 这样的似然会小于最小的正浮点数,被舍入为零。因此,实现中都使用对数:乘积的对数是对数之和,重新缩放这一步使用 log-sum-exp 函数 log⁡∑ieai\log \sum_i e^{a_i},通过提出最大的 aia_i 实现稳定计算。

代码实现 NumPy
import numpy as np
from scipy.special import logsumexp

theta = np.linspace(0, 1, 11)         # 十一个假设
log_prior = np.full(11, -np.log(11))  # 平坦先验

def update(log_belief, flip):
    with np.errstate(divide="ignore"):  # 允许 log(0) = -inf
        log_lik = np.log(theta if flip == "H" else 1 - theta)
    log_post = log_belief + log_lik     # 先验乘以似然
    return log_post - logsumexp(log_post)  # 除以模型证据

b = log_prior
for f in "HHTH":
    b = update(b, f)
print(np.round(np.exp(b), 3))
# [0.    0.002 0.013 0.038 0.078 0.127 0.176 0.209 0.208 0.148 0.   ]

第二,网格无法扩展。一个取十一个值的未知量需要十一个数;dd 个未知量需要 11d11^d 个。六个超参数各有十一个候选值时,关于最佳设置所在位置的信念就已需要 116≈1.8×10611^6 \approx 1.8 \times 10^6 个条目,十个超参数则需要约 260 亿个。贝叶斯优化器的目标函数是一个未知函数,在每个输入处都有一个值,因此任何网格都无法容纳关于它的信念。出路是选用更新具有闭式解的分布,使整张表可以用少数几个数概括,而贝叶斯定理以可预测的方式改变这些数。第 4 章的高斯分布是最核心的例子,没有闭式解时的近似方法则在第 17 章中讨论。

第 2.5 节引用的文献 3
  1. Kahneman 与 Tversky(1973)On the Psychology of Prediction
  2. Bar-Hillel(1980)The Base-Rate Fallacy in Probability Judgments
  3. Gigerenzer 与 Hoffrage(1995)How to Improve Bayesian Reasoning Without Instruction: Frequency Formats

2.6 期望与方差 #

一个分布是一整张表或一整条曲线,而决策通常只需从中提取几个数:应当预期什么值?有多大把握?第三部分中的每个采集函数都是这类概括;例如,期望改进在字面上就是一个期望(第 12.3 节)。

2.6.1 期望 #

定义 2.6 期望

随机变量 XX 的期望,又称均值,是其各个取值以各自概率为权重的平均:

E[X]=∑xx p(x)(discrete),E[X]=∫x p(x) dx(continuous).\E[X] = \sum_x x\, p(x) \quad \text{(discrete)}, \qquad \E[X] = \int x\, p(x)\, \dd x \quad \text{(continuous)}.

期望是信念的质心:如果把概率看作沿一把尺子放置的砝码,尺子会在 E[X]\E[X] 处平衡。公平骰子的期望是 (1+2+⋯+6)/6=3.5(1 + 2 + \dots + 6)/6 = 3.5,骰子不可能掷出这个值;期望不一定是可能出现的结果。Bernoulli 变量的期望是 1⋅θ+0⋅(1−θ)=θ1 \cdot \theta + 0 \cdot (1 - \theta) = \theta。在图 2.3 中,下一次抛掷为正面的概率,就是 θ\theta 在当前信念下的期望。

常常需要的是由 XX 算出的某个量的期望,而不是 XX 本身的期望。这时不必先求出该量的分布,直接对其取值加权即可:

E[g(X)]=∑xg(x) p(x).\E[g(X)] = \sum_x g(x)\, p(x).
(2.9)

在贝叶斯优化中,XX 是目标函数在某个候选输入处的未知值,gg 可以是相对于目前最优值的改进,max⁡(X−b,0)\max(X - b, 0)。它在模型信念下的期望就是期望改进。

期望最有用的性质,是可以穿过求和与常数倍。对任意随机变量 XX、YY 与常数 aa、bb、cc,

E[aX+bY+c]=a E[X]+b E[Y]+c.\E[aX + bY + c] = a\,\E[X] + b\,\E[Y] + c.
(2.10)

无论 XX 与 YY 是否相关,这种线性性(linearity)都成立,因此其用途远不限于互不相关的量之和。式(2.2)的二项计数是 nn 个 Bernoulli 变量之和,每次抛掷对应一个,所以它的期望是 nθn\theta,无须用到任何二项式系数。

易错点函数的期望不是期望的函数

线性性只对求和与常数倍成立。对于其他函数,E[g(X)]\E[g(X)] 与 g(E[X])g(\E[X]) 一般不相等。期望改进说明了这一差别为何重要。假设模型在某个输入处对目标函数的信念,均值恰好等于目前找到的最优值 bb。那么均值的改进是 max⁡(E[X]−b,0)=0\max(\E[X] - b, 0) = 0,但期望改进 E[max⁡(X−b,0)]\E[\max(X - b, 0)] 为正,因为信念给高于 bb 的值赋予了权重,而这个函数忽略低于它的值。对于标准差为 ss 的高斯信念(第 4 章),期望改进约为 0.4 s0.4\,s(第 12.3 节)。这一差距就是不确定性的价值,也正是它驱使优化器去探索。

2.6.2 方差 #

期望说明信念的中心在哪里,方差则说明信念分散得有多宽。

定义 2.7 方差与标准差

设 XX 的均值为 μ=E[X]\mu = \E[X],其方差定义为到均值的距离平方的期望,

Var⁡[X]=E[(X−μ)2]=E[X2]−μ2.\Var[X] = \E\big[(X - \mu)^2\big] = \E[X^2] - \mu^2.
(2.11)

标准差是 Var⁡[X]\sqrt{\Var[X]},它与 XX 的单位相同。

式(2.11)的第二种形式由线性性推出:把平方展开,E[X2−2μX+μ2]=E[X2]−2μ E[X]+μ2=E[X2]−μ2\E[X^2 - 2\mu X + \mu^2] = \E[X^2] - 2\mu\,\E[X] + \mu^2 = \E[X^2] - \mu^2。Bernoulli 变量有 E[X2]=θ\E[X^2] = \theta(因为当 XX 为 0 或 1 时 X2=XX^2 = X),所以它的方差是 θ−θ2=θ(1−θ)\theta - \theta^2 = \theta(1 - \theta),公平硬币的方差最大,总是同一面朝上的硬币方差为零。平移一个变量不改变其分散程度,缩放则会按比例缩放分散程度:Var⁡[aX+c]=a2Var⁡[X]\Var[aX + c] = a^2 \Var[X]。

2.6.3 协方差 #

对于两个随机变量,可以考察它们是否一同变化。协方差(covariance)

Cov⁡[X,Y]=E[(X−E[X])(Y−E[Y])]\Cov[X, Y] = \E\big[(X - \E[X])(Y - \E[Y])\big]

在 YY 高于其均值时 XX 也倾向于高于其均值的情形下为正,在两者反向变化时为负,在不存在这种线性趋势时为零。除以两个标准差,就得到相关系数(correlation),它介于 −1-1 与 11 之间,且与单位无关。

和的方差之所以不同于方差之和,正是由于协方差:

Var⁡[X+Y]=Var⁡[X]+Var⁡[Y]+2 Cov⁡[X,Y].\Var[X + Y] = \Var[X] + \Var[Y] + 2\,\Cov[X, Y].
(2.12)

(把期望中的平方展开,再应用线性性即可。)变量很多时,所有变量对之间的协方差构成一张表,即协方差矩阵(covariance matrix),它是接下来三章的核心对象。哪些表可以充当协方差矩阵,由第 3.3 节解释;高斯过程的核函数则是填写这张表的规则:k(x,x′)k(x, x') 是目标函数在 xx 与 x′x' 处的值之间的协方差(第 7.3 节)。两个相邻输入的协方差很大,因此观测其中一个,会改变关于另一个的信念。

2.6.4 对不知道的东西取平均 #

乘法规则使我们能够由边际分布和条件分布构建联合分布。期望与方差也可以按同样的方式分两个阶段构建。按照全期望公式(law of total expectation),总体均值是各条件均值的平均:

E[X]=E[E[X ∣ Y]].\E[X] = \E\big[\E[X \given Y]\big].
(2.13)

这里 E[X ∣ Y]\E[X \given Y] 是 XX 在条件分布 p(x ∣ y)p(x \given y) 下的均值,是一个依赖于 yy 的数;外层的期望再对 YY 取平均。(对于离散变量,先用乘法规则、再用加法规则,得到 ∑yp(y)∑xx p(x ∣ y)=∑xx∑yp(x,y)=∑xx p(x)\sum_y p(y) \sum_x x\, p(x \given y) = \sum_x x \sum_y p(x, y) = \sum_x x\, p(x)。)

方差的版本更值得关注,因为它把不确定性分为两类。考虑对目标函数的一次带噪声的评估。即使确切知道目标函数的值,评估结果仍有一部分分散会保留下来,这就是噪声;其余部分则源于不知道这个值。按照全方差公式,这两部分相加。

推导全方差公式

把条件均值记作 m(Y)=E[X ∣ Y]m(Y) = \E[X \given Y]。

  1. 由式(2.11),Var⁡[X]=E[X2]−(E[X])2\Var[X] = \E[X^2] - (\E[X])^2。
  2. 对 X2X^2 应用式(2.13),E[X2]=E[E[X2 ∣ Y]]\E[X^2] = \E\big[\E[X^2 \given Y]\big]。
  3. 对条件分布应用式(2.11),E[X2 ∣ Y]=Var⁡[X ∣ Y]+m(Y)2\E[X^2 \given Y] = \Var[X \given Y] + m(Y)^2。
  4. 结合第 2、3 步,E[X2]=E[Var⁡[X ∣ Y]]+E[m(Y)2]\E[X^2] = \E\big[\Var[X \given Y]\big] + \E\big[m(Y)^2\big]。
  5. 由式(2.13),E[X]=E[m(Y)]\E[X] = \E[m(Y)],所以 (E[X])2=(E[m(Y)])2(\E[X])^2 = (\E[m(Y)])^2。
  6. 把第 4、5 步代入第 1 步。由式(2.11),E[m(Y)2]−(E[m(Y)])2\E\big[m(Y)^2\big] - (\E[m(Y)])^2 两项合起来正是 m(Y)m(Y) 的方差,于是得到下面的结果。
Var⁡[X]=E[Var⁡[X ∣ Y]]+Var⁡[E[X ∣ Y]].\Var[X] = \E\big[\Var[X \given Y]\big] + \Var\big[\E[X \given Y]\big].
(2.14)

现在将其用于那次带噪声的评估。令 YY 为目标函数在某个输入处的未知值 ff,令 XX 为该处下一次带噪声评估的结果,即 ff 加上方差为 σn2\sigma_n^2 的独立噪声。给定 ff,这次评估的均值为 ff,方差为 σn2\sigma_n^2。于是由式(2.14)得

Var⁡[evaluation]=σn2+Var⁡[f].\Var[\text{evaluation}] = \sigma_n^2 + \Var[f].

第一项是噪声:无论怎样建模都无法消除它,重复评估每次都会得到不同的数。第二项是模型自身关于 ff 的不确定性,评估可以减少它。这两者常分别称为偶然不确定性(aleatoric uncertainty,源于随机)与认知不确定性(epistemic uncertainty,源于知识的缺乏)。第 8.3 节还会遇到它们,表现为 ff 的后验方差与一次新测量的方差之差。采集函数针对的是第二类:为减少噪声而探索没有意义。

2.6.5 用采样求期望 #

当期望中的求和或积分没有闭式解时,标准的补救办法是从 p(x)p(x) 中抽取样本 x(1),…,x(S)x^{(1)}, \dots, x^{(S)} 再取平均:E[g(X)]≈1S∑sg(x(s))\E[g(X)] \approx \frac{1}{S} \sum_{s} g(x^{(s)})。这种蒙特卡洛(Monte Carlo)估计在平均意义上是正确的(无偏),其标准差按 1/S1/\sqrt{S} 缩小,原因见第 2.7 节。BoTorch 等软件库正是这样计算许多采集函数的,即对模型后验的样本取平均(Balandat 等,2020)。

第 2.6 节引用的文献 1
  1. Balandat 等人(2020)BoTorch: A Framework for Efficient Monte-Carlo Bayesian Optimization

2.7 独立性 #

本章有好几步都默认了观测之间互不影响:二项公式、硬币的逐次更新、蒙特卡洛样本的平均。本节明确陈述这一假设,说明它在何处不成立,并解释贝叶斯优化为何通常把噪声建模为独立的。

定义 2.8 独立性

如果对所有 xx 与 yy 都有 p(x,y)=p(x) p(y)p(x, y) = p(x)\, p(y),则称随机变量 XX 与 YY 相互独立。等价地,只要 p(x)>0p(x) > 0,就有 p(y ∣ x)=p(y)p(y \given x) = p(y):得知 XX 不会改变关于 YY 的信念。

在图 2.1 的马赛克图中,独立意味着两列在同一高度切开:测试在有缺陷和正常的提交上失败得同样频繁。把两个滑块都设为 0.5,再以失败为条件,提交有缺陷的概率仍停留在先验上,因为这个测试不携带任何信息。

独立变量的协方差为零,因此由式(2.12),独立变量之和的方差等于各自方差之和。反之则不成立。若 XX 以相同的概率取 −1-1、00 或 11,而 Y=X2Y = X^2,则协方差为零,但 YY 完全由 XX 决定。协方差只能检测线性关系。

2.7.1 条件独立 #

第 2.5.2 节的硬币中隐含着一个微妙之处,本书后续内容都依赖于它。一枚偏差未知的硬币,两次抛掷是否相互独立?在十一个值上的平坦先验下,第一次抛掷为正面的概率是 0.5。如果确实是正面,关于 θ\theta 的信念就会向正面偏移,第二次抛掷也为正面的概率变为

P(H2 ∣ H1)=∑θθ θ5.5=3.855.5=0.7.\Prob(\text{H}_2 \given \text{H}_1) = \sum_\theta \theta\, \frac{\theta}{5.5} = \frac{3.85}{5.5} = 0.7.

所以 P(H1,H2)=0.5×0.7=0.35\Prob(\text{H}_1, \text{H}_2) = 0.5 \times 0.7 = 0.35,而不是 0.5×0.5=0.250.5 \times 0.5 = 0.25。这些抛掷并不独立:每一次都携带关于偏差的信息,因而也携带关于下一次的信息。在图 2.3 中可以看到这一点,下一次抛掷为正面的概率随每次抛掷而变化。

然而,如果偏差已知,例如 θ=0.3\theta = 0.3,那么无论其他各次的结果如何,每次抛掷为正面的概率都是 0.3。在给定 θ\theta 的条件下,这些抛掷是独立的。

定义 2.9 条件独立

如果对所有满足 p(z)>0p(z) > 0 的 xx、yy 与 zz,都有 p(x,y ∣ z)=p(x ∣ z) p(y ∣ z)p(x, y \given z) = p(x \given z)\, p(y \given z),则称在给定 ZZ 的条件下,XX 与 YY 条件独立。

本书中每个模型都具有这样的结构。给定未知量时,各观测条件独立,似然因而成为一个容易写出的乘积。把未知量边际化掉之后,各观测由于共享这个未知量而相互依赖;正是这种依赖,使一次观测能够为预测另一次观测提供信息。高斯过程也是如此运作的,只是用整个函数代替了 θ\theta。

给定未知量时相互独立、且服从同一分布的观测,称为独立同分布(independent and identically distributed,i.i.d.)。它们的似然是相同因子的乘积,

p(D ∣ θ)=∏i=1np(xi ∣ θ),p(\D \given \theta) = \prod_{i=1}^n p(x_i \given \theta),
(2.15)

式(2.8)正是由此得来。

2.7.2 为什么把噪声建模为独立的 #

贝叶斯优化的标准观测模型(在第 8.3 节中引入)把每次评估写成目标函数加噪声,yi=f(xi)+εiy_i = f(x_i) + \varepsilon_i,其中各噪声项 εi\varepsilon_i 彼此独立,也独立于 ff。这样选择有三个理由。

第一,它在物理上往往是合理的。每次训练运行都抽取新的随机种子;穿戴外骨骼行走的人,每一步都是新的一步。一次评估中的噪声与下一次评估中的噪声之间,没有任何联系。外骨骼的例子还说明了方法可能需要承受多大的噪声。Ding 等人(2018)用贝叶斯优化调节软质外骨骼服所提供髋部助力的峰值时刻与结束时刻,以测得的行走者能量消耗为每组设置打分;他们指出,这一信号的信噪比很低,是实际应用中的核心挑战。平均用 21.4 ± 1.0 分钟找到的设置,与不穿设备行走相比,使代谢消耗降低了 17.4 ± 3.2%(均值 ± 标准误)。第 24 章将详细讨论这个问题。

第二是方便。似然变为乘积,如式(2.15)所示;在高斯噪声下,噪声的协方差矩阵是对角矩阵,使第 8.4 节的计算保持简单。

第三,平均之所以有效,依靠的正是独立性。如果 ε1,…,εn\varepsilon_1, \dots, \varepsilon_n 相互独立,方差都是 σ2\sigma^2,那么由式(2.12)(所有协方差都为零),它们之和的方差是 nσ2n\sigma^2,而它们的均值(和除以 nn)的方差是 nσ2/n2=σ2/nn\sigma^2 / n^2 = \sigma^2 / n。平均值的标准差按 1/n1/\sqrt{n} 下降:评估次数增至四倍,噪声减半。硬币的信念以这一速率集中,蒙特卡洛估计也以这一速率收敛。

易错点把相关的误差当作独立的

当误差有共同的来源时,把它们当作独立的会使模型过度自信。假设 nn 次评估除了方差为 σ2\sigma^2 的独立噪声之外,还共享一个方差为 σc2\sigma_c^2 的公共偏移 cc,例如一个校准有误的传感器,或一个在整个会话中都态度宽容的人。它们的均值的方差是 σc2+σ2/n\sigma_c^2 + \sigma^2 / n,而不是 σ2/n\sigma^2 / n:重复消除了独立的部分,共享的偏移却丝毫未变。假设独立性的模型,会把 nn 次相关的测量当作 nn 份独立的证据,从而变得比数据所能支持的更加确定。在同一批次中运行的评估,以及一个人在一次会话中会漂移、或会锚定于上一个问题的回答,都是常见的问题来源。会漂移的人类判断,本书将在第 32.3 节与第 29.10 节中再作讨论。

第 2.7 节引用的文献 1
  1. Ding 等人(2018)Human-in-the-Loop Optimization of Hip Assistance with a Soft Exosuit during Walking

2.8 习题 #

习题 2.1

沿用例 2.2 的设定:1% 的提交有缺陷,有缺陷的提交中 90% 测试失败,正常的提交中 5% 测试失败。一个提交测试失败,再运行一次测试,又失败了。假设在给定提交状态的条件下,两次运行条件独立,用两种方式计算 P(broken ∣ two failures)\Prob(\text{broken} \given \text{two failures}):一次性计算,以及逐次计算(以第一次的后验作为第二次的先验)。然后解释为什么对于不稳定的测试,这一假设可能不成立。

解答

一次性计算:有缺陷提交的似然是 0.92=0.810.9^2 = 0.81,正常提交的似然是 0.052=0.00250.05^2 = 0.0025,所以

P(broken ∣ two failures)=0.81×0.010.81×0.01+0.0025×0.99=0.00810.010575≈0.766.\Prob(\text{broken} \given \text{two failures}) = \frac{0.81 \times 0.01}{0.81 \times 0.01 + 0.0025 \times 0.99} = \frac{0.0081}{0.010575} \approx 0.766.

逐次计算:第一次失败给出 0.1540.154,与例 2.2 相同。以它作为第二次失败的先验,0.9×0.1540.9×0.154+0.05×0.846≈0.766\frac{0.9 \times 0.154}{0.9 \times 0.154 + 0.05 \times 0.846} \approx 0.766,在舍入误差范围内答案相同,这正是第 2.5.2 节中的推导所保证的。

如果导致测试在正常提交上失败的原因往往会持续存在,这一假设就不成立,例如测试依赖于一个缓慢的外部服务,或依赖于这次改动特有的某个时序问题。此时 P(second failure ∣ first failure,fine)\Prob(\text{second failure} \given \text{first failure}, \text{fine}) 远大于 0.05,第二次失败携带的信息少得多,真实的后验低于 0.766。

习题 2.2

一枚硬币的偏差是三个值之一,θ∈{0.25,0.5,0.75}\theta \in \{0.25, 0.5, 0.75\},每个值的先验概率为 1/31/3。(a)求一次正面之后的后验。(b)求在第一次为正面的条件下,第二次抛掷为正面的概率,并与第一次抛掷为正面的概率比较。(c)求两次正面之后的后验。

解答

(a)后验正比于 θ×1/3\theta \times 1/3。各乘积为 1/12,2/12,3/121/12, 2/12, 3/12,总和为 1/21/2,所以后验是 1/6,1/3,1/21/6, 1/3, 1/2。

(b)第一次抛掷为正面的概率是 13(0.25+0.5+0.75)=0.5\frac{1}{3}(0.25 + 0.5 + 0.75) = 0.5。一次正面之后,第二次为正面的概率是 0.25⋅16+0.5⋅13+0.75⋅12=0.5830.25 \cdot \frac{1}{6} + 0.5 \cdot \frac{1}{3} + 0.75 \cdot \frac{1}{2} = 0.583。两次抛掷相互依赖,因为它们共享未知的偏差,尽管在给定 θ\theta 时它们是独立的。

(c)后验正比于 θ2\theta^2:0.0625,0.25,0.56250.0625, 0.25, 0.5625,总和为 0.8750.875,所以后验约为 0.071,0.286,0.6430.071, 0.286, 0.643。将(a)中的更新再应用一次,也得到同样的结果。

习题 2.3

设 XX 在 [0,0.25][0, 0.25] 上均匀分布。它的密度是多少?P(0.1≤X≤0.2)\Prob(0.1 \le X \le 0.2) 是多少?计算 E[X]\E[X] 与 Var⁡[X]\Var[X]。

解答

在这一区间上,密度是 1/0.25=41/0.25 = 4,是一个大于一的密度。子区间的概率是其长度乘以密度,0.1×4=0.40.1 \times 4 = 0.4。均值是中点,E[X]=0.125\E[X] = 0.125,而 E[X2]=∫00.254x2 dx=43(0.25)3≈0.02083\E[X^2] = \int_0^{0.25} 4x^2\, \dd x = \frac{4}{3} (0.25)^3 \approx 0.02083,所以由式(2.11),Var⁡[X]=0.02083−0.1252≈0.00521\Var[X] = 0.02083 - 0.125^2 \approx 0.00521,即 0.252/120.25^2 / 12。标准差约为 0.0720.072。

习题 2.4

模型在某个输入处对目标函数的信念,均值为 0.70.7,标准差为 0.10.1。每次评估都加上标准差为 0.050.05 的独立噪声。下一次评估结果的标准差是多少?如果这一输入经过足够多次评估,模型对该处的 ff 已经确定,这个标准差会变为多少?

解答

由式(2.14),方差是 0.052+0.12=0.01250.05^2 + 0.1^2 = 0.0125,所以标准差约为 0.1120.112。一旦模型对 ff 确定,第二项随之消失,一次新评估的标准差只剩下噪声,即 0.050.05。重复评估能消除不确定性中的认知部分,却永远无法消除偶然部分。

延伸阅读 #

  • Blitzstein 与 Hwang(2019)的第 1 至 7 章深入讲解了本章的全部内容,附有大量例题,尤其擅长借助故事解释条件概率。
  • MacKay(2003)的第 2、3 章从信念的视角介绍概率与推断,其中的硬币与骰子例子与本章相近。该书可在网上免费阅读。
  • Bishop(2006)的第 1.2 节用机器学习论文通用的记号,介绍加法规则、乘法规则、贝叶斯定理与期望。
  • Jaynes(2003)从 Cox(1946)的一致性论证出发,把概率发展为逻辑的延伸;其第 2 章由此推导出加法规则与乘法规则。
  • Gigerenzer 与 Hoffrage(1995)表明,数字的呈现格式会影响人们运用贝叶斯定理推理的能力。

参考文献

  1. Balandat, M., Karrer, B., Jiang, D. R., Daulton, S., Letham, B., Wilson, A. G., and Bakshy, E. (2020). BoTorch: A Framework for Efficient Monte-Carlo Bayesian Optimization. Advances in Neural Information Processing Systems 33 (NeurIPS 2020). 引用于 §2.6
  2. Bar-Hillel, M. (1980). The Base-Rate Fallacy in Probability Judgments. Acta Psychologica. 引用于 §2.5
  3. Bayes, T. (1763). An Essay towards Solving a Problem in the Doctrine of Chances. Philosophical Transactions of the Royal Society of London. 引用于 §2.1
  4. Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer.
  5. Blitzstein, J. K., and Hwang, J. (2019). Introduction to Probability. Chapman and Hall/CRC. 引用于 §2.1
  6. Cox, R. T. (1946). Probability, Frequency and Reasonable Expectation. American Journal of Physics. 引用于 §2.1
  7. Ding, Y., Kim, M., Kuindersma, S., and Walsh, C. J. (2018). Human-in-the-Loop Optimization of Hip Assistance with a Soft Exosuit during Walking. Science Robotics. 引用于 §2.7
  8. Gigerenzer, G., and Hoffrage, U. (1995). How to Improve Bayesian Reasoning Without Instruction: Frequency Formats. Psychological Review. 引用于 §2.5
  9. Jaynes, E. T. (2003). Probability Theory: The Logic of Science. Cambridge University Press. 引用于 §2.1
  10. Kahneman, D., and Tversky, A. (1973). On the Psychology of Prediction. Psychological Review. 引用于 §2.5
  11. MacKay, D. J. C. (2003). Information Theory, Inference, and Learning Algorithms. Cambridge University Press.