函数上的分布
第 6 章 的最后几节借用了一个本书尚未构建的模型,即高斯过程。本部分从上一个完整构建的模型出发,构建高斯过程。第 5.4 节 用贝叶斯方法拟合了一条直线:在直线的两个权重上设定高斯先验,观测几个带噪声的点,得到的权重后验仍是高斯分布,并有闭式解。由此得到的每个量,包括预测、预测的不确定性以及随机抽取的合理直线,都来自对高斯分布的几行代数运算。
问题在于直线本身。贯穿全书的示例目标函数左侧是一座宽阔的山丘,右侧是一座更窄也更高的峰(第 1.2 节 );真实的目标函数,例如验证准确率或人的舒适度,也无法保证是直线。我们希望保留这套代数,舍弃直线。
本章分三步实现这一目标。第一步,为线性模型引入许多特征,使其能够弯曲,并考察在模型的先验下函数值服从什么分布。第二步,注意到这一先验仅通过一个双输入函数(即核函数)依赖于特征,于是令特征数目无限增长,直到只剩下核函数。第三步,把剩下的部分作为定义,即高斯过程:一种样本为整个函数的概率分布。本章最后从这一分布中抽取函数,并解读每种核函数选择对待求函数作出了怎样的假定。随后,第 8 章 以数据为条件更新这一先验。
7.1 从权重到函数 #
把直线写成 f ( x ) = w 1 + w 2 x f(x) = w_1 + w_2 x f ( x ) = w 1 + w 2 x :两个权重分别乘以输入的一个固定函数,即常数 1 1 1 和 x x x 本身。贝叶斯线性回归在权重向量 w \vw w 上设定高斯先验,对模型别无其他要求,因为函数关于 w \vw w 是线性的。代数运算之所以可行,靠的正是这种线性;而这一过程并不要求两个固定函数必须是 1 1 1 和 x x x 。
于是把它们换成输入的任意 M M M 个固定函数 ϕ 1 , … , ϕ M \phi_1, \dots, \phi_M ϕ 1 , … , ϕ M ,称为特征 (features)或基函数(basis functions),并保留权重:
f ( x ) = ∑ j = 1 M w j ϕ j ( x ) = ϕ ( x ) ⊤ w , w ∼ N ( 0 , Σ p ) . f(\vx) = \sum_{j=1}^{M} w_j\, \phi_j(\vx) = \boldsymbol{\phi}(\vx)^\T \vw,
\qquad
\vw \sim \N(\mathbf{0}, \mSigma_p). f ( x ) = j = 1 ∑ M w j ϕ j ( x ) = ϕ ( x ) ⊤ w , w ∼ N ( 0 , Σ p ) . (7.1)
其中 ϕ ( x ) = ( ϕ 1 ( x ) , … , ϕ M ( x ) ) ⊤ \boldsymbol{\phi}(\vx) = (\phi_1(\vx), \dots, \phi_M(\vx))^\T ϕ ( x ) = ( ϕ 1 ( x ) , … , ϕ M ( x ) ) ⊤ 由同一输入的各个特征堆叠而成,Σ p \mSigma_p Σ p 是权重的先验协方差(下标 p 表示先验,即 prior)。模型关于 w \vw w 仍是线性的,因此第 5.4 节 中的高斯计算全部适用,改变的只有特征。
特征如何选取?多项式和正弦函数都是常见的选择,本章使用鼓包。对一维输入 x x x ,第 j j j 个鼓包是以点 c j c_j c j 为中心的高斯形函数,所有鼓包的宽度同为 s s s :
ϕ j ( x ) = exp ( − ( x − c j ) 2 2 s 2 ) . \phi_j(x) = \exp\!\left(-\frac{(x - c_j)^2}{2 s^2}\right). ϕ j ( x ) = exp ( − 2 s 2 ( x − c j ) 2 ) .
鼓包的加权和在权重为正处隆起,在权重为负处下凹。只要鼓包足够多、排得足够密,加权和几乎可以构成任何光滑的形状。
7.1.1 权重上的先验就是函数上的先验 #
从先验中抽取一个权重向量,模型就成为一个特定的函数;再抽取一次,又得到另一个函数。因此,无需任何额外假设,权重上的先验就是函数上的先验。要了解这一先验的信念,最直接的方法是从中抽取样本。
从先验中抽取的函数 95% 先验区间 第一个函数的加权鼓包 −2 0 2 f(x) 特征诱导的协方差 RBF 核(极限) 0.0 0.5 1.0 k(x₀, x) 0.0 0.2 0.4 0.6 0.8 1.0 输入 x x0 6 个特征:[0, 1] 上的先验标准差从 0.28 到 1.5;与 RBF 核的最大差距 0.92 从先验中抽取的函数 95% 先验区间 第一个函数的加权鼓包 −2 0 2 f(x) 特征诱导的协方差 RBF 核(极限) 0.0 0.5 1.0 0.0 0.2 0.4 0.6 0.8 1.0 输入 x x0 6 个特征:先验标准差从 0.28 到 1.5 与 RBF 核的最大差距:0.92 图 7.1 从含六个高斯鼓包特征的线性模型中抽取的函数。每条实线对应权重的一次抽取。浅色填充的虚线鼓包是加权后的特征,相加得到紫色曲线;在鼓包几乎不重叠处,曲线沿各鼓包的顶部延伸。图下方的三角形标出鼓包中心。宽阔的阴影带覆盖每个输入处 95% 的先验概率。下方条带显示由特征诱导的 f ( x 0 ) f(x_0) f ( x 0 ) 与 f ( x ) f(x) f ( x ) 之间的协方差(式(7.3) ),以及鼓包增多时它趋近的核函数(第 7.2 节 )。按“重新抽取权重”可得到新的函数;在任一面板上点击或拖动可移动 x 0 x_0 x 0 。鼓包的数目、宽度与位置仅作示意。
先看阴影带。有六个鼓包时,阴影带在每个鼓包上方鼓起,在鼓包之间收窄:模型确信 f f f 在两个中心的中点附近接近零,唯一的理由是那里没有特征。抽取的函数也继承了这一模式:在中心上方大幅摆动,在间隙中向零下垂。没有人会这样看待目标函数。这只是特征恰好所在位置造成的假象,第 7.2 节 将消除它。
7.1.2 函数值的先验分布 #
为了精确描述先验的信念,考察函数在有限个输入 x 1 , … , x n \vx_1, \dots, \vx_n x 1 , … , x n 处的取值。将这些值堆叠成向量 f = ( f ( x 1 ) , … , f ( x n ) ) ⊤ \vf = (f(\vx_1), \dots, f(\vx_n))^\T f = ( f ( x 1 ) , … , f ( x n ) ) ⊤ ,再将这些输入的特征堆叠成 n × M n \times M n × M 矩阵 Φ \boldsymbol{\Phi} Φ ,其第 i i i 行为 ϕ ( x i ) ⊤ \boldsymbol{\phi}(\vx_i)^\T ϕ ( x i ) ⊤ 。对每个输入依次应用式(7.1) ,得到 f = Φ w \vf = \boldsymbol{\Phi}\vw f = Φ w :函数值是权重的线性映射。
推导 函数值的先验
f = Φ w \vf = \boldsymbol{\Phi}\vw f = Φ w ,且 Φ \boldsymbol{\Phi} Φ 固定不变:它由输入决定,与 w \vw w 无关。
高斯向量经线性映射后仍服从高斯分布(第 4.3 节 ),因此 f \vf f 服从高斯分布,只需求出其均值与协方差。
均值:由期望的线性性,E [ f ] = Φ E [ w ] = 0 \E[\vf] = \boldsymbol{\Phi}\,\E[\vw] = \mathbf{0} E [ f ] = Φ E [ w ] = 0 。
协方差:由于均值为零,Cov [ f ] = E [ f f ⊤ ] = E [ Φ w w ⊤ Φ ⊤ ] = Φ E [ w w ⊤ ] Φ ⊤ = Φ Σ p Φ ⊤ \Cov[\vf] = \E[\vf\vf^\T] = \E[\boldsymbol{\Phi}\vw\vw^\T\boldsymbol{\Phi}^\T]
= \boldsymbol{\Phi}\,\E[\vw\vw^\T]\,\boldsymbol{\Phi}^\T
= \boldsymbol{\Phi}\mSigma_p\boldsymbol{\Phi}^\T Cov [ f ] = E [ f f ⊤ ] = E [ Φ w w ⊤ Φ ⊤ ] = Φ E [ w w ⊤ ] Φ ⊤ = Φ Σ p Φ ⊤ ,这里再次用到线性性;又因 w \vw w 的均值为零,E [ w w ⊤ ] = Σ p \E[\vw\vw^\T] = \mSigma_p E [ w w ⊤ ] = Σ p 。
该矩阵的第 ( i , j ) (i, j) ( i , j ) 个元素为 Cov [ f ( x i ) , f ( x j ) ] = ϕ ( x i ) ⊤ Σ p ϕ ( x j ) \Cov[f(\vx_i), f(\vx_j)] = \boldsymbol{\phi}(\vx_i)^\T \mSigma_p\, \boldsymbol{\phi}(\vx_j) Cov [ f ( x i ) , f ( x j )] = ϕ ( x i ) ⊤ Σ p ϕ ( x j ) 。
因此任意 n n n 个输入处的函数值服从联合高斯分布,
f ∼ N ( 0 , Φ Σ p Φ ⊤ ) , \vf \sim \N\!\left(\mathbf{0},\; \boldsymbol{\Phi}\mSigma_p\boldsymbol{\Phi}^\T\right), f ∼ N ( 0 , Φ Σ p Φ ⊤ ) , (7.2)
协方差的每个元素都具有相同的形式:
k ( x , x ′ ) = ϕ ( x ) ⊤ Σ p ϕ ( x ′ ) . k(\vx, \vx') = \boldsymbol{\phi}(\vx)^\T \mSigma_p\, \boldsymbol{\phi}(\vx'). k ( x , x ′ ) = ϕ ( x ) ⊤ Σ p ϕ ( x ′ ) . (7.3)
本章余下的内容建立在这一结果的两个特点之上。其一,权重消失了。函数值的分布完全由 k k k 表述;这一函数以两个输入为自变量,返回函数在这两处取值的协方差。其二,输入的个数和位置都不受限制。任何有限的输入列表都对应一个联合高斯分布,而这些高斯分布都由同一个 k k k 构造。
图 7.1 下方的条带对固定的 x 0 x_0 x 0 画出 k ( x 0 , x ) k(x_0, x) k ( x 0 , x ) 随 x x x 的变化,即 f ( x 0 ) f(x_0) f ( x 0 ) 与其他各输入处取值的协方差。把 x 0 x_0 x 0 拖到某个鼓包的中心,曲线又高又窄;拖到两个中心之间,曲线随之缩小。在这一模型中,两个值的关联强度不仅取决于两者的距离,还取决于它们所在的位置。
例 7.1 直线模型的核函数
回到直线:ϕ ( x ) = ( 1 , x ) ⊤ \boldsymbol{\phi}(x) = (1, x)^\T ϕ ( x ) = ( 1 , x ) ⊤ ,两个权重相互独立,方差分别为 σ 0 2 \sigma_0^2 σ 0 2 和 σ 1 2 \sigma_1^2 σ 1 2 ,因此 Σ p = diag ( σ 0 2 , σ 1 2 ) \mSigma_p = \diag(\sigma_0^2, \sigma_1^2) Σ p = diag ( σ 0 2 , σ 1 2 ) 。由式(7.3) 得
k ( x , x ′ ) = σ 0 2 + σ 1 2 x x ′ . k(x, x') = \sigma_0^2 + \sigma_1^2\, x x'. k ( x , x ′ ) = σ 0 2 + σ 1 2 x x ′ .
x x x 处的先验方差为 k ( x , x ) = σ 0 2 + σ 1 2 x 2 k(x, x) = \sigma_0^2 + \sigma_1^2 x^2 k ( x , x ) = σ 0 2 + σ 1 2 x 2 ,随着远离 x = 0 x = 0 x = 0 按二次增长:第 5.4 节 中呈扇形展开的先验直线,如今浓缩为一个公式。取 σ 0 = σ 1 = 1 \sigma_0 = \sigma_1 = 1 σ 0 = σ 1 = 1 ,则 x = 1 x = 1 x = 1 与 x = 2 x = 2 x = 2 处取值的协方差为 3 3 3 ,方差分别为 2 2 2 和 5 5 5 ,相关系数为 3 / 10 ≈ 0.95 3/\sqrt{10} \approx 0.95 3/ 10 ≈ 0.95 。在 x = 1 x = 1 x = 1 处取值高的直线,在 x = 2 x = 2 x = 2 处几乎必然也高,因为两点确定一条直线。
同一事实也体现为协方差矩阵的缺陷。有两个特征时,Φ \boldsymbol{\Phi} Φ 只有两列,因此输入达到三个或更多时,n × n n \times n n × n 矩阵 Φ Σ p Φ ⊤ \boldsymbol{\Phi}\mSigma_p\boldsymbol{\Phi}^\T Φ Σ p Φ ⊤ 的秩至多为 2,是奇异矩阵。先验给某些取值组合赋予零方差;习题 7.1 将找出其中一个。
7.2 核函数 #
鼓包模型有两个缺陷,上面的例子刚刚指出了第二个。第一,模型的信念取决于鼓包的位置,图 7.1 中收窄的阴影带说明了这一点。第二,M M M 个特征只提供 M M M 个自由度,输入多于 M M M 个时协方差矩阵是奇异的:先验对某些取值组合确信无疑,却并无理由如此确信。两个缺陷的解决办法相同:使用更多鼓包,排得更密,直至成为连续统。
这一办法听起来代价高昂:若有一百万个特征,每个输入都要计算一百万次才能得到 ϕ ( x ) \boldsymbol{\phi}(x) ϕ ( x ) 。然而,式(7.2) 从不需要特征本身,只需要特征的内积(式(7.3) )。只要内积能直接算出,特征的数目就无关紧要。鼓包的内积确实可以写成闭式。
7.2.1 无穷多个鼓包 #
在整条实数轴上以间距 Δ \Delta Δ 均匀放置中心,各权重相互独立、方差均为 σ w 2 \sigma_w^2 σ w 2 ,于是 Σ p = σ w 2 I \mSigma_p = \sigma_w^2 \mI Σ p = σ w 2 I 。每增加一个鼓包,方差都会增加,因此间距缩小时,权重方差必须按比例缩小,否则函数会无限增大。取 σ w 2 = Δ / ( s π ) \sigma_w^2 = \Delta / (s\sqrt{\pi}) σ w 2 = Δ/ ( s π ) ,这一常数恰好使下面的结果具有单位方差。
推导 从鼓包到径向基函数核
取 Σ p = σ w 2 I \mSigma_p = \sigma_w^2\mI Σ p = σ w 2 I ,中心 c j = j Δ c_j = j\Delta c j = j Δ ,则内积(式(7.3) )是对所有鼓包求和:k ( x , x ′ ) = Δ s π ∑ j ϕ j ( x ) ϕ j ( x ′ ) . k(x, x') = \frac{\Delta}{s\sqrt{\pi}} \sum_{j} \phi_j(x)\,\phi_j(x'). k ( x , x ′ ) = s π Δ j ∑ ϕ j ( x ) ϕ j ( x ′ ) .
在间距为 Δ \Delta Δ 的点上对函数值求和再乘以 Δ \Delta Δ ,即为 Riemann 和。Δ → 0 \Delta \to 0 Δ → 0 时,它化为对中心 c c c 的积分。记 ϕ c \phi_c ϕ c 为以 c c c 为中心的鼓包,则k ( x , x ′ ) = 1 s π ∫ − ∞ ∞ ϕ c ( x ) ϕ c ( x ′ ) d c . k(x, x') = \frac{1}{s\sqrt{\pi}} \int_{-\infty}^{\infty} \phi_c(x)\,\phi_c(x')\, \dd c. k ( x , x ′ ) = s π 1 ∫ − ∞ ∞ ϕ c ( x ) ϕ c ( x ′ ) d c .
两个鼓包之积是一个指数函数,指数为 − [ ( x − c ) 2 + ( x ′ − c ) 2 ] / 2 s 2 -\left[(x - c)^2 + (x' - c)^2\right]/2s^2 − [ ( x − c ) 2 + ( x ′ − c ) 2 ] /2 s 2 。对 c c c 配方:令 m = ( x + x ′ ) / 2 m = (x + x')/2 m = ( x + x ′ ) /2 ,展开两边即可验证 ( x − c ) 2 + ( x ′ − c ) 2 = 2 ( c − m ) 2 + ( x − x ′ ) 2 / 2 (x - c)^2 + (x' - c)^2 = 2(c - m)^2 + (x - x')^2/2 ( x − c ) 2 + ( x ′ − c ) 2 = 2 ( c − m ) 2 + ( x − x ′ ) 2 /2 。因此 ϕ c ( x ) ϕ c ( x ′ ) = e − ( x − x ′ ) 2 / 4 s 2 e − ( c − m ) 2 / s 2 \phi_c(x)\,\phi_c(x') = e^{-(x - x')^2/4s^2}\, e^{-(c - m)^2/s^2} ϕ c ( x ) ϕ c ( x ′ ) = e − ( x − x ′ ) 2 /4 s 2 e − ( c − m ) 2 / s 2 。
第一个因子不含 c c c ,可以提到积分之外:k ( x , x ′ ) = e − ( x − x ′ ) 2 / 4 s 2 I / ( s π ) k(x, x') = e^{-(x - x')^2/4s^2}\, I / (s\sqrt{\pi}) k ( x , x ′ ) = e − ( x − x ′ ) 2 /4 s 2 I / ( s π ) ,其中 I = ∫ e − ( c − m ) 2 / s 2 d c I = \int e^{-(c - m)^2/s^2}\, \dd c I = ∫ e − ( c − m ) 2 / s 2 d c 。
I I I 的被积函数是关于 c c c 、方差为 s 2 / 2 s^2/2 s 2 /2 的未归一化高斯密度,因此 I I I 就是该密度的归一化常数 2 π ⋅ s 2 / 2 = s π \sqrt{2\pi \cdot s^2/2} = s\sqrt{\pi} 2 π ⋅ s 2 /2 = s π (第 4.1 节 )。
因子 s π s\sqrt{\pi} s π 相互抵消,剩下 k ( x , x ′ ) = exp ( − ( x − x ′ ) 2 / 4 s 2 ) k(x, x') = \exp\!\left(-(x - x')^2 / 4s^2\right) k ( x , x ′ ) = exp ( − ( x − x ′ ) 2 /4 s 2 ) 。
第 3 步用到一个事实:两个高斯鼓包之积仍是高斯鼓包;一般规则见第 B.4 节 。记 ℓ = 2 s \ell = \sqrt{2}\,s ℓ = 2 s ,再把每个权重方差都乘以常数 σ f 2 \sigma_f^2 σ f 2 ,k k k 也随之乘以 σ f 2 \sigma_f^2 σ f 2 。结果为
k ( x , x ′ ) = σ f 2 exp ( − ( x − x ′ ) 2 2 ℓ 2 ) . k(x, x') = \sigma_f^2 \exp\!\left(-\frac{(x - x')^2}{2\ell^2}\right). k ( x , x ′ ) = σ f 2 exp ( − 2 ℓ 2 ( x − x ′ ) 2 ) . (7.4)
这就是径向基函数(RBF)核 (radial basis function kernel),也称平方指数核(squared exponential kernel),第 8 章 使用的正是这一核函数。径向基函数核支持向量机以同一公式作为相似度度量;这种分类器的核宽度在第 22 章 中用贝叶斯优化调节。这是一个标准构造(Rasmussen 与 Williams,2006 ,第 4.2.1 节) 。若输入有多个坐标,在每个方向上都放置鼓包,会得到同样的公式,只是 ( x − x ′ ) 2 (x - x')^2 ( x − x ′ ) 2 换成平方距离 ∥ x − x ′ ∥ 2 \lVert \vx - \vx' \rVert^2 ∥ x − x ′ ∥ 2 。
整个特征模型最终只剩下两个数。长度尺度 (lengthscale)ℓ \ell ℓ 表示两个输入相距多远时,其取值才变得几乎无关:核函数在距离 ℓ \ell ℓ 处降到峰值的 0.61 0.61 0.61 ,在 2 ℓ 2\ell 2 ℓ 处降到 0.14 0.14 0.14 ,在 3 ℓ 3\ell 3 ℓ 处降到 0.011 0.011 0.011 。幅度 (amplitude)σ f \sigma_f σ f 表示函数取值的大小:k ( x , x ) = σ f 2 k(x, x) = \sigma_f^2 k ( x , x ) = σ f 2 是 f f f 在任一输入处的先验方差。σ f = 1 \sigma_f = 1 σ f = 1 的核函数称为具有单位幅度,第 8 章 的大部分内容采用这一设定。
下图仍是图 7.1 中的模型,只是特征数目可以调节。读数给出在所有输入上,鼓包诱导的协方差与极限(式(7.4) )之间的最大差距。
从先验中抽取的函数 95% 先验区间 −2 0 2 f(x) 特征诱导的协方差 RBF 核(极限) 0.0 0.5 1.0 k(x₀, x) 0.0 0.2 0.4 0.6 0.8 1.0 输入 x x0 8 个特征:[0, 1] 上的先验标准差从 0.64 到 1.3;与 RBF 核的最大差距 0.59 从先验中抽取的函数 95% 先验区间 −2 0 2 f(x) 特征诱导的协方差 RBF 核(极限) 0.0 0.5 1.0 0.0 0.2 0.4 0.6 0.8 1.0 输入 x x0 8 个特征:先验标准差从 0.64 到 1.3 与 RBF 核的最大差距:0.59 图 7.2 亲手取极限。条带比较 M M M 个鼓包诱导的协方差(实线)与径向基函数核(式(7.4) ,虚线)。将特征数从 4 逐步增加到 16,再到 ∞;取 ∞ 时去掉特征,直接从核函数中采样。调节长度尺度可以看到,鼓包越窄,需要的数目越多。
下面几个实验展示极限的逼近过程。
从 4 个特征开始 。阴影带时而鼓起、时而收窄;把 x 0 x_0 x 0 拖过一个鼓包时,条带中的实线随之变形。与径向基函数核的差距和核函数本身相当,甚至更大。
逐步增加到 16 个 。到 12 个特征时,阴影带已几乎平坦,差距约为 0.1;到 16 个时,差距低于 0.01,函数看上去与 ∞ 处抽取的函数无异,而 ∞ 处根本没有特征。
把长度尺度缩短到 0.05 。鼓包变窄,16 个已不够用,阴影带重新出现收窄。所需鼓包的数目大致等于定义域宽度除以单个鼓包的宽度。
最后一个实验说明了实践中为什么要直接使用核函数。在 [ 0 , 1 ] [0, 1] [ 0 , 1 ] 上取 ℓ = 0.1 \ell = 0.1 ℓ = 0.1 ,几十个鼓包就已足够。但输入为 d d d 维时,鼓包必须铺满 d d d 维网格,数目是每个轴上鼓包数的 d d d 次方:10 维中每个轴 16 个鼓包,就是 16 10 ≈ 10 12 16^{10} \approx 10^{12} 1 6 10 ≈ 1 0 12 个特征。而核函数(式(7.4) )无论维度多高,对每一对输入只需 d d d 次减法和一次指数运算。
用直接计算内积的函数代替显式的特征列表,称为核技巧 (kernel trick)(Rasmussen 与 Williams,2006 ,第 2.1.2 节) 。核技巧贯穿本书余下的部分。第 8.1 节 将表明,基于数据的预测同样只需要核函数,别无其他。
7.2.2 哪些函数可以作为核函数 #
不再写出特征之后,就需要知道哪些函数 k k k 可以充当协方差。必要条件有两个。其一,函数必须对称,即 k ( x , x ′ ) = k ( x ′ , x ) k(\vx, \vx') = k(\vx', \vx) k ( x , x ′ ) = k ( x ′ , x ) ,因为协方差是对称的。其二,对每个有限输入集和每个系数向量 a \mathbf{a} a ,
∑ i = 1 n ∑ j = 1 n a i a j k ( x i , x j ) ≥ 0 , \sum_{i=1}^n \sum_{j=1}^n a_i a_j\, k(\vx_i, \vx_j) \ge 0, i = 1 ∑ n j = 1 ∑ n a i a j k ( x i , x j ) ≥ 0 ,
因为左边是加权和 ∑ i a i f ( x i ) \sum_i a_i f(\vx_i) ∑ i a i f ( x i ) 的方差,而方差不可能为负。具有这一性质的矩阵是半正定的(第 3.3 节 );若一个函数生成的矩阵都具有这一性质,就称之为半正定核 (positive semidefinite kernel)。
特征的任何内积都能通过这一检验,因为对协方差矩阵 Σ p \mSigma_p Σ p 有 a ⊤ Φ Σ p Φ ⊤ a = ( Φ ⊤ a ) ⊤ Σ p ( Φ ⊤ a ) ≥ 0 \mathbf{a}^\T\boldsymbol{\Phi}\mSigma_p\boldsymbol{\Phi}^\T\mathbf{a}
= (\boldsymbol{\Phi}^\T\mathbf{a})^\T\mSigma_p(\boldsymbol{\Phi}^\T\mathbf{a}) \ge 0 a ⊤ Φ Σ p Φ ⊤ a = ( Φ ⊤ a ) ⊤ Σ p ( Φ ⊤ a ) ≥ 0 。反过来的结论使直接设计核函数成为可能:在温和的技术条件下,每个对称半正定核都是某个特征列表(特征可能有无穷多个)的内积,这一结果称为 Mercer 定理(Rasmussen 与 Williams,2006 ,第 2.2 节与第 4.3 节) ;第 10.3 节 给出该定理的完整条件,并用核函数的特征函数构造这些特征。因此,只要一个函数通过这一检验,就可以直接采用,而无需写出它的特征。
这一检验并非可有可无。看似合理的相似度也可能无法通过。所谓“sigmoid”核 tanh ( a + b x ⊤ x ′ ) \tanh(a + b\,\vx^\T\vx') tanh ( a + b x ⊤ x ′ ) ,有时借神经网络的类比提出,但它从来都不是正定的,因而不是有效的协方差(Rasmussen 与 Williams,2006 ,第 4.2.3 节) 。习题 7.2 给出一个更简单的反例并说明其含义:某个函数值组合的方差为负。
注 神经网络的极限情形
鼓包并无特殊之处。Neal(1996) 证明,具有单隐藏层和随机权重的神经网络,在隐藏单元数目增长时也会成为高斯过程,前提是输出权重的先验方差按比例缩小。在这一构造中,隐藏单元本身是随机的,高斯极限来自中心极限定理,而非高斯权重(Rasmussen 与 Williams,2006 ,第 4.2.3 节) 。多条路径通向同一个对象,这也是直接从其本身出发定义它的一个理由。
第 7.2 节引用的文献 2 Rasmussen 与 Williams(2006) Gaussian Processes for Machine LearningNeal(1996) Bayesian Learning for Neural Networks
7.3 高斯过程的定义 #
前几节得到了函数 k k k ,以及一个论断:仅凭它就能确定函数在任意有限个输入处取值的联合高斯分布。若把这一论断作为出发点而非推论,它就成了定义。
定义 7.1 高斯过程
设 X \X X 为输入集合。X \X X 上的高斯过程 (Gaussian process)是一族随机变量 f ( x ) f(\vx) f ( x ) ,每个 x ∈ X \vx \in \X x ∈ X 对应一个,其中任意有限个服从联合高斯分布(Rasmussen 与 Williams,2006 ,定义 2.1) 。高斯过程由均值函数 (mean function)m ( x ) = E [ f ( x ) ] m(\vx) = \E[f(\vx)] m ( x ) = E [ f ( x )] 和协方差函数 (covariance function,即核函数)k ( x , x ′ ) = Cov [ f ( x ) , f ( x ′ ) ] k(\vx, \vx') = \Cov[f(\vx), f(\vx')] k ( x , x ′ ) = Cov [ f ( x ) , f ( x ′ )] 确定,记作 f ∼ G P ( m , k ) f \sim \GP(m, k) f ∼ G P ( m , k ) 。对任意输入 x 1 , … , x n \vx_1, \dots, \vx_n x 1 , … , x n ,
[ f ( x 1 ) ⋮ f ( x n ) ] ∼ N ( m , K ) , \begin{bmatrix} f(\vx_1) \\ \vdots \\ f(\vx_n) \end{bmatrix}
\sim \N(\mathbf{m}, \mK), f ( x 1 ) ⋮ f ( x n ) ∼ N ( m , K ) , (7.5)
其中 m i = m ( x i ) m_i = m(\vx_i) m i = m ( x i ) ,[ K ] i j = k ( x i , x j ) [\mK]_{ij} = k(\vx_i, \vx_j) [ K ] ij = k ( x i , x j ) 。
软件工程师可以把这一定义理解为接口。高斯过程是这样一个对象:接受任意有限的输入列表,返回均值向量和协方差矩阵,两者都由 m m m 和 k k k 逐元素算出。它无需一次性给出函数在所有输入处的值,本书中也没有任何计算提出这样的要求。在这个意义上,高斯过程是惰性求值的随机函数:处处有定义,只在查看之处才具体生成。
不同查询的结果必须彼此一致。同时查询 x 1 \vx_1 x 1 和 x 2 \vx_2 x 2 并忽略第二个值,所得 f ( x 1 ) f(\vx_1) f ( x 1 ) 的分布必须与单独查询 x 1 \vx_1 x 1 的结果相同。对高斯分布,忽略某些坐标就是取出均值向量和协方差矩阵的相应子块(第 4.4 节 )。K \mK K 的每个元素只取决于对应的两个输入,因此这一子块恰好等于较小查询构造出的矩阵。凡是由核函数逐元素指定的协方差,一致性都自动成立(Rasmussen 与 Williams,2006 ,第 2.2 节) 。
均值函数 是获得任何数据之前的猜测:逐个输入地给出 f f f 应处的位置。在贝叶斯优化中,观测值标准化为均值为零、离散程度为一之后(第 8.6 节 ),均值函数几乎总是取零或常数。这一假设比听起来要弱。结合核函数的幅度,它只是表明:在任何评估之前,f ( x ) f(\vx) f ( x ) 在每个输入处都位于零附近约 ± 2 σ f \pm 2\sigma_f ± 2 σ f 的范围内;凡是数据与之不符之处,数据都会推动后验。确实掌握某种趋势时,非常数的均值函数很有用,例如以物理模型为均值,由高斯过程学习它的误差。除非另有说明,本书其余部分都取 m = 0 m = 0 m = 0 。
核函数 (kernel)承载其余的一切:不同输入处的值在多大程度上共同变化,并由此决定函数的光滑程度、曲折程度和取值大小。核函数必须对称且半正定(第 7.2.2 节 ),此外别无要求。例 7.1 的直线核和径向基函数核(式(7.4) )都满足条件。
有两个词容易混淆。高斯分布 描述固定长度的向量。高斯过程 描述函数,即以输入为索引的一族随机变量,其任何有限切片都服从高斯分布。以某个集合为索引的随机变量族统称为随机过程,该集合称为指标集;在本书中,指标集总是待优化的定义域。对整个函数的一次抽取称为一条样本路径,简称样本。
要点 两个函数确定先验
高斯过程先验由均值函数(预期 f f f 所在的位置)和核函数(不同输入处的值如何共同变化)确定。每次计算都只在有限个输入处查询这两个函数,处理的是普通的高斯向量。
第 7.3 节引用的文献 1 Rasmussen 与 Williams(2006) Gaussian Processes for Machine Learning
7.4 抽取函数 #
计算机无法抽取完整的函数,但可以在精细的输入网格上抽取函数值并依次连接,在屏幕上效果相同。由式(7.5) ,这些值构成均值为 m \mathbf{m} m 、协方差为 K \mK K 的高斯向量,因此可以用高斯向量的采样方法(第 4.3 节 )抽取:由 Cholesky 分解得到 K = L L ⊤ \mK = \mL\mL^\T K = L L ⊤ (第 3.5 节 ),抽取由独立标准正态数构成的向量 z \vz z ,返回 m + L z \mathbf{m} + \mL\vz m + Lz 。结果的协方差为 L E [ z z ⊤ ] L ⊤ = L L ⊤ = K \mL\,\E[\vz\vz^\T]\,\mL^\T = \mL\mL^\T = \mK L E [ z z ⊤ ] L ⊤ = L L ⊤ = K ,符合要求。
算法 7.1 从高斯过程先验中抽取函数
输入:均值函数 m m m 、核函数 k k k 、网格 x 1 , … , x N x_1, \dots, x_N x 1 , … , x N 、样本数 S S S 。
构造 m i = m ( x i ) m_i = m(x_i) m i = m ( x i ) 和 [ K ] i j = k ( x i , x j ) [\mK]_{ij} = k(x_i, x_j) [ K ] ij = k ( x i , x j ) 。
L ← cholesky ( K + ε I ) \mL \leftarrow \operatorname{cholesky}(\mK + \varepsilon\mI) L ← cholesky ( K + ε I ) ,其中 ε \varepsilon ε 为很小的抖动项,例如 10 − 8 σ f 2 10^{-8}\sigma_f^2 1 0 − 8 σ f 2 。
对 s = 1 , … , S s = 1, \dots, S s = 1 , … , S :抽取 z ( s ) ∼ N ( 0 , I ) \vz^{(s)} \sim \N(\mathbf{0}, \mI) z ( s ) ∼ N ( 0 , I ) ,令 f ( s ) ← m + L z ( s ) \vf^{(s)} \leftarrow \mathbf{m} + \mL\vz^{(s)} f ( s ) ← m + L z ( s ) 。
把每个 f ( s ) \vf^{(s)} f ( s ) 对网格作图。
第 2 步中的抖动项即第 3.4.4 节 中介绍的抖动项:精细网格上的核矩阵近乎奇异。抖动项给每个样本带来的扰动为 ε \sqrt{\varepsilon} ε 量级,远低于图上可分辨的程度。分解需要 O ( N 3 ) O(N^3) O ( N 3 ) 的时间,只需做一次;此后每个样本的代价为 O ( N 2 ) O(N^2) O ( N 2 ) 。
代码实现 NumPy
import numpy as np
def rbf (a, b, ell=0.1 , sf=1.0 ):
return sf**2 * np.exp(-0.5 * (a[:, None ] - b[None , :]) ** 2 / ell**2 )
xs = np.linspace(0 , 1 , 200 )
K = rbf(xs, xs)
L = np.linalg.cholesky(K + 1e-8 * np.eye(len (xs)))
rng = np.random.default_rng(0 )
F = L @ rng.standard_normal((len (xs), 3 ))
以 xs 为横轴画出 F 的各列,即得到与下图类似的图像。
下图在 201 个网格点上运行算法 7.1 。改变核函数时,三个标准正态向量 z \vz z 保持不变,因此每次改变都只是让同样的三个函数变形,而非抽取新的函数。
从先验中抽取的函数 95% 先验区间(±1.96 σf ) −4 −2 0 2 4 f(x) x0 0.0 0.5 1.0 相关 0.0 0.2 0.4 0.6 0.8 1.0 输入 x f(x) 与 f(x₀) 的相关系数 [0, 1] 上向上穿零的次数:期望 1.6 次;这三个样本中为 1、2、2 从先验中抽取的函数 95% 先验区间(±1.96 σf ) −4 −2 0 2 4 f(x) x0 0.0 0.5 1.0 0.0 0.2 0.4 0.6 0.8 1.0 输入 x f(x) 与 f(x₀) 的相关系数 [0, 1] 上向上穿零的次数: 期望 1.6 次;样本中为 1、2、2 图 7.3 从零均值高斯过程先验中抽取的三个函数。可以调节核函数、长度尺度、幅度,以及周期(仅对周期核);同一组标准正态随机数反复使用,因此每次调节都是让同样的三个函数变形。阴影带覆盖每个输入处 95% 的先验概率。条带显示 f ( x ) f(x) f ( x ) 与 f ( x 0 ) f(x_0) f ( x 0 ) 的相关系数;在图上点击或拖动可移动 x 0 x_0 x 0 。读数将 [ 0 , 1 ] [0, 1] [ 0 , 1 ] 上向上穿零的期望次数(式(7.6) )与三个样本中的实际次数相比较。
每个控件都值得花一分钟尝试。
把长度尺度从 0.3 拖到 0.03 。三个函数像手风琴一样沿水平方向压缩。读数中的期望穿零次数与 1 / ℓ 1/\ell 1/ ℓ 成正比增长,样本中的实际次数分布在其附近。
拖动幅度 。函数沿竖直方向伸缩,其余一切不变:形状不变,穿零次数不变,相关条带也不变。核函数乘以 σ f 2 \sigma_f^2 σ f 2 ,相当于 L \mL L 乘以 σ f \sigma_f σ f ,仅此而已。
从“RBF”切换到“Matérn 5/2”,再切换到“Matérn 1/2” ,保持长度尺度不变。这两种核函数抽出的函数比径向基函数核的更粗糙,其定义见第 7.5.3 节 。Matérn 5/2 的样本除纹理稍粗外,与径向基函数核的样本很难区分。Matérn 1/2 的样本在任何尺度上都呈锯齿状,读数也不再给出穿零次数的期望值。
选择“周期核” 。每个函数都以周期为单位严格重复,相关条带在 x 0 ± p x_0 \pm p x 0 ± p 处回到 1。若原先的长度尺度低于 0.4,切换时会跳到 0.8,因为这一核函数的长度尺度是相对于周期度量的(第 7.5.4 节 )。
移动 x 0 x_0 x 0 。在条带接近 1 处,每个函数在 x 0 x_0 x 0 附近的值都随其在 x 0 x_0 x 0 处的值(圆点标出)变化。在条带降到零处,两个值互不相关。
7.5 核函数表达的信念 #
图 7.3 中的每个控件,都代表在任何评估之前对未知函数的一项陈述。核函数自身的参数,即长度尺度、幅度和周期,是第 5.6 节 意义上的超参数:它们是先验的设定,有别于模型所关注的函数值。第 9 章 将用数据拟合这些超参数。本节逐一解读它们的含义。
7.5.1 平稳性 #
径向基函数核只通过两个输入之差 x − x ′ x - x' x − x ′ 依赖于这两个输入。具有这一性质的核函数是平稳 (stationary)的:把每个输入平移相同的量,先验保持不变,因此先验在定义域各处看起来都一样。平稳核可以写成单个自变量即差值 r = x − x ′ r = x - x' r = x − x ′ 的函数,方便时记作 k ( r ) k(r) k ( r ) 。图 7.3 中的四个核函数都是平稳的,所以阴影带宽度恒定。图 7.1 的六鼓包模型不是平稳的,因为鼓包中心使某些输入变得特殊。例 7.1 的直线核 σ 0 2 + σ 1 2 x x ′ \sigma_0^2 + \sigma_1^2 x x' σ 0 2 + σ 1 2 x x ′ 也不是平稳的,其方差随着远离零而增长。
平稳核是贝叶斯优化中的默认选择。第 8.2 节 将展示由此带来的一个后果:远离所有数据时,后验在各处都回到同一个先验。
7.5.2 长度尺度与幅度 #
对平稳核而言,长度尺度本质上是一种频率。随机过程理论中有一个经典结果,给出零均值平稳高斯过程在单位长度区间上向上穿过零点的期望次数(Rasmussen 与 Williams,2006 ,第 4.1 节) :
E [ N 0 ] = 1 2 π − k ′ ′ ( 0 ) k ( 0 ) , \E[N_0] = \frac{1}{2\pi}\sqrt{\frac{-k''(0)}{k(0)}}, E [ N 0 ] = 2 π 1 k ( 0 ) − k ′′ ( 0 ) , (7.6)
其中 k ′ ′ ( 0 ) k''(0) k ′′ ( 0 ) 是 k ( r ) k(r) k ( r ) 在 r = 0 r = 0 r = 0 处的二阶导数。这一公式只用到核函数在零距离处的曲率,即两个相邻的值彼此分开时相关性下降的快慢。对径向基函数核,k ( r ) = σ f 2 exp ( − r 2 / 2 ℓ 2 ) k(r) = \sigma_f^2 \exp(-r^2/2\ell^2) k ( r ) = σ f 2 exp ( − r 2 /2 ℓ 2 ) 满足 k ′ ′ ( 0 ) = − σ f 2 / ℓ 2 k''(0) = -\sigma_f^2/\ell^2 k ′′ ( 0 ) = − σ f 2 / ℓ 2 ,因此
E [ N 0 ] = 1 2 π ℓ . \E[N_0] = \frac{1}{2\pi\ell}. E [ N 0 ] = 2 π ℓ 1 .
取 ℓ = 0.1 \ell = 0.1 ℓ = 0.1 ,一个样本在 [ 0 , 1 ] [0, 1] [ 0 , 1 ] 上平均向上穿过零点 1.6 次;取 ℓ = 0.03 \ell = 0.03 ℓ = 0.03 ,则为 5.3 次。幅度在公式中相互约去,与图 7.3 中拖动幅度的实验结果一致。
长度尺度以输入的单位度量。若时间以毫秒而非秒为单位,合适的长度尺度就变为原来的一千倍。因此第 8.6 节 建议在拟合之前把每个输入都缩放到 [ 0 , 1 ] [0, 1] [ 0 , 1 ] ,这样长度尺度 0.1 在任何问题中含义都相同。若输入的多个坐标重要程度不同,每个坐标可以有各自的长度尺度(第 9.2 节 )。
即使输入已经缩放,同一长度尺度在不同维度下的含义也不相同。第 3.1.2 节 表明,从单位立方体 [ 0 , 1 ] d [0, 1]^d [ 0 , 1 ] d 中随机抽取的两个输入,典型距离为 d / 6 \sqrt{d/6} d /6 :1 维中约为 0.41 0.41 0.41 ,6 维中约为 1.0 1.0 1.0 ,50 维中约为 2.9 2.9 2.9 。取 ℓ = 0.2 \ell = 0.2 ℓ = 0.2 ,径向基函数核在这一距离上的值 exp ( − ( d / 6 ) / 2 ℓ 2 ) \exp(-(d/6)/2\ell^2) exp ( − ( d /6 ) /2 ℓ 2 ) 在 1 维中为 0.12 0.12 0.12 ,在 6 维中为 4 × 10 − 6 4 \times 10^{-6} 4 × 1 0 − 6 ,在 50 维中低于 10 − 45 10^{-45} 1 0 − 45 。可见在 6 维中,这一先验已把两个随机输入处的值视为互不相关,每个观测只能为自身周围的一小片邻域提供信息;图 6.3 从信息的角度展示的正是这一现象。让长度尺度随 d \sqrt{d} d 缩放,此处即 ℓ = 0.2 d \ell = 0.2\sqrt{d} ℓ = 0.2 d ,就能在任何维度下都把这一相关性保持在 0.12 0.12 0.12 。2024 年的研究表明,只要长度尺度先验随维度缩放,标准贝叶斯优化在高维中也能表现良好(Hvarfner 等,2024 ) ;上面的算术为理解这种缩放为何有效提供了一个角度(推断)。第 9.5 节 和第 30.1 节 讲述了这段经过。
幅度较为简单。k ( x , x ) = σ f 2 k(x, x) = \sigma_f^2 k ( x , x ) = σ f 2 是 f f f 在每个输入处的先验方差,因此在获得任何数据之前,模型以 95% 的概率认为 f ( x ) f(x) f ( x ) 位于均值的 ± 1.96 σ f \pm 1.96\,\sigma_f ± 1.96 σ f 范围内。高斯过程乘以常数 c c c ,其核函数就乘以 c 2 c^2 c 2 (习题 7.3 ),所以改变幅度只会拉伸样本。输出经过标准化时,幅度自然以 1 附近为起点。软件库常把幅度存为单独的“输出尺度”(output scale)超参数,乘在单位幅度的核函数上。
易错点 单位不匹配的长度尺度
假设输入的取值范围是 [ 0 , 1000 ] [0, 1000] [ 0 , 1000 ] ,而长度尺度仍取 1 附近的默认值。在这一先验下,相距几个单位的值就几乎相互独立:距离为 3 时,径向基函数核的值为 0.011 0.011 0.011 。后验用窄尖峰拟合每个观测,几个单位之外就回到先验均值,以此为基础的优化器几乎是在随机探索。应当缩放输入,或根据每个输入的取值范围设定长度尺度。
7.5.3 光滑度 #
长度尺度描述函数变化的快慢,光滑度描述函数在最小尺度上的粗糙程度,两者相互独立:函数可以缓慢地起伏,近看却仍呈锯齿状,就像从飞机上看到的海岸线。光滑度由核函数在零距离附近的行为决定。若 k ( r ) k(r) k ( r ) 在 r = 0 r = 0 r = 0 处光滑,相邻输入处的值几乎完全相关,样本就是光滑的。若 k ( r ) k(r) k ( r ) 在 r = 0 r = 0 r = 0 处有尖角,相邻的值很快失去相关性,样本就是粗糙的。
径向基函数核在零处无穷次可微,其样本具有任意阶导数(指均方意义下,即随机过程理论采用的意义)(Rasmussen 与 Williams,2006 ,第 4.2.1 节) 。这是很强的假设。Matérn 族 (Matérn family)用光滑度参数 ν \nu ν 放宽了这一假设;Stein(1999) 依据 Matérn 早先的工作为其命名。当且仅当 ν > q \nu > q ν > q 时,Matérn 族的样本 q q q 次可微(Rasmussen 与 Williams,2006 ,第 4.2.1 节) 。实践中取半整数,此时核函数是指数函数与多项式之积。最粗糙的 ν = 1 / 2 \nu = 1/2 ν = 1/2 为
k ( r ) = σ f 2 exp ( − ∣ r ∣ ℓ ) . k(r) = \sigma_f^2 \exp\!\left(-\frac{|r|}{\ell}\right). k ( r ) = σ f 2 exp ( − ℓ ∣ r ∣ ) .
该核函数在 r = 0 r = 0 r = 0 处的尖角使样本连续但处处不可微。这些样本是 Ornstein-Uhlenbeck 过程的路径;该过程最初是为受随机碰撞冲击的粒子速度建立的模型(Rasmussen 与 Williams,2006 ,第 4.2.1 节) 。ν = 3 / 2 \nu = 3/2 ν = 3/2 给出一次可微的样本,ν = 5 / 2 \nu = 5/2 ν = 5/2 给出二次可微的样本;当 ν → ∞ \nu \to \infty ν → ∞ 时,Matérn 核成为径向基函数核。整个族的表达式见第 9.1 节 。
式(7.6) 需要 k ′ ′ ( 0 ) k''(0) k ′′ ( 0 ) ,而 Matérn 1/2 核不存在这一二阶导数。其样本穿过零点的期望次数不是有限的:样本只要穿过零点一次,就会在附近穿过无穷多次(Rasmussen 与 Williams,2006 ,第 4.1 节) 。因此,图 7.3 中的读数对该核函数不给出期望值,报告的计数也取决于网格的精细程度。
假定何种光滑度,是一项实质性的建模选择。Stein(1999) 认为,径向基函数核假定的光滑度对许多物理过程并不现实,并推荐改用 Matérn 类(Rasmussen 与 Williams,2006 ,第 4.2.1 节) 。针对贝叶斯优化,Snoek 等人(2012) 提出了同样的论点:径向基函数核的样本“对实际的优化问题来说光滑得不现实”(are unrealistically smooth for practical optimization problems)。他们提出使用 Matérn 5/2,其样本二次可微,与拟 Newton 法的假设相符;拟 Newton 法是一类根据梯度在相邻步之间的变化估计二阶导数的优化器。他们还检验了这一选择:为一个结构化支持向量机调节三个超参数,该模型用于在蛋白质 DNA 序列(约 40,000 条)中寻找基序;对几种核函数各重复优化 100 次,发现核函数的选择“显著影响性能”,径向基函数核关于无穷次可微的假设“对这个问题限制过强”(Snoek 等,2012 ) 。另一方面,仅凭有限且带噪声的数据,ν \nu ν 大于 5/2 的各个取值很难彼此区分,也很难与径向基函数核区分;这也是 3/2 与 5/2 成为最常见取值的一个原因(Rasmussen 与 Williams,2006 ,第 4.2.1 节) 。
7.5.4 周期性 #
有些目标函数具有重复性,例如角度、一天中的时刻、色轮上的色相。周期核 (periodic kernel)把这种重复写进先验,
k ( x , x ′ ) = σ f 2 exp ( − 2 sin 2 ( π ∣ x − x ′ ∣ / p ) ℓ 2 ) , k(x, x') = \sigma_f^2 \exp\!\left(-\frac{2\sin^2\!\left(\pi |x - x'| / p\right)}{\ell^2}\right), k ( x , x ′ ) = σ f 2 exp ( − ℓ 2 2 sin 2 ( π ∣ x − x ′ ∣/ p ) ) , (7.7)
其中 p p p 为周期。这一公式可以由下面的构造得到。把每个输入映射到圆上,u ( x ) = ( cos ( 2 π x / p ) , sin ( 2 π x / p ) ) \mathbf{u}(x) = \left(\cos(2\pi x/p),\, \sin(2\pi x/p)\right) u ( x ) = ( cos ( 2 π x / p ) , sin ( 2 π x / p ) ) ,再对映射后的点应用径向基函数核。两个映射点之间的平方距离为 4 sin 2 ( π ( x − x ′ ) / p ) 4\sin^2(\pi(x - x')/p) 4 sin 2 ( π ( x − x ′ ) / p ) ,代入径向基函数核的公式即得式(7.7) (Rasmussen 与 Williams,2006 ,第 4.2.3 节) 。恰好相距一个周期的输入落在圆上的同一点,其取值的相关系数为 1,因此每个样本都严格重复。
由于径向基函数核作用在圆上,周期核的长度尺度 ℓ \ell ℓ 相对于圆度量,而不以 x x x 的单位度量。在零距离附近,周期核的行为近似于长度尺度为 p ℓ / ( 2 π ) p\ell/(2\pi) p ℓ / ( 2 π ) 的径向基函数核,因此由式(7.6) 得每单位长度 1 / ( p ℓ ) 1/(p\ell) 1/ ( p ℓ ) 次向上穿零。正因如此,切换到这一核函数时图 7.3 会调整长度尺度。第 19 章 中的颜色偏好图使用周期核,因为色相首尾相接。
7.5.5 平稳核的局限 #
核函数本身就是很强的陈述,有些信念无法用上述核函数表达。平稳核无法表达延续到数据之外的趋势,因为远离数据时,其后验回到先验均值(第 8.6 节 )。平稳核也无法表达突变,例如超过某个设定值后训练就会发散,因为其样本是连续的;Matérn 1/2 的样本虽然粗糙,也没有跳跃。单一的长度尺度同样无法表达在一个区域平坦、在另一区域曲折的函数。这些因素重要时,实践中会把核函数相加或相乘(第 9.1 节 ),像周期核那样先变换输入再应用核函数,或者改用非平稳模型。
此外,先验在贝叶斯优化中比在大多数回归问题中更重要。用数千个点拟合的模型主要由数据塑造。而对 10 维函数只能承担 20 次评估的优化器,几乎处处没有数据,它在几乎所有位置的信念都由先验决定。因此接下来两章用大量篇幅讨论核函数:第 8 章 说明先验与数据如何结合,第 9 章 说明如何由数据选择超参数。
要点 核函数就是先验
选择核函数及其超参数,就是在任何评估之前对目标函数作出陈述。长度尺度决定一个观测的影响延伸多远,幅度决定函数取值的大小,核函数的形式决定每个样本的光滑程度以及是否具有周期性。
第 7.5 节引用的文献 4 Rasmussen 与 Williams(2006) Gaussian Processes for Machine LearningHvarfner 等人(2024) Vanilla Bayesian Optimization Performs Great in High DimensionsStein(1999) Interpolation of Spatial Data: Some Theory for KrigingSnoek 等人(2012) Practical Bayesian Optimization of Machine Learning Algorithms
7.6 习题 #
习题 7.1
取直线特征 ϕ ( x ) = ( 1 , x ) ⊤ \boldsymbol{\phi}(x) = (1, x)^\T ϕ ( x ) = ( 1 , x ) ⊤ ,Σ p = diag ( σ 0 2 , σ 1 2 ) \mSigma_p = \diag(\sigma_0^2, \sigma_1^2) Σ p = diag ( σ 0 2 , σ 1 2 ) ,与例 7.1 相同。(a)写出 ( f ( 0 ) , f ( 1 ) , f ( 2 ) ) (f(0), f(1), f(2)) ( f ( 0 ) , f ( 1 ) , f ( 2 )) 的协方差矩阵 K \mK K 。(b)找出满足 K a = 0 \mK\mathbf{a} = \mathbf{0} Ka = 0 的非零向量 a \mathbf{a} a ,并说明 Var [ a ⊤ f ] = 0 \Var[\mathbf{a}^\T\vf] = 0 Var [ a ⊤ f ] = 0 对先验可能抽出的每条直线意味着什么。
解答
(a)由 k ( x , x ′ ) = σ 0 2 + σ 1 2 x x ′ k(x, x') = \sigma_0^2 + \sigma_1^2 x x' k ( x , x ′ ) = σ 0 2 + σ 1 2 x x ′ ,
K = [ σ 0 2 σ 0 2 σ 0 2 σ 0 2 σ 0 2 + σ 1 2 σ 0 2 + 2 σ 1 2 σ 0 2 σ 0 2 + 2 σ 1 2 σ 0 2 + 4 σ 1 2 ] . \mK = \begin{bmatrix}
\sigma_0^2 & \sigma_0^2 & \sigma_0^2 \\
\sigma_0^2 & \sigma_0^2 + \sigma_1^2 & \sigma_0^2 + 2\sigma_1^2 \\
\sigma_0^2 & \sigma_0^2 + 2\sigma_1^2 & \sigma_0^2 + 4\sigma_1^2
\end{bmatrix}. K = σ 0 2 σ 0 2 σ 0 2 σ 0 2 σ 0 2 + σ 1 2 σ 0 2 + 2 σ 1 2 σ 0 2 σ 0 2 + 2 σ 1 2 σ 0 2 + 4 σ 1 2 .
(b)取 a = ( 1 , − 2 , 1 ) ⊤ \mathbf{a} = (1, -2, 1)^\T a = ( 1 , − 2 , 1 ) ⊤ 。K a \mK\mathbf{a} Ka 的每一行都为零:σ 0 2 \sigma_0^2 σ 0 2 项之和为 σ 0 2 ( 1 − 2 + 1 ) = 0 \sigma_0^2(1 - 2 + 1) = 0 σ 0 2 ( 1 − 2 + 1 ) = 0 ,第二、三行中的 σ 1 2 \sigma_1^2 σ 1 2 项分别为 σ 1 2 ( − 2 + 2 ) = 0 \sigma_1^2(-2 + 2) = 0 σ 1 2 ( − 2 + 2 ) = 0 和 σ 1 2 ( − 4 + 4 ) = 0 \sigma_1^2(-4 + 4) = 0 σ 1 2 ( − 4 + 4 ) = 0 。所以 Var [ f ( 0 ) − 2 f ( 1 ) + f ( 2 ) ] = a ⊤ K a = 0 \Var[f(0) - 2f(1) + f(2)] = \mathbf{a}^\T\mK\mathbf{a} = 0 Var [ f ( 0 ) − 2 f ( 1 ) + f ( 2 )] = a ⊤ Ka = 0 :从这一先验中抽出的每条直线都严格满足 f ( 0 ) − 2 f ( 1 ) + f ( 2 ) = 0 f(0) - 2f(1) + f(2) = 0 f ( 0 ) − 2 f ( 1 ) + f ( 2 ) = 0 ,因为直线的二阶差分为零。先验确信 f f f 不会弯曲。有两个特征时,任意三个值都满足一个这样的精确约束,这正是例 7.1 中指出的秩亏。
习题 7.2
第 3.3.3 节 断言,“箱形”相似度(∣ x − x ′ ∣ < 1 |x - x'| < 1 ∣ x − x ′ ∣ < 1 时 k ( x , x ′ ) = 1 k(x, x') = 1 k ( x , x ′ ) = 1 ,否则为 0 0 0 )不是有效的核函数。按照这一相似度,相距小于 1 的值完全相关,相距更远的值相互独立。用输入 0 , 0.9 , 1.8 0, 0.9, 1.8 0 , 0.9 , 1.8 和系数 a = ( 1 , − 1 , 1 ) ⊤ \mathbf{a} = (1, -1, 1)^\T a = ( 1 , − 1 , 1 ) ⊤ 证明这一断言,并用文字解释其中的矛盾。
解答
矩阵为 K = [ 1 1 0 1 1 1 0 1 1 ] \mK = \begin{bmatrix} 1 & 1 & 0 \\ 1 & 1 & 1 \\ 0 & 1 & 1 \end{bmatrix} K = 1 1 0 1 1 1 0 1 1 ,所以 K a = ( 0 , 1 , 0 ) ⊤ \mK\mathbf{a} = (0, 1, 0)^\T Ka = ( 0 , 1 , 0 ) ⊤ ,a ⊤ K a = − 1 \mathbf{a}^\T\mK\mathbf{a} = -1 a ⊤ Ka = − 1 。组合 f ( 0 ) − f ( 0.9 ) + f ( 1.8 ) f(0) - f(0.9) + f(1.8) f ( 0 ) − f ( 0.9 ) + f ( 1.8 ) 的方差将为 − 1 -1 − 1 ,而任何随机量的方差都不可能如此。用文字表述:方差相等的两个值若相关系数为 1,就必然相等,因此 f ( 0 ) = f ( 0.9 ) f(0) = f(0.9) f ( 0 ) = f ( 0.9 ) 且 f ( 0.9 ) = f ( 1.8 ) f(0.9) = f(1.8) f ( 0.9 ) = f ( 1.8 ) ,从而 f ( 0 ) = f ( 1.8 ) f(0) = f(1.8) f ( 0 ) = f ( 1.8 ) ,与两者相互独立矛盾。协方差不能逐对选取,必须整体一致,半正定性就是检验的标准。
习题 7.3
(a)设 f ∼ G P ( 0 , k ) f \sim \GP(0, k) f ∼ G P ( 0 , k ) ,c c c 为常数。证明 c f ∼ G P ( 0 , c 2 k ) c f \sim \GP(0, c^2 k) c f ∼ G P ( 0 , c 2 k ) 。(b)设 f 1 ∼ G P ( 0 , k 1 ) f_1 \sim \GP(0, k_1) f 1 ∼ G P ( 0 , k 1 ) 与 f 2 ∼ G P ( 0 , k 2 ) f_2 \sim \GP(0, k_2) f 2 ∼ G P ( 0 , k 2 ) 相互独立。证明 f 1 + f 2 ∼ G P ( 0 , k 1 + k 2 ) f_1 + f_2 \sim \GP(0, k_1 + k_2) f 1 + f 2 ∼ G P ( 0 , k 1 + k 2 ) 。(c)若 k 1 k_1 k 1 和 k 2 k_2 k 2 如式(7.3) 那样由特征导出,k 1 + k 2 k_1 + k_2 k 1 + k 2 对应什么模型?
解答
根据高斯过程的定义(定义 7.1 ),只需对每个有限输入集验证。(a)在输入 x 1 , … , x n \vx_1, \dots, \vx_n x 1 , … , x n 处,c f cf c f 的取值是服从 N ( 0 , K ) \N(\mathbf{0}, \mK) N ( 0 , K ) 的向量的 c c c 倍。高斯向量经线性映射仍服从高斯分布(第 4.3 节 ),此处为 N ( 0 , c 2 K ) \N(\mathbf{0}, c^2\mK) N ( 0 , c 2 K ) ,其元素为 c 2 k ( x i , x j ) c^2 k(\vx_i, \vx_j) c 2 k ( x i , x j ) 。(b)f 1 + f 2 f_1 + f_2 f 1 + f 2 的取值是两个独立向量之和,两者分别服从 N ( 0 , K 1 ) \N(\mathbf{0}, \mK_1) N ( 0 , K 1 ) 与 N ( 0 , K 2 ) \N(\mathbf{0}, \mK_2) N ( 0 , K 2 ) ,其和服从 N ( 0 , K 1 + K 2 ) \N(\mathbf{0}, \mK_1 + \mK_2) N ( 0 , K 1 + K 2 ) (第 4.6 节 )。(c)对应的线性模型以两个特征列表的拼接为特征,两部分的权重相互独立。其权重协方差是分块对角的,式(7.3) 随之拆分为两个内积之和。核函数相加就是合并特征;第 9.1 节 利用这一点,为同时具有多种结构的函数构造核函数。
习题 7.4
单位幅度的 Matérn 5/2 核为 k ( r ) = ( 1 + 5 ∣ r ∣ / ℓ + 5 r 2 / ( 3 ℓ 2 ) ) exp ( − 5 ∣ r ∣ / ℓ ) k(r) = \left(1 + \sqrt{5}|r|/\ell + 5r^2/(3\ell^2)\right)\exp\!\left(-\sqrt{5}|r|/\ell\right) k ( r ) = ( 1 + 5 ∣ r ∣/ ℓ + 5 r 2 / ( 3 ℓ 2 ) ) exp ( − 5 ∣ r ∣/ ℓ ) 。将其在 0 0 0 附近关于 r r r 展开到二阶,并用式(7.6) 求出 [ 0 , 1 ] [0, 1] [ 0 , 1 ] 上向上穿零的期望次数。与相同 ℓ \ell ℓ 下的径向基函数核比较,并用图 7.3 中的读数验证结果。
解答
记 a = 5 / ℓ a = \sqrt{5}/\ell a = 5 / ℓ ,取 r ≥ 0 r \ge 0 r ≥ 0 。则 e − a r = 1 − a r + a 2 r 2 / 2 + O ( r 3 ) e^{-ar} = 1 - ar + a^2r^2/2 + O(r^3) e − a r = 1 − a r + a 2 r 2 /2 + O ( r 3 ) ,乘以 1 + a r + a 2 r 2 / 3 1 + ar + a^2r^2/3 1 + a r + a 2 r 2 /3 后,常数项为 1,一次项为 a r − a r = 0 ar - ar = 0 a r − a r = 0 ,二次项为 a 2 r 2 ( 1 / 3 − 1 + 1 / 2 ) = − a 2 r 2 / 6 a^2r^2(1/3 - 1 + 1/2) = -a^2r^2/6 a 2 r 2 ( 1/3 − 1 + 1/2 ) = − a 2 r 2 /6 。所以 k ( r ) = 1 − 5 r 2 / ( 6 ℓ 2 ) + O ( r 3 ) k(r) = 1 - 5r^2/(6\ell^2) + O(r^3) k ( r ) = 1 − 5 r 2 / ( 6 ℓ 2 ) + O ( r 3 ) ,k ′ ′ ( 0 ) = − 5 / ( 3 ℓ 2 ) k''(0) = -5/(3\ell^2) k ′′ ( 0 ) = − 5/ ( 3 ℓ 2 ) 。由式(7.6) 得 E [ N 0 ] = 5 / 3 / ( 2 π ℓ ) ≈ 1.29 / ( 2 π ℓ ) \E[N_0] = \sqrt{5/3}/(2\pi\ell) \approx 1.29/(2\pi\ell) E [ N 0 ] = 5/3 / ( 2 π ℓ ) ≈ 1.29/ ( 2 π ℓ ) ,穿零次数比相同长度尺度下的径向基函数核多约 29%。ℓ = 0.1 \ell = 0.1 ℓ = 0.1 时,两者分别为 2.05 和 1.59,与读数一致。可见同一个 ℓ \ell ℓ 在不同核函数族中对应的曲折程度并不相同;要公平比较,需要做类似的换算,或者使用由数据拟合的超参数(第 9.3 节 )。
延伸阅读 #
参考文献
Garnett, R. (2023) . Bayesian Optimization . Cambridge University Press .
Görtler, J., Kehlbeck, R., and Deussen, O. (2019) . A Visual Exploration of Gaussian Processes . Distill . doi:10.23915/distill.00017 .
Hvarfner, C., Hellsten, E. O., and Nardi, L. (2024) . Vanilla Bayesian Optimization Performs Great in High Dimensions . International Conference on Machine Learning . 引用于 §7.5
Neal, R. M. (1996) . Bayesian Learning for Neural Networks . Springer . 引用于 §7.2
Rasmussen, C. E., and Williams, C. K. I. (2006) . Gaussian Processes for Machine Learning . MIT Press . 引用于 §7.2 §7.3 §7.5
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) . 引用于 §7.5
Stein, M. L. (1999) . Interpolation of Spatial Data: Some Theory for Kriging . Springer . 引用于 §7.5