高斯过程回归
第 7 章最终得到一个先验:在观测任何数据之前,高斯过程已为每个函数赋予概率。本章引入数据:在少数几个输入处评估未知函数。问题是:结合先验与这些观测值,能对函数在其余各处得出什么结论?
回答这个问题无需新的工具。按照高斯过程的定义,任意有限个函数值服从联合高斯分布;第 4.5 节已经说明了如何让联合高斯分布以其中部分坐标为条件。高斯过程回归就是这同一个公式,一侧是已观测的输入,另一侧是待预测的输入。本章其余内容都是对结果的解读:后验均值在数据之间和数据之外如何变化;不确定性为什么取决于观测的位置,而与观测到的值无关;观测带噪声时有哪些变化;以及如何在计算中避免数值问题。
后验不确定性是本书其余部分要花费的资源。第 12 章中的每个采集函数,都是把它转化为下一次查询的规则,因此有必要透彻了解它的形态。
8.1 以观测为条件 #
记 为定义在输入定义域 上的未知函数,其先验是均值为零、核函数为 的高斯过程:
在 个输入 处观测 ,这些输入构成集合 。暂且假设观测是精确的:。将观测值堆叠成向量 。目标是求 在 个新输入 处的分布,这些位置上的未知值堆叠为 。
最简单的情形已在例 4.3 中算过:两个函数值的相关系数为 0.8,其中一个观测为 1.2,对另一个的信念随之变为均值 0.96、标准差 0.6。下面的计算与之相同,只是观测值有 个,未观测值可以任意多,相关性由核函数给出。
由高斯过程的定义, 与 服从联合高斯分布。其协方差由核函数逐元素构造,分为四块:已观测输入之间的协方差、已观测输入与新输入之间的协方差,以及新输入之间的协方差。
其中 是已观测输入之间的协方差, 是已观测输入与新输入之间的协方差, 是新输入之间的协方差。
以 为条件,正是第 4.5 节中的运算。
于是新值的后验为
上述推导与新输入的个数和位置都无关。后验仍是高斯过程:对任意有限个新输入,预测服从联合高斯分布,均值与协方差如上。这种封闭性使该方法切实可用:数据只需吸收一次,结果可以在任何位置查询。
对单个新输入 ,各块退化为一个向量和两个数。记 为 与各已观测输入之间的协方差,则后验均值与方差为
这两个式子是全章实际使用的形式。需要强调观测个数 时,本书其余部分写作 和 ,并始终带自变量。它们不同于第 8.3 节中的噪声标准差 :后者不带自变量,下标表示噪声(noise)。
8.2 解读后验 #
下图在 160 个输入构成的网格上计算式(8.3)。蓝线为后验均值;阴影带覆盖均值上下 1.96 个后验标准差的范围,在每个输入处包含 95% 的后验概率。下方条带单独画出标准差。
下面通过几个实验具体理解这些方程。
在远离其他点处添加一个点。阴影带在新输入处收窄到几乎为零,向两侧又重新张开。张开的快慢由核函数的长度尺度 决定:径向基函数核 在两个长度尺度之外已降到约 ,因此一个观测对两个长度尺度以外的输入几乎不提供信息。
观察均值在数据之间与数据之外的变化。在相邻观测之间,均值光滑地插值。远离所有观测时,均值回到先验均值零,阴影带也恢复到先验宽度。模型不会外推趋势,而是退回到观测数据之前的信念。
缩短长度尺度。均值在点与点之间曲折地回落到零,阴影带在每个间隙中都明显变宽。加长长度尺度,均值则变成一条僵硬的曲线;若各点彼此不一致,曲线可能完全偏离这些点。长度尺度的选择是第 9 章的主题。
只有一个观测时,无需矩阵即可看清其中的结构。
8.2.1 均值是鼓包之和 #
单个观测的结论可以推广。定义权重 ,则式(8.3)中的均值为
即 个核函数的加权和,每个核函数以一个观测为中心。在图中打开“显示核函数鼓包”,即可画出每一项。两个观测靠得很近时,它们的核函数相互重叠,权重必须彼此补偿;因此,某个权重可能远大于它参与拟合的观测值,甚至符号相反。
核岭回归是一种没有概率解释的方法;当其正则化强度等于下一节引入的噪声方差时,它的预测也是式(8.4)。高斯过程在此基础上还给出方差。岭回归没有方差,而贝叶斯优化恰恰需要它(Kanagawa 等,2018)。
第 8.2 节引用的文献 1
- Kanagawa 等人(2018)Gaussian Processes and Kernel Methods: A Review on Connections and Equivalences
8.3 带噪声的观测 #
真实的评估很少精确。换一个随机种子,训练得到的准确率就不同;穿着外骨骼行走的人,步伐有好有坏。标准模型给每个观测加上独立的高斯噪声:
噪声与 独立,不同观测的噪声之间也相互独立,因此它只给每个观测的方差加上 ,不改变任何协方差。联合分布(式(8.1))形式不变,只是 换成 ;推导同样如此:
图中有两处变化。在图 8.1 中移动噪声滑块,均值不再穿过各点,而是像岭回归那样在拟合与光滑之间折中。阴影带也不再收窄到零,因为带噪声的观测无法精确确定 。
噪声方差通常未知。它是一个超参数,在第 9 章中与长度尺度一同拟合。噪声取得太小,模型会追逐每一次波动;取得太大,模型会忽视真实的结构。两者之间还可能相互替代:短长度尺度配小噪声,长长度尺度配大噪声,都能解释同样曲折的数据。这也是拟合出的超参数需要审慎看待的一个原因。
8.4 计算方法 #
公式中含有矩阵的逆,但严谨的实现从不显式求逆。矩阵 对称正定,因而存在 Cholesky 分解 ,其中 为下三角矩阵(第 3.5 节)。求解三角方程组的代价为 ,且数值稳定;对近乎奇异的矩阵求逆,这两点都无法保证。
输入:输入 、观测 、核函数 、噪声方差 、测试输入 。
- ,使得 。
- ,即两次三角求解。
- 。
- 。
- 。
其中 表示方程 的解 。此即 Rasmussen 与 Williams(2006)中的算法 2.1;该算法还返回第 9.3 节用到的对数边际似然。
第 4 步是方差公式的另一种写法:。
计算代价分为两部分:每个数据集只需付出一次的部分,以及每次预测都要付出的部分。第 1 步的分解需要 的时间和 的内存;此后每个均值的代价为 ,每个方差为 。笔记本电脑分解几千行的矩阵用时远不到一秒,而一次贝叶斯优化运行的观测很少超过几百个,因此在本书中,三次方的代价很少成为瓶颈。更大的数据集需要近似方法,用较小的诱导点集合概括数据(Quiñonero-Candela 与 Rasmussen,2005;Titsias,2009)。
import numpy as np
def rbf(a, b, ell=0.12):
return np.exp(-0.5 * (a[:, None] - b[None, :]) ** 2 / ell**2)
def gp_posterior(x, y, xs, noise=1e-4, ell=0.12):
L = np.linalg.cholesky(rbf(x, x, ell) + noise * np.eye(len(x)))
alpha = np.linalg.solve(L.T, np.linalg.solve(L, y))
Ks = rbf(x, xs, ell) # n x m
mean = Ks.T @ alpha
v = np.linalg.solve(L, Ks) # n x m
var = 1.0 - np.sum(v**2, axis=0) # 此核函数满足 k(x, x) = 1
return mean, var
生产环境中的实现会使用三角求解器(scipy.linalg.solve_triangular),速度更快,也明确体现了矩阵的结构。附录 C 以这个函数为基础展开。
即使核矩阵本身良定,当两个输入几乎相同时,浮点运算中的分解也可能失败:两行几乎相等,最小特征值经舍入变为零或负数。实现上的做法是在对角线上加一个小常数作为“抖动项”(jitter),例如 ;若分解仍然失败,就换用更大的值重试。有观测噪声时这一问题很少出现,因为 本身就相当于抖动项。
第 8.4 节引用的文献 3
- Rasmussen 与 Williams(2006)Gaussian Processes for Machine Learning
- Quiñonero-Candela 与 Rasmussen(2005)A Unifying View of Sparse Approximate Gaussian Process Regression
- Titsias(2009)Variational Learning of Inducing Variables in Sparse Gaussian Processes
8.5 后验样本 #
均值和阴影带逐个输入地概括后验,无法展示单个合理的函数是什么样子,因为相邻的值高度相关。要看到完整的函数,需要在输入网格上从联合后验(式(8.2))中抽取样本。记 为后验协方差, 为其 Cholesky 因子,则每个样本为
这就是第 4.3 节中的采样方法。在图 8.1 中打开“显示样本”:每条紫色曲线都穿过(或接近)所有观测,大部分位于阴影带之内,光滑程度与核函数允许的一致。每一条都是模型认为可能的函数。
样本的用处不限于可视化。第 12.5 节中的 Thompson 采样就是一种采集规则:抽取一个后验样本,在该样本取最大值处评估目标函数。在 个点的网格上采样,分解的代价为 ,网格因此限于几千个点以内;对更大的或连续的定义域,可以借助随机特征或路径式更新,把样本作为函数抽取(Rahimi 与 Recht,2007;Wilson 等,2020)。
第 8.5 节引用的文献 2
- Rahimi 与 Recht(2007)Random Features for Large-Scale Kernel Machines
- Wilson 等人(2020)Efficiently Sampling Functions from Gaussian Process Posteriors
8.6 易错点 #
实践中,以下三个习惯可以避免大多数意外。
标准化输出。零先验均值和单位幅度假定函数值以零为中心、离散程度在一左右。取值在 1000 附近的函数,在远离数据处会被拉向零。拟合前应减去观测值的均值、除以其标准差,并对预测结果做逆变换。BoTorch 等软件库用结果变换(outcome transform)完成这一步(Balandat 等,2020)。
缩放输入。单一的长度尺度假定所有输入方向的变化尺度相当。先把每个输入映射到 ;若各维度的重要程度不同,再为每个维度设置各自的长度尺度(第 9.2 节)。
不要轻信外推。在数据范围之外,后验按其构造回到先验。若目标函数的某种趋势延续到观测范围之外,平稳核无法预测出这一趋势。在有界定义域上做优化时,这一点通常可以接受,但也说明定义域不宜设得比必要的更大。
第 8.6 节引用的文献 1
- Balandat 等人(2020)BoTorch: A Framework for Efficient Monte-Carlo Bayesian Optimization
8.7 习题 #
在无噪声、单位幅度、长度尺度为 的径向基函数核先验下,得到两个观测 和 。令 。用 表示中点 处的后验方差,并验证当 时它趋于单个观测时的值。
解答
这里 ;记 为中点与每个观测之间的核函数值,则 。逆矩阵为 ,因此 ,于是
由于 ,当 时 与 都趋于 1,方差趋于 ,与直接观测中点的结果相同。 很小时,第二个观测几乎没有带来新信息:两个几乎重合的输入所含的信息与一个输入相差无几。
设噪声方差为 , 个观测都在同一输入 处。证明对单位幅度的核函数, 处的后验方差为 。这一结果说明,重复一次评估而不尝试新输入,会有什么效果?
解答
的所有元素都是 1,所以 ,。由于 ,有 ,因此 (习题 B.1 用 Sherman-Morrison 公式得到同样的结果)。于是 ,方差为 。重复评估使该输入处的不确定性按 缩小,与对 次带噪声测量取平均的速率相同,但对其他位置几乎不提供信息。只有当噪声相对于所要分辨的差异很大时,贝叶斯优化才会重复评估同一输入。
延伸阅读 #
- Rasmussen 与 Williams(2006)的第 2 章给出标准推导,兼用权重空间与函数空间两种视角,并包含本章所用的算法。
- Garnett(2023)的第 2 至 4 章从贝叶斯优化的角度阐述高斯过程,也讨论了本章视为固定的各项推断选择。
- Görtler 等人(2019)是一篇交互式的可视化入门,可与本章的图互为补充。
- Williams 与 Rasmussen(1996)将高斯过程回归引入机器学习。同样的预测方法早已在地质统计学中使用,称为克里金法(kriging)(Krige,1951;Matheron,1963)。
- Kanagawa 等人(2018)阐明了高斯过程回归与核岭回归等核方法之间的确切对应关系。
参考文献
- (2020). BoTorch: A Framework for Efficient Monte-Carlo Bayesian Optimization. Advances in Neural Information Processing Systems 33 (NeurIPS 2020). 引用于 §8.6
- (2023). Bayesian Optimization. Cambridge University Press.
- (2019). A Visual Exploration of Gaussian Processes. Distill. doi:10.23915/distill.00017.
- (2018). Gaussian Processes and Kernel Methods: A Review on Connections and Equivalences. arXiv preprint. 预印本引用于 §8.2
- (1951). A Statistical Approach to Some Basic Mine Valuation Problems on the Witwatersrand. Journal of the Southern African Institute of Mining and Metallurgy.
- (1963). Principles of Geostatistics. Economic Geology.
- (2005). A Unifying View of Sparse Approximate Gaussian Process Regression. Journal of Machine Learning Research. 引用于 §8.4
- (2007). Random Features for Large-Scale Kernel Machines. Advances in Neural Information Processing Systems 20 (NeurIPS 2007). 引用于 §8.5
- (2006). Gaussian Processes for Machine Learning. MIT Press. 引用于 §8.4
- (2009). Variational Learning of Inducing Variables in Sparse Gaussian Processes. Proceedings of the 12th International Conference on Artificial Intelligence and Statistics (AISTATS 2009). 引用于 §8.4
- (1996). Gaussian Processes for Regression. Advances in Neural Information Processing Systems 8 (NeurIPS 1995).
- (2020). Efficiently Sampling Functions from Gaussian Process Posteriors. Proceedings of the 37th International Conference on Machine Learning (ICML 2020). 引用于 §8.5