贝叶斯优化
第五部分:案例研究
EN

为分类器调参

本书前四部分都以测试函数为对象。这些公式经过挑选,便于每次只展示一个想法。公式求值没有代价,其噪声由人为添加,定义域也只是任意划定的一个方框。本部分保留公式所略去的细节。本章的目标函数是真实分类器在真实数据上的验证误差,图中优化器看到的每一个值,都是实际训练模型并评分测得的。

贝叶斯优化在机器学习中流行起来,正是源于为机器学习模型调节设置这一应用(Snoek 等,2012);这也是第 1.1 节所列四个问题中的第一个。最强的几种简单竞争方法也出现在这一应用中:实用指南推荐的设置网格、随机搜索(Bergstra 与 Bengio,2012),以及软件库自带的默认值。案例研究必须认真对待这三者。

本章包含两个问题。第一个问题只有两个设置需要选择,数量少到可以在精细的格点上测量每一种组合。因此,读者可以先亲自搜索这一地形,事先并不知道它的形状;然后观看三种策略以相同预算搜索同一地形;最后看到地形全貌。第二个问题有七个设置,无法穷尽测量,因此各种搜索都离线运行,记录每一次评估,再加以回放。结果并不像图 1.1 中的测试函数所显示的那样一边倒,其中的原因构成了本章的主要内容。

引言引用的文献 2
  1. Snoek 等人(2012)Practical Bayesian Optimization of Machine Learning Algorithms
  2. Bergstra 与 Bengio(2012)Random Search for Hyper-Parameter Optimization

22.1 问题 #

22.1.1 手写数字与支持向量机 #

数据为 1,797 个手写数字,每个数字是一幅扫描图像,压缩为 8 × 8 的网格,每格记录 0 至 16 的墨迹计数(Alpaydin 与 Kaynak,1998)。任务是判断图像中是 0 至 9 中的哪个数字。该数据集随 scikit-learn 提供(Pedregosa 等,2011),任何人都可以重算本章的每一个数字。64 个像素值均缩放到 0 至 1 之间,这是下文所依据的实用指南的建议(Hsu 等,2003)。

分类器是采用径向基函数核的支持向量机(support vector machine,SVM)(Cortes 与 Vapnik,1995)。本章只需了解它计算什么。为新图像判定标签时,它让训练图像加权投票,每幅训练图像所占的分量取决于它与新图像的相似程度:

k(x,x′)=exp⁡ ⁣(−γ ∥x−x′∥2).k(\vx, \vx') = \exp\!\left(-\gamma\, \lVert \vx - \vx' \rVert^2\right).
(22.1)

这就是第 7 章中的径向基函数核,只是用 γ=1/(2ℓ2)\gamma = 1/(2\ell^2) 代替了长度尺度 ℓ\ell。(共有十个类别,scikit-learn 为每一对数字训练一个这样的投票器,再由这些投票器投票。)训练确定的是投票的权重。另有两个数必须在训练开始前确定,训练不会学习它们:

  • γ\gamma,即核宽度(kernel width),决定相似度随距离衰减的快慢。γ\gamma 大时,只有几乎相同的图像才算相似。
  • CC,即惩罚(penalty),决定训练要为每幅落在决策边界错误一侧或离边界过近的训练图像付出多大代价。CC 大,训练会紧密拟合训练图像;CC 小,则容忍错误以换取更简单的边界。

这类设置称为超参数(hyperparameters),选择超参数称为超参数优化(hyperparameter tuning)。第 9 章把核函数的长度尺度也称为超参数,理由相同:这类量决定模型的形态,却不与模型的其他参数一同拟合。

借助在这些图像上测得的距离,可以具体理解 γ\gamma 的含义。缩放之后,一幅图像与最近邻之间平方距离的中位数为 1.05,与同一数字另一幅图像之间为 5.1,与不同数字图像之间为 9.9。当 γ=2−2\gamma = 2^{-2} 时,式(22.1)把这些距离转换为相似度 0.77、0.28 与 0.085:近邻的分量很重,同一数字的其他样本有一定分量,其他数字几乎不起作用。当 γ=23\gamma = 2^{3} 时,即使最近邻的相似度也只有 0.0002,每幅训练图像都成了孤岛,分类器几乎只能死记硬背。当 γ=2−15\gamma = 2^{-15} 时,两幅典型的不同数字图像的相似度为 0.9997,核函数几乎无法区分图像。

22.1.2 测量误差 #

评判分类器要用它未训练过的图像,在这类图像上分错的比例即为验证误差(validation error)。图像只有 1,797 幅,不宜留出太多,因此采用 5 折交叉验证(5-fold cross-validation):将图像随机分为大小几乎相等的五份,每份中各数字的比例相同;在其中四份上训练,在第五份上统计错误,五份依次轮换,最后以错误总数除以 1,797。每幅图像恰好预测一次,且都由从未见过它的模型预测。因此,对一个设置评估一次就要训练五次。

在单个 CPU 核心上,一次评估约需 0.39 秒。代价如此之低,才使测量整个地形成为可能:下文所述格点上的每一个设置,各在五种不同的随机划分下评估,共 37,925 次训练,在 16 个核心上约需 4 分钟。这种情况并不常见。训练并验证大模型的一种配置“往往需要数小时、数天甚至数周”(Klein 等,2017),这时没有人会测量整个地形。本章之所以能直接展示答案,靠的正是评估代价低廉;这不是方法本身的性质,图中仍把每次评估当作代价高昂的操作。

划分是随机的,因此交叉验证带有噪声。在误差低于 3% 的区域,一次评估中五折之间的标准差为 0.65 个百分点。五折的平均值较为稳定:换一种划分重复整个评估,平均值变动的标准差为 0.16 个百分点。后一个数才是优化器面对的噪声,而且并不小。格点上的最优设置在已测量的五种划分下分别错分了 20、14、19、15 与 15 幅图像,即误差介于 0.78% 至 1.11% 之间。

22.1.3 搜索空间 #

第一次评估之前,必须先确定在哪里搜索。一份广泛使用的支持向量机实用指南建议,对两个超参数尝试“指数增长的序列”,即 C=2−5,2−3,…,215C = 2^{-5}, 2^{-3}, \dots, 2^{15} 与 γ=2−15,2−13,…,23\gamma = 2^{-15}, 2^{-13}, \dots, 2^{3},然后在最好的格子周围细化网格(Hsu 等,2003)。本章采用其范围。这两个范围在 CC 上跨越 20 个 2 的幂次,在 γ\gamma 上跨越 18 个,由此引出实践者要做的第一个决定:这些超参数以乘法方式起作用,因此搜索在 log⁡2C\log_2 C 与 log⁡2γ\log_2 \gamma 上进行,在这样的坐标上,范围内任何位置的一步都表示“增大一倍”。

测量地形所用的格点在每个方向上都比指南细一倍,每隔半个 2 的幂次取一个点:log⁡2C\log_2 C 取 41 个值,log⁡2γ\log_2 \gamma 取 37 个值,共 1,517 个设置。指南本身的粗网格共 11×10=11011 \times 10 = 110 个设置,是这一格点的子集。

用第 11.1 节的术语表述:输入是方框 [−5,15]×[−15,3][-5, 15] \times [-15, 3] 中的 x=(log⁡2C,log⁡2γ)\vx = (\log_2 C, \log_2 \gamma);目标函数 f(x)f(\vx) 是对随机划分取平均所得的交叉验证误差;一次评估返回 y=f(x)+εy = f(\vx) + \varepsilon,其中噪声 ε\varepsilon 来自划分。目标是找到 ff 最低的设置。本书其余部分都以最大化为准,因此下文的高斯过程对误差的负对数建模,误差最小处负对数最大。

第 22.1 节引用的文献 5
  1. Alpaydin 与 Kaynak(1998)Optical Recognition of Handwritten Digits
  2. Pedregosa 等人(2011)Scikit-learn: Machine Learning in Python
  3. Hsu 等人(2003)A Practical Guide to Support Vector Classification
  4. Cortes 与 Vapnik(1995)Support-Vector Networks
  5. Klein 等人(2017)Fast Bayesian Optimization of Machine Learning Hyperparameters on Large Datasets

22.2 看不见的地形 #

现在掌握的信息与指南相同:只知道两个范围,别无其他。下图隐藏了 1,517 个实测误差,共有 15 次评估机会。点击一格,图不会训练任何模型,而是从该设置的五次实测交叉验证中取出一次并显示结果,与亲自运行所得完全相同。请尽量找出最低的误差。

你网格随机贝叶斯优化89%0.9%实测误差2⁻⁵2⁰2⁵2¹⁰2¹⁵C(惩罚)2⁻¹⁵2⁻¹⁰2⁻⁵2⁰γ(核宽度)还剩 15 次评估(共 15 次)点击一格即可评估该设置。51015评估次数1.01.52.02.5所选设置的误差(%)全部 1,517 个设置中的最优(0.92%)你选出的设置在这里计分。预算用完后按播放,让网格、随机搜索与 BO 比一比。
你网格随机BO89%0.9%2⁻⁵2⁰2⁵2¹⁰2¹⁵C(惩罚)2⁻¹⁵2⁻¹⁰2⁻⁵2⁰γ(核宽度)还剩 15 次评估(共 15 次)点击一格即可评估该设置。51015评估次数1.01.52.02.5全部 1,517 个设置中的最优(0.92%)所选设置的误差(%)你选出的设置在这里计分。预算用完后按播放,让网格、随机搜索与 BO 比一比。
图 22.1 亲自搜索一个真实的地形。对象是在 1,797 个手写数字上训练的支持向量机,网格横轴为 log⁡2C\log_2 C,纵轴为 log⁡2γ\log_2 \gamma;点击一次即评估一个设置,并按实测的 5 折交叉验证误差为该格着色(颜色越深,误差越低)。预算用完或按“跳到比赛”后,时间轴以相同预算回放网格搜索(方块)、随机搜索(菱形)与贝叶斯优化(圆点),右侧面板为各方最终选出的设置计分。所有数值均为实测,没有任何模拟:每个设置都预先用五种不同的随机划分做了交叉验证,每次评估返回其中之一(tools/figure-data/cs-classifier-svm.py)。

继续阅读之前,可以尝试以下几点。

先用完预算,再揭晓地形。数一数有多少次评估的结果高于 50%。事先无从知道哪些区域很差,因此很容易在这些区域浪费数次评估。

同一格点击两次。第二个值通常与第一个不同,因为第二次读到的是另一种实测划分。这就是第 22.1.2 节所说的噪声,它意味着目前的最优值部分来自运气。

预算用完后按播放。右侧标为“你”的曲线代表你自己的搜索,计分方式与三种策略相同。然后打开“揭晓地形”。

揭晓后的地形由四部分组成,各有成因。

  1. 左下方的高原。CC 与 γ\gamma 都小时,误差为 84%,接近随机猜测的 90%。此时核函数把所有图像看作几乎相同,惩罚又小,训练便放弃拟合这些图像。
  2. 顶部的高墙。从 γ=21\gamma = 2^{1} 往上,无论 CC 取何值,误差都至少为 11%;在 γ=23\gamma = 2^{3} 处,误差介于 78% 至 89% 之间。这就是上一节所说的孤岛:分类器记住了每一幅训练图像,对新图像却无从判断。
  3. 右侧宽阔的台地。CC 大而 γ\gamma 小时,误差稳定在 1.6% 至 2.0% 之间,靠近高原边缘处升至约 5%。当 γ\gamma 减小、CC 按 1/γ1/\gamma 的比例增大时,径向基函数核支持向量机的表现如同线性分类器(Keerthi 与 Lin,2003)。同一缩放关系也解释了高原边缘为何呈对角走向:沿着这条边缘,CγC\gamma 大致不变。
  4. 一道山脊。当 γ\gamma 介于 2−4.52^{-4.5} 至 2−1.52^{-1.5} 之间、CC 又足够大时(下限从山脊中部的 2−0.52^{-0.5} 到下缘的 222^{2} 不等),误差低于 1.1%,这样的设置共 181 个。最优设置为 C=20C = 2^{0}、γ=2−2\gamma = 2^{-2},平均误差 0.92%,约相当于 1,797 幅图像中错分 16.6 幅。

这幅图景中的两个事实决定了后文的一切。第一,方框中好的区域很大:1,517 个设置中有 687 个(45%)误差低于 2%。搜索得好所能赢得的,是从台地的 1.8% 到山脊的 0.92% 这一步,错误数因此减半,但差距不到一个百分点。第二,在方框中较好的那一半里,误差几乎与 CC 无关。在 γ=2−3\gamma = 2^{-3} 处,CC 从 232^{3} 到 2152^{15}(相差 4,096 倍)都给出相同的误差 0.97%:只要 CC 大到足以让训练拟合每一幅训练图像,再增大也没有任何影响。相反,从最优设置出发将 γ\gamma 增大为四倍,误差会增加一倍以上,从 0.92% 升至 2.1%;在同一 CC 下将其缩小为四分之一,误差则升至 1.5%。这就是 Bergstra 与 Bengio(2012)所说的低有效维度:两个超参数中,这里主要只有一个起作用。

要点方框大部分区域都好,难在最后一个百分点

在这一地形上,粗略的搜索能找到 2% 的误差,细致的搜索能找到 1%。下一节中各策略之间的所有差别都在这一个百分点之内,而评估噪声是它的六分之一。

第 22.2 节引用的文献 2
  1. Keerthi 与 Lin(2003)Asymptotic Behaviors of Support Vector Machines with Gaussian Kernel
  2. Bergstra 与 Bengio(2012)Random Search for Hyper-Parameter Optimization

22.3 网格搜索、随机搜索与贝叶斯优化 #

图 22.1 中的三种策略使用相同的预算和相同的实测值,规则也都是实践中常用的。

网格搜索评估 a×ba \times b 的网格,CC 取 aa 个值,γ\gamma 取 bb 个值;在满足 a≥ba \ge b 且 a−b≤2a - b \le 2 的前提下,选取预算所能容纳的最大网格(指南同样给 CC 更多取值)。与指南一样,每个范围连同两端均匀划分,网格按 CC 的取值逐一评估。

随机搜索从 1,517 个格点中均匀抽取设置,相当于在 log⁡2C\log_2 C 与 log⁡2γ\log_2 \gamma 上均匀抽样。

贝叶斯优化从随机搜索最先评估的三个设置出发,然后运行第 11.2 节中的循环。代理模型是 −ln⁡y-\ln y 上的高斯过程,数据标准化为均值 0、标准差 1(第 8.6 节),采用每个轴各有一个长度尺度的 Matérn 5/2 核(第 9.2 节),这正是 Snoek 等人(2012)为超参数优化推荐的组合。两个长度尺度从各轴长度的 0.06、0.1、0.16、0.25 与 0.4 倍中选取,噪声方差从 0.001、0.01 与 0.05 中选取,取边际似然最高的组合(第 9.3 节)。采集函数是期望改进(第 12.3 节),以已评估设置处的最高后验均值为比较基准,这是有噪声时的常用做法(第 14.2 节);采集函数在全部 1,517 个设置上求最大值。

取对数的理由需要说明。误差在 0.9% 至 89% 之间,跨越两个数量级。在原始尺度上,从高原到台地的跃变会支配高斯过程学到的一切,1.8% 与 0.9% 之差看起来只像舍入误差。在对数尺度上,误差减半无论发生在何处,都是同样大小的一步。

三种策略在每一步都推荐迄今实测值最低的设置。比赛面板画的并不是这一实测值,而是所推荐设置在全部五种实测划分上的平均值,即现有数据对其误差的最佳估计,因为获胜设置的实测值系统性偏低(习题 22.2)。下图在揭晓的地形上以 30 次评估的预算回放这场比赛。

你网格随机贝叶斯优化89%0.9%实测误差2⁻⁵2⁰2⁵2¹⁰2¹⁵C(惩罚)2⁻¹⁵2⁻¹⁰2⁻⁵2⁰γ(核宽度)51015202530评估次数1.01.52.02.5所选设置的误差(%)全部 1,517 个设置中的最优(0.92%)
你网格随机BO89%0.9%2⁻⁵2⁰2⁵2¹⁰2¹⁵C(惩罚)2⁻¹⁵2⁻¹⁰2⁻⁵2⁰γ(核宽度)51015202530评估次数1.01.52.02.5全部 1,517 个设置中的最优(0.92%)所选设置的误差(%)
图 22.2 在揭晓的地形上以 30 次评估的预算进行的比赛。网格搜索(方块)评估 6 × 5 的网格;随机搜索(菱形)与贝叶斯优化(圆点)的前三个设置相同;星形标出最优设置。右:各策略当前所选设置的五次划分平均误差,高于 2.6% 的值固定显示在上边缘。按播放观看;按“新的随机运行”换一组随机抽样与实测划分;改变预算可以看到网格随之移动。所有误差均为实测,各策略的运行是在这些测量值上的回放。

一次运行只反映一次运气。表 22.1 汇总了每种策略在四种预算下各 100 次运行的结果,计算代码与图相同(tools/figure-data/cs-classifier-race.ts)。

表 22.1 实测地形上的网格搜索、随机搜索与贝叶斯搜索,各运行 100 次。网格、随机、BO 三列:所推荐设置的五次划分平均误差,取各次运行的中位数。标有 < 1.0% 的列:推荐设置平均误差低于 1.0% 的运行所占比例。网格的设置固定不变,各次运行之间只有实测划分不同。最优设置的误差为 0.92%。
预算 网格(形状) 随机 随机 < 1.0% BO BO < 1.0%
12 1.50%(4 × 3) 1.02% 33% 1.01% 43%
15 1.31%(5 × 3) 1.01% 38% 1.01% 48%
20 0.97%(5 × 4) 1.01% 42% 0.97% 53%
30 1.02%(6 × 5) 1.01% 47% 0.97% 61%

这张表有三点值得注意。

网格的好坏取决于是否对准。5×35 \times 3 网格测试的是 γ=2−15,2−6,23\gamma = 2^{-15}, 2^{-6}, 2^{3},完全越过了山脊;5×45 \times 4 网格恰好测试了 γ=2−3\gamma = 2^{-3},落在山脊上,结果胜过更大的 6×56 \times 5 网格。事先无法知道哪个网格碰巧对准,因为山脊的位置正是搜索的目标。随机搜索几乎每次都测试一个新的 γ\gamma 值:15 个随机设置约包含 12.5 个不同的 γ\gamma 值,而 5×35 \times 3 网格把 15 次评估花在 3 个值上。这正是 Bergstra 与 Bengio(2012)的论点,这里用实测数据加以印证。指南的完整粗网格要用 110 个设置才达到 0.93%,这是系统化搜索的代价。

在这里,随机搜索与贝叶斯优化相差无几。两者的中位数至多相差 0.04 个百分点。在这一地形上,45% 的设置与最优相差不到两倍,随机抽样几乎立即就能落到不错的位置,两种策略都能在 15 至 30 次评估内达到与最优相差 0.1 个百分点以内的水平。贝叶斯优化的优势在于拿下最后 0.1 个百分点的频率:预算为 30 时,61% 的运行低于 1.0%,随机搜索为 47%;其第 90 百分位运行最终为 1.04%,随机搜索为 1.08%。预算为 12 和 15 时,贝叶斯优化最差的那些运行并不比随机搜索好:第 90 百分位分别为 1.32% 对 1.31%、1.25% 对 1.18%。

噪声决定了下限。有 98 个设置的平均误差与最优相差不到 0.1 个百分点,而单次评估噪声的标准差为 0.16 个百分点。每个设置只测一次,任何策略都无法可靠地区分这 98 个设置。误差降到约 1.0% 之后,评估一个新设置的收益,不如对当前最有希望的几个设置再测一次,这正是第 14.2 节讨论的取舍(推断)。

高斯过程在搜索过程中的信念可以直接画出来。下图以模型在某次运行 12 次评估后对误差的预测代替地形,并用圆环标出期望改进选出的下一个设置。

你网格随机贝叶斯优化89%0.9%实测误差2⁻⁵2⁰2⁵2¹⁰2¹⁵C(惩罚)2⁻¹⁵2⁻¹⁰2⁻⁵2⁰γ(核宽度)12 次评估后 BO 的模型;圆环:它的下一次查询51015202530评估次数1.01.52.02.5所选设置的误差(%)全部 1,517 个设置中的最优(0.92%)
你网格随机BO89%0.9%2⁻⁵2⁰2⁵2¹⁰2¹⁵C(惩罚)2⁻¹⁵2⁻¹⁰2⁻⁵2⁰γ(核宽度)12 次评估后 BO 的模型;圆环:它的下一次查询51015202530评估次数1.01.52.02.5全部 1,517 个设置中的最优(0.92%)所选设置的误差(%)
图 22.3 12 次评估后贝叶斯优化对地形的模型:颜色表示高斯过程对误差的后验均值,是预测而非测量;橙色圆环是下一次查询,即期望改进最大之处。逐步移动时间轴可以观察模型的形成过程;关闭“显示 BO 的模型”并打开“揭晓地形”,可将模型与实测误差对照。

12 次评估之后,模型已经掌握了高原、台地以及山脊的大致位置,但在尚未访问的区域,细节都不正确。模型的查询偏向边缘。在预算为 30 的 100 次运行中,贝叶斯优化在随机起步之后的查询有 37% 落在格点边缘,而边缘只包含 10% 的设置;100 次运行中有 98 次至少查询过一个角落。远离所有数据时,平稳高斯过程回到先验,不确定性达到方框中的最大值,而角落离所有数据都最远。在贝叶斯优化中,这种对边界的过度探索“通常可以观察到”,尽管在调参问题中最优设置很少位于边界上(Siivola 等,2018)。在这一地形上,角落都很差,这些评估是方法的谨慎所付出的代价。

易错点最优实测值偏于乐观

许多设置各带噪声测量一次时,最低的测量值不成比例地落在噪声恰好有利的设置上。因此,获胜设置的实测误差系统性偏低,尝试的设置越多,偏差越大。Cawley 与 Talbot(2010)表明,这种对选择准则的过拟合,可能与一项研究所要比较的学习算法之间的差别一样大。报告所选设置的误差时,应使用新的划分,最好使用完全未参与选择的测试集。

综合来看,二维比赛给出了一个测试函数会掩盖的发现。在有两个超参数的真实地形上,好的区域很大,所有测量都带噪声,贝叶斯优化与随机搜索最终的中位误差几乎相同;模型换来的是可靠性,即有更大比例的运行能进入最优的 0.1 个百分点之内。这并非方法的失败。随机抽样本就很可能落在好的区域时,方法所能带来的正是这一点。下一节说明其优势在何处扩大:七个超参数时,随机抽样很少落在好的区域(第 22.4 节)。

要点二维情形下,贝叶斯优化换来的是可靠性

在实测的支持向量机地形上,贝叶斯优化与随机搜索的中位结果至多相差 0.04 个百分点,而误差低于 1.0% 的运行所占比例相差可达 14 个百分点。只有当空间大到随机采样无法覆盖时,中位数的差距才会拉开。

第 22.3 节引用的文献 4
  1. Snoek 等人(2012)Practical Bayesian Optimization of Machine Learning Algorithms
  2. Bergstra 与 Bengio(2012)Random Search for Hyper-Parameter Optimization
  3. Siivola 等人(2018)Correcting Boundary Over-Exploration Deficiencies in Bayesian Optimization with Virtual Derivative Sign Observations
  4. Cawley 与 Talbot(2010)On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation

22.4 多个超参数 #

只有两个超参数时,可以测量全部设置。多数模型的超参数更多,这时没有人会测量整个地形,唯一的数据就是搜索过程中做过的评估。第二个问题就属于这一类,两种方法中位数的差距也正是在这里拉开的。

模型是梯度提升树集成(gradient-boosted tree ensemble):由许多小决策树相加而成,每棵树都用来纠正此前各树的错误(Friedman,2001)。处理表格数据时,它常是首选模型,scikit-learn 中的 HistGradientBoostingClassifier(Pedregosa 等,2011)就实现了这一模型。数据为 Spambase 数据集:共 4,601 封电子邮件,每封由 57 个数值描述,如特定单词和字符的频率、连续大写字母串的长度,其中 39.4% 是垃圾邮件(Hopkins 等,1999)。任务是判断哪些邮件是垃圾邮件。

邮件随机划分一次,保持垃圾邮件比例相同,分为 3,450 封的调参集与 1,151 封的测试集。目标函数是调参集上的 5 折交叉验证误差,划分固定为一种,因此同一配置总是返回同一个数。测试集从不提供给优化器。另外,仅出于分析目的,每个评估过的配置还在整个调参集上训练,并记录其测试误差。表 22.2 列出了所调节的七个超参数。

表 22.2 梯度提升分类器的七个超参数、取值范围及搜索所用的尺度。整数超参数在按尺度变换之后取整。
超参数 范围 尺度 作用
学习率 0.005 至 1 对数 每棵新树对此前各树的修正幅度
树的数量 10 至 500 对数,整数 加入多少棵树
叶数 2 至 256 对数,整数 单棵树的最大叶数
最小叶样本数 1 至 200 对数,整数 每片叶至少包含的邮件数
L2 惩罚 10−410^{-4} 至 10 对数 叶的取值向零收缩的强度
特征比例 0.1 至 1 线性 每次分裂可考虑的特征占全部 57 个特征的比例
分箱数 4 至 255 对数,整数 每个特征离散化的精细程度

两种搜索都按这些尺度把方框映射到单位立方体 [0,1]7[0, 1]^7。随机搜索在立方体中均匀抽取点。贝叶斯优化以同一随机种子下随机搜索的前 10 个点为起点,然后运行基于高斯过程的期望改进。模型以交叉验证误差的对数为对象,使用每个超参数各有一个长度尺度的 Matérn 5/2 核,另加幅度与噪声项,全部用最大边际似然拟合,重启四次;期望改进以已评估点处的最低后验均值为基准,在 4,000 个均匀候选点以及对五个最优点所做的 2,000 个小扰动上求最大值(第 12.9 节)。每种搜索有 60 次评估,各用 10 个不同的随机种子运行,共训练并评分 1,200 个配置,每一个都有记录(tools/figure-data/cs-classifier-gbm.py)。

这里一次评估的代价并不固定。在单个 CPU 线程上,一个配置的交叉验证耗时 0.09 至 32.6 秒,相差 350 倍,主要取决于树和叶的数量。阅读下图时需注意这一点,其横轴既可以按评估次数计,也可以按秒数计。

贝叶斯优化随机搜索scikit-learn 默认值102030405060评估次数4.44.85.2当前最优 CV 误差(%)scikit-learn 默认值(4.78%)学习率110⁻²36%树的数量5001026%叶数25625%最小叶样本数20011%L2 惩罚1010⁻⁴2%特征比例10.10%分箱数25541%CV 误差39%4.3%主效应贝叶斯优化的全部十次运行中的 600 个配置;粗线:CV 误差 ≤ 4.67%(全部 1,200 次评估中最好的 10%)
BO随机搜索scikit-learn 默认值102030405060评估次数4.44.85.2当前最优 CV 误差(%)scikit-learn 默认值(4.78%)学习率110⁻²36%树数5001026%叶数25625%最小叶20011%L21010⁻⁴2%特征10.10%分箱25541%CV 误差39%4.3%贝叶斯优化的全部十次运行中的 600 个配置;粗线:CV 误差 ≤ 4.67%(全部 1,200 次评估中最好的 10%)
图 22.4 在 Spambase 上对梯度提升分类器的七个超参数进行的随机搜索(紫色)与贝叶斯优化(橙色),各有 10 次记录在案的运行。上:迄今最优误差,细线为单次运行,粗线为中位数;切换“评分”可查看每次运行所选配置在留出测试集上的误差,切换“花费”可改为按计算秒数而非评估次数计。下:以平行坐标显示已评估的配置,每个配置一条线,依次穿过七个超参数及其交叉验证误差;粗线属于全部 1,200 次评估中最好的 10%;条形表示各超参数的主效应占比。每个配置都实际训练并评分,没有任何模拟。时间轴按记录的顺序回放。

可以尝试以下几点:

观察单次运行。把“运行”设为 1 并按播放。下方面板中最粗的线是刚评估的配置。随机搜索的线始终分散在各个轴上;贝叶斯优化在第十次评估之后,线条聚集成几条带,其中许多位于轴的两端。

切换评分。切换到“留出测试”。上方面板中整齐的阶梯变为上下起伏的折线,两种方法之间的差距随之缩小。

按秒计。把“花费”切换为“计算时间”。橙色的运行向右拉长:贝叶斯优化偏好的正是代价高的配置。

表 22.3 汇总了结果。

表 22.3 记录在案的搜索结果:10 次运行的中位数,括号中为各次运行的范围。CV 误差是优化器最小化的量;测试误差是每次运行所选配置在留出数据上的误差,任何优化器都未见过这些数据。计算时间是单个 CPU 线程上整次运行的交叉验证用时。
CV 误差 所选配置的测试误差 每次运行的计算时间
scikit-learn 默认值 4.78% 3.82% 1.2 秒
随机搜索,60 次评估 4.61%(4.46 至 4.78) 3.91%(3.21 至 5.13) 92 秒
贝叶斯优化,30 次评估 4.61%(4.41 至 4.90) 3.74%(3.21 至 4.69)
贝叶斯优化,60 次评估 4.44%(4.29 至 4.64) 3.65%(3.30 至 4.00) 300 秒

自上而下,这张表说明了四点。

在给定的指标上,贝叶斯优化胜出。60 次评估后,其交叉验证误差的中位数为 4.44%,随机搜索为 4.61%;贝叶斯优化只用 26 次评估就达到了随机搜索 60 次评估的中位数。它的 10 次运行中有 9 次最终低于随机搜索的中位数。

按秒数而非评估次数计,这一领先大部分消失。贝叶斯优化偏好树多、叶多的配置:随机起步之后,其配置的树数中位数为 280 棵、叶数中位数为 76 片,随机搜索分别为 68 和 24。这些配置耗时更长,每次运行的中位耗时为 300 秒,随机搜索为 92 秒。在最初 92 秒的计算时间内,两种方法最优值的中位数都是 4.61%。Snoek 等人(2012)使这一方法在调参领域流行起来,补救办法也在同一篇论文中提出:以预测的评估代价除期望改进,选择每秒改进最多的设置。后来的工作把成本感知的搜索作为一个独立的决策问题来处理(Xie 等,2024)。

在留出数据上,差别缩小到接近测试集自身噪声的水平。贝叶斯优化所选配置的测试误差中位数为 3.65%,随机搜索为 3.91%,默认值为 3.82%。在 1,151 封邮件上测得的约 3.8% 的错误率,其二项标准误为 0.56 个百分点(即 0.038×0.962/1,1510.038 \times 0.962 / 1{,}151 的平方根,反映哪些邮件恰好落入测试集这一偶然因素造成的波动),大于上述任何一个差距。在交叉验证误差低于 5% 的 361 个配置中,交叉验证误差与测试误差的相关系数为 0.16。在这个数据集上,配置一旦足够好,它与其他好配置的区别主要来自特定的划分(推断)。

默认值很难超越。600 个随机配置中,只有 20 个的交叉验证误差低于库的默认设置。这一结果既反映了默认值,也同样反映了这个方框:如此宽的方框,大部分区域都不如合理的默认值。一项涵盖六种算法、38 个数据集的大型研究把这一观察转化为一个度量,即每个超参数的可调性(tunability):调节该超参数能在良好默认值的基础上改进多少(Probst 等,2019)。

22.4.1 哪些超参数起作用 #

图 22.4 中各轴下方的条形,回答了实践者在搜索之后都会提出的问题:哪些设置起了作用?随机搜索在立方体中均匀采样,因此其 600 次评估可以支持一个简单的估计:把某个超参数的范围等分为五个区间,看配置落在哪个区间能解释误差对数方差的多大比例。这一比例就是该超参数的主效应(main effect)。这正是函数方差分析的思想(Hutter 等,2014),只是这里直接由评估结果计算,而不是由拟合评估结果的模型计算。

学习率解释了 36% 的方差,树的数量解释了 26%,叶数解释了 5.5%,其余四个合计不到 5%。七个主效应之和为 72%,因此约四分之一的方差来自超参数的共同作用。最大的交互作用可以在图中前两个轴之间看到:好的配置要么是高学习率配少量树,要么是低学习率配大量树,它们的线在这两个轴之间交叉。在全部评估中最好的 10% 里,学习率与树的数量之积的中位数为 40.5,而全部评估的中位数为 12.5;起作用的大致是集成模型总共移动了多远,而不是其中任何一个因子本身(推断)。

少数几个超参数承担大部分作用,这是常见的发现。Hutter 等人(2014)报告,“即使在维度非常高的情形中”,大部分变化也可以归因于少数几个超参数;Bergstra 与 Bengio(2012)发现,“真正重要的超参数只有少数几个,但在不同的数据集上,重要的是不同的超参数”。正因为后半句,不能简单地只调上次起作用的那两个超参数。

22.4.2 搜索的落点 #

平行坐标还显示出一点:贝叶斯优化的线挤在轴的两端。在前 10 次之后的评估中,84% 至少有一个超参数距其范围边缘不到 2%,最终选出的 10 个配置全都如此。随机搜索的这一比例为 27%,接近均匀采样偶然产生的 31%(七个坐标,两端各留 2% 的余量,并做整数取整);它选出的 10 个配置中有 2 个位于边缘。

这种堆积有两种解释。一种是最优值位于方框之外,即范围设得太窄;另一种是期望改进出于图 22.3 中所见的原因被吸引到边界:那里的后验最不确定(Siivola 等,2018)。数据无法区分这两种情况,但实际对策相同:查看最好的配置位于何处,凡是它们贴近边界的范围,都应放宽。

第 22.4 节引用的文献 9
  1. Friedman(2001)Greedy Function Approximation: A Gradient Boosting Machine
  2. Pedregosa 等人(2011)Scikit-learn: Machine Learning in Python
  3. Hopkins 等人(1999)Spambase
  4. Snoek 等人(2012)Practical Bayesian Optimization of Machine Learning Algorithms
  5. Xie 等人(2024)Cost-aware Bayesian Optimization via the Pandora's Box Gittins Index
  6. Probst 等人(2019)Tunability: Importance of Hyperparameters of Machine Learning Algorithms
  7. Hutter 等人(2014)An Efficient Approach for Assessing Hyperparameter Importance
  8. Bergstra 与 Bengio(2012)Random Search for Hyper-Parameter Optimization
  9. Siivola 等人(2018)Correcting Boundary Over-Exploration Deficiencies in Bayesian Optimization with Virtual Derivative Sign Observations

22.5 实践者要做的决定 #

本章的每个结果都取决于第一次评估之前或最后一次评估之后所做的选择,而这些选择没有一个由优化器做出。它们正是测试函数所掩盖的那部分调参工作。

范围。已发表的指南是很好的起点(Hsu 等,2003),库的文档和以往的运行也可以参考。搜索之后,检查最好的配置是否位于边缘(如第 22.4.2 节中贝叶斯优化的配置),若是,则放宽范围。

尺度。以乘法方式起作用的超参数应采用对数尺度。这并非无关紧要的细节:在 2−52^{-5} 至 2152^{15} 的线性尺度上,一次均匀抽样落在 C=1C = 1 以下的概率只有 0.003%,而手写数字问题的最优设置恰好是 C=1C = 1。

代理模型的建模对象。跨越数个数量级的误差,最好取对数并标准化后再建模,本章的两组搜索都是这样做的(第 8.6 节)。

噪声与最终答案。在手写数字问题上,单次评估的噪声是全部收益的六分之一;在 Spambase 上,噪声大于各方法在留出数据上的任何差距。做出选择之前,应使用新的划分重新测量最好的几个设置;按后验均值而非最低测量值推荐(第 11.2.3 节);并保留一个搜索过程完全不接触的测试集,只在最后评分一次(Cawley 与 Talbot,2010)。

预算与代价。应计算评估的代价,而不只是评估的次数。像这里这样代价相差 350 倍时,成本感知的采集(Snoek 等,2012;Xie 等,2024)或低成本的部分评估,比更好的代理模型更有帮助。Hyperband 对大量随机配置做短时训练,只让有希望的配置继续训练;其作者报告,在深度学习与核方法问题上,相对于包括流行贝叶斯优化方法在内的竞争方法,它实现了“超过一个数量级的加速”(Li 等,2018)。FABOLAS 对误差随训练子集大小的变化建模,常常能“快 10 至 100 倍”地找到好的配置(Klein 等,2017)。

停止。在记录的运行中,贝叶斯优化最优值的中位数在最后 20 次评估中改进了 0.04 个百分点,从 4.48% 降至 4.44%。单个交叉验证估计的标准误可以粗略地取为折间标准差(在好的配置中为 0.59 个百分点)除以 5\sqrt{5},约 0.26 个百分点(之所以说粗略,是因为各折共享训练数据)。这 20 次评估换来的改进,约为该估计自身不确定性的六分之一。这一判断的严格形式是:只有当某个配置的期望改进超过评估它的代价时才继续。Xie 等人(2026)证明,这一规则与合适的采集函数配合,其期望的代价调整遗憾不劣于立即停止;他们称这是贝叶斯优化中自适应停止规则的第一个此类理论保证。

基线。先评估默认值,再以与任何更精巧方法相同的预算运行随机搜索。两者代价都很低,而在 Spambase 上,默认值至少不差于 600 个随机配置中的 580 个。把许多问题上的证据汇总起来,贝叶斯优化确实胜过随机搜索:2020 年的黑箱优化挑战赛在真实数据集上调节标准模型,65 支队伍中有 61 支胜过随机搜索;要达到同样的结果,随机搜索所需的评估次数是最好的提交方案的 100 倍以上(Turner 等,2021)。同一篇论文引用了对论文作者的调查:NeurIPS 2019 的论文中只有 7%、ICLR 2020 的论文中只有 6% 使用这类方法调参,而不是手动调节、网格搜索或随机搜索。

要点优化器优化的是交给它的那个数

在两个问题上,贝叶斯优化找到的交叉验证误差都低于随机搜索。这个数是否值得降低、一次评估代价多大、获胜配置有多可信,这些问题都要由设置搜索的人来回答;从本章的证据看,它们与优化器的选择同样重要。

下一章(第 23 章)从软件的设置转向化学反应的条件:一次评估要在实验室里花一个下午,大多数选择是类别型的,实验成批进行。

第 22.5 节引用的文献 8
  1. Hsu 等人(2003)A Practical Guide to Support Vector Classification
  2. Cawley 与 Talbot(2010)On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation
  3. Snoek 等人(2012)Practical Bayesian Optimization of Machine Learning Algorithms
  4. Xie 等人(2024)Cost-aware Bayesian Optimization via the Pandora's Box Gittins Index
  5. Li 等人(2018)Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization
  6. Klein 等人(2017)Fast Bayesian Optimization of Machine Learning Hyperparameters on Large Datasets
  7. Xie 等人(2026)Cost-aware Stopping for Bayesian Optimization
  8. Turner 等人(2021)Bayesian Optimization is Superior to Random Search for Machine Learning Hyperparameter Tuning: Analysis of the Black-Box Optimization Challenge 2020

22.6 习题 #

习题 22.1

支持向量机的核式(22.1)与第 7 章中的径向基函数核只在宽度的写法上不同。最优的 γ=2−2\gamma = 2^{-2} 对应的长度尺度 ℓ\ell 是多少?利用第 22.1.1 节中的平方距离中位数,用 ℓ\ell 解释为什么 γ=23\gamma = 2^{3} 会使每幅训练图像都成为孤岛。

解答

令 exp⁡(−γr2)\exp(-\gamma r^2) 与 exp⁡(−r2/2ℓ2)\exp(-r^2 / 2\ell^2) 相等,得 ℓ=1/2γ\ell = 1/\sqrt{2\gamma}。当 γ=2−2\gamma = 2^{-2} 时,ℓ=1/0.5≈1.41\ell = 1/\sqrt{0.5} \approx 1.41。到最近邻的距离中位数为 1.05≈1.02\sqrt{1.05} \approx 1.02,不到一个长度尺度,因此近邻高度相似;两个不同数字相距 9.9≈3.1\sqrt{9.9} \approx 3.1,超过两个长度尺度,因此几乎互不影响。当 γ=23\gamma = 2^{3} 时,ℓ=1/16=0.25\ell = 1/\sqrt{16} = 0.25:即使最近邻也相距约四个长度尺度,核函数在该处已降至 exp⁡(−8×1.05)≈0.0002\exp(-8 \times 1.05) \approx 0.0002。于是每幅训练图像只影响自身周围一个极小的球,新图像不落在任何一个球内。

习题 22.2

设 20 个设置的真实误差都是 1.0%,每个设置测量一次,测量带有标准差为 0.16 个百分点的独立高斯噪声,即手写数字问题上一次交叉验证运行的噪声。20 个独立标准正态变量最大值的期望约为 1.87。最低实测误差的期望是多少?如果每个设置测量四次并取平均,答案如何变化?

解答

20 个测量值中的最小值等于均值减去 20 个噪声抽样中的最大值,因此其期望约为 1.0−1.87×0.16≈0.70%1.0 - 1.87 \times 0.16 \approx 0.70\%。尽管没有哪个设置优于其他设置,获胜设置看起来却比实际好 0.3 个百分点。四次测量取平均使标准差减半,降为 0.08 个百分点,最低平均值的期望约为 1.0−1.87×0.08≈0.85%1.0 - 1.87 \times 0.08 \approx 0.85\%。偏差缩小了,但并未消失,因此最终的估计应当来自选择过程未使用的数据。

习题 22.3

证明:从搜索方框中独立均匀抽样 60 次,至少有一个点来自方框中最好的 5% 的概率高于 95%。在手写数字地形上,最好的 5% 的设置平均误差至多为 1.01%;在 Spambase 的 600 个随机配置中,最好的 5% 的交叉验证误差至多为 4.81%。这两个数分别说明了这一保证的什么含义?

解答

每次抽样错过最好的 5% 的概率为 0.95,因此 60 次独立抽样全部错过的概率为 0.9560≈0.0460.95^{60} \approx 0.046,至少命中一次的概率约为 0.954。这一保证以方框为参照。在手写数字地形上,最好的 5% 是很强的结果,与最优设置相差不到 0.1 个百分点。在 Spambase 上则不然:4.81% 这一阈值比库的默认值 4.78% 还差,因为那个方框的大部分区域都不如默认值。“方框中最好的 5%”并不说明方框本身有多好,因此范围和默认值与搜索同样重要。

延伸阅读 #

  • Hsu 等人(2003)是本章所依据的实用指南,本章的范围与由粗到细的网格流程均取自该文;该文篇幅短小,至今仍是手工调节支持向量机的最佳说明。
  • Snoek 等人(2012)将基于高斯过程的贝叶斯优化引入机器学习超参数优化,提出了带自动相关性确定的 Matérn 5/2 核、对核超参数的积分以及每秒期望改进。
  • Bergstra 与 Bengio(2012)论证了随机搜索优于网格搜索,并提出低有效维度的论点,第 22.2 节对此做了图示。
  • Feurer 与 Hutter(2019)综述了超参数优化,包括本章仅简单提及的多保真度方法。
  • Hutter 等人(2014)与 Probst 等人(2019)在许多数据集上度量了哪些超参数起作用,以及调参能在默认值基础上改进多少。
  • Cawley 与 Talbot(2010)解释了最好的交叉验证得分为何偏于乐观,以及这种偏差可能有多大影响。
  • Turner 等人(2021)报告了 2020 年的黑箱优化挑战赛,这是在真实模型上对调参方法所做的规模最大的直接比较。
  • Keerthi 与 Lin(2003)解释了支持向量机地形的形状:在何处欠拟合,在何处死记硬背,以及为何会趋于线性。
  • 数据来自 Alpaydin 与 Kaynak(1998)(手写数字,随 scikit-learn 提供)与 Hopkins 等人(1999)(电子邮件),均采用 CC BY 4.0 许可。本章全部测量所用的脚本位于 tools/figure-data/(cs-classifier-svm.py、cs-classifier-gbm.py、cs-classifier-race.ts),确切的命令写在各脚本开头。

参考文献

  1. Alpaydin, E., and Kaynak, C. (1998). Optical Recognition of Handwritten Digits. UCI Machine Learning Repository, data set, CC BY 4.0. doi:10.24432/C50P49. 非同行评审引用于 §22.1
  2. Bergstra, J., and Bengio, Y. (2012). Random Search for Hyper-Parameter Optimization. Journal of Machine Learning Research. 引用于 §22.2 §22.3 §22.4
  3. Cawley, G. C., and Talbot, N. L. C. (2010). On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation. Journal of Machine Learning Research. 引用于 §22.3 §22.5
  4. Cortes, C., and Vapnik, V. (1995). Support-Vector Networks. Machine Learning. 引用于 §22.1
  5. Feurer, M., and Hutter, F. (2019). Hyperparameter Optimization. Automated Machine Learning: Methods, Systems, Challenges.
  6. Friedman, J. H. (2001). Greedy Function Approximation: A Gradient Boosting Machine. The Annals of Statistics. 引用于 §22.4
  7. Hopkins, M., Reeber, E., Forman, G., and Suermondt, J. (1999). Spambase. UCI Machine Learning Repository, data set, CC BY 4.0. doi:10.24432/C53G6X. 非同行评审引用于 §22.4
  8. Hsu, C.-W., Chang, C.-C., and Lin, C.-J. (2003). A Practical Guide to Support Vector Classification. Department of Computer Science, National Taiwan University. 非同行评审引用于 §22.1 §22.5
  9. Hutter, F., Hoos, H., and Leyton-Brown, K. (2014). An Efficient Approach for Assessing Hyperparameter Importance. International Conference on Machine Learning. 引用于 §22.4
  10. Keerthi, S. S., and Lin, C.-J. (2003). Asymptotic Behaviors of Support Vector Machines with Gaussian Kernel. Neural Computation. 引用于 §22.2
  11. Klein, A., Falkner, S., Bartels, S., Hennig, P., and Hutter, F. (2017). Fast Bayesian Optimization of Machine Learning Hyperparameters on Large Datasets. Artificial Intelligence and Statistics. 引用于 §22.1 §22.5
  12. Li, L., Jamieson, K., DeSalvo, G., Rostamizadeh, A., and Talwalkar, A. (2018). Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization. Journal of Machine Learning Research. 引用于 §22.5
  13. Pedregosa, F., Varoquaux, G., Gramfort, A., Michel, V., Thirion, B., Grisel, O., … Duchesnay, É. (2011). Scikit-learn: Machine Learning in Python. Journal of Machine Learning Research. 引用于 §22.1 §22.4
  14. Probst, P., Boulesteix, A.-L., and Bischl, B. (2019). Tunability: Importance of Hyperparameters of Machine Learning Algorithms. Journal of Machine Learning Research. 引用于 §22.4
  15. Siivola, E., Vehtari, A., Vanhatalo, J., González, J., and Andersen, M. R. (2018). Correcting Boundary Over-Exploration Deficiencies in Bayesian Optimization with Virtual Derivative Sign Observations. 2018 IEEE 28th International Workshop on Machine Learning for Signal Processing (MLSP). 引用于 §22.3 §22.4
  16. Snoek, J., Larochelle, H., and Adams, R. P. (2012). Practical Bayesian Optimization of Machine Learning Algorithms. Advances in Neural Information Processing Systems 25 (NeurIPS 2012). 引用于 §22.3 §22.4 §22.5
  17. Turner, R., Eriksson, D., McCourt, M., Kiili, J., Laaksonen, E., Xu, Z., and Guyon, I. (2021). Bayesian Optimization is Superior to Random Search for Machine Learning Hyperparameter Tuning: Analysis of the Black-Box Optimization Challenge 2020. NeurIPS 2020 Competition and Demonstration Track. 引用于 §22.5
  18. Xie, Q., Astudillo, R., Frazier, P. I., Scully, Z., and Terenin, A. (2024). Cost-aware Bayesian Optimization via the Pandora's Box Gittins Index. NeurIPS 2024. 引用于 §22.4 §22.5
  19. Xie, Q., Cai, L., Terenin, A., Frazier, P. I., and Scully, Z. (2026). Cost-aware Stopping for Bayesian Optimization. International Conference on Machine Learning. 引用于 §22.5