了解高斯过程 (GP) 对于推理模型构建和泛化以及在各种应用中实现最先进的性能非常重要,包括主动学习和深度学习中的超参数调整。全科医生无处不在,了解它们是什么以及我们如何使用它们符合我们的利益。
在本节中,我们介绍高斯过程先验函数。在下一个笔记本中,我们将展示如何使用这些先验进行后验推理和做出预测。下一节可以被视为“GPs in a nutshell”,快速给出在实践中应用高斯过程所需的内容。
import numpy as np from scipy.spatial import distance_matrix from d2l import torch as d2l d2l.set_figsize()
18.2.1。定义
高斯过程被定义为随机变量的集合,其中任何有限数量的随机变量都服从联合高斯分布。如果一个函数f(x)是一个高斯过程,具有均值函数 m(x)和协方差函数或内核 k(x,x′), f(x)∼GP(m,k),然后在任何输入点集合处查询的任何函数值集合x(时间、空间位置、图像像素等),具有均值向量的联合多元高斯分布μ和协方差矩阵 K:f(x1),…,f(xn)∼N(μ,K), 在哪里 μi=E[f(xi)]=m(xi)和 Kij=Cov(f(xi),f(xj))=k(xi,xj).
这个定义看似抽象且难以理解,但高斯过程实际上是非常简单的对象。任何功能
(18.2.1)f(x)=w⊤ϕ(x)=〈w,ϕ(x)〉,
和w从高斯(正态)分布中得出,和 ϕ是基函数的任何向量,例如 ϕ(x)=(1,x,x2,...,xd)⊤, 是一个高斯过程。此外,任何高斯过程f(x)都可以表示为方程(18.2.1)的形式。让我们考虑一些具体的例子,开始熟悉高斯过程,然后我们才能体会到它们是多么简单和有用。
18.2.2。一个简单的高斯过程
认为f(x)=w0+w1x, 和 w0,w1∼N(0,1), 和w0,w1,x都在一个维度上。我们可以把这个函数等价地写成内积f(x)=(w0,w1)(1,x)⊤. 在 上面的(18.2.1)中,w=(w0,w1)⊤和 ϕ(x)=(1,x)⊤.
对于任何x,f(x)是两个高斯随机变量的总和。由于高斯在加法下是封闭的,f(x)也是任意的高斯随机变量x. 事实上,我们可以计算任何特定的x那f(x)是 N(0,1+x2). 类似地,任何函数值集合的联合分布,(f(x1),…,f(xn)), 对于任何输入集合x1,…,xn, 是多元高斯分布。所以f(x)是一个高斯过程。
简而言之,f(x)是随机函数,或函数分布。我们可以通过重复采样值来深入了解这种分布w0,w1, 并可视化相应的函数f(x),它们是具有斜率和不同截距的直线,如下所示:
def lin_func(x, n_sample): preds = np.zeros((n_sample, x.shape[0])) for ii in range(n_sample): w = np.random.normal(0, 1, 2) y = w[0] + w[1] * x preds[ii, :] = y return preds x_points = np.linspace(-5, 5, 50) outs = lin_func(x_points, 10) lw_bd = -2 * np.sqrt((1 + x_points ** 2)) up_bd = 2 * np.sqrt((1 + x_points ** 2)) d2l.plt.fill_between(x_points, lw_bd, up_bd, alpha=0.25) d2l.plt.plot(x_points, np.zeros(len(x_points)), linewidth=4, color='black') d2l.plt.plot(x_points, outs.T) d2l.plt.xlabel("x", fontsize=20) d2l.plt.ylabel("f(x)", fontsize=20) d2l.plt.show()
如果w0和w1取而代之的是 N(0,α2),你如何想象变化 α影响函数的分布?
18.2.3。从权重空间到函数空间
在上图中,我们看到了模型中参数的分布如何导致函数的分布。虽然我们经常对我们想要建模的函数有想法——无论它们是平滑的、周期性的、快速变化的,等等——但对参数进行推理是相对乏味的,这些参数在很大程度上是不可解释的。幸运的是,高斯过程提供了一种简单的机制来直接推理函数。由于高斯分布完全由其前两个矩、其均值和协方差矩阵定义,因此扩展的高斯过程由其均值函数和协方差函数定义。
在上面的例子中,均值函数
(18.2.2)m(x)=E[f(x)]=E[w0+w1x]=E[w0]+E[w1]x=0+0=0.
同样,协方差函数是
(18.2.3)k(x,x′)=Cov(f(x),f(x′))=E[f(x)f(x′)]−E[f(x)]E[f(x′)]=E[w02+w0w1x′+w1w0x+w12xx′]=1+xx′.
我们的函数分布现在可以直接指定和采样,而不需要从参数分布中采样。例如,从f(x),我们可以简单地形成与任何集合相关联的多元高斯分布 x我们想查询,并直接从中采样。我们将开始看到这个公式的优势。
首先,我们注意到上面简单直线模型的基本相同的推导可以应用于找到任何形式的模型的均值和协方差函数f(x)=w⊤ϕ(x), 和w∼N(u,S). 在这种情况下,均值函数 m(x)=u⊤ϕ(x)和协方差函数 k(x,x′)=ϕ(x)⊤Sϕ(x′). 自从ϕ(x)可以表示任何非线性基函数的向量,我们正在考虑一个非常通用的模型类,包括具有甚至无限 数量参数的模型。
18.2.4。径向基函数 (RBF) 内核
径向基函数(RBF) 核是高斯过程和一般核机最流行的协方差函数。该内核具有以下形式 kRBF(x,x′)=a2exp(−12ℓ2||x−x′||2), 在哪里a是幅度参数,并且ℓ是 长度尺度超参数。
让我们从权重空间开始推导这个内核。考虑函数
(18.2.4)f(x)=∑i=1Jwiϕi(x),wi∼N(0,σ2J),ϕi(x)=exp(−(x−ci)22ℓ2).
f(x)是径向基函数的总和,宽度为 ℓ, 以点为中心ci,如下图所示。
我们可以认出f(x)作为具有形式 w⊤ϕ(x), 在哪里w=(w1,…,wJ)⊤和 ϕ(x)是包含每个径向基函数的向量。这个高斯过程的协方差函数是
(18.2.5)k(x,x′)=σ2J∑i=1Jϕi(x)ϕi(x′).
现在让我们考虑当我们将参数(和基函数)的数量取为无穷大时会发生什么。让cJ=logJ, c1=−logJ, 和 ci+1−ci=Δc=2logJJ, 和 J→∞. 协方差函数变为黎曼和:
(18.2.6)k(x,x′)=limJ→∞σ2J∑i=1Jϕi(x)ϕi(x′)=∫c0c∞ϕc(x)ϕc(x′)dc.
通过设置c0=−∞和c∞=∞,我们将无限多的基函数分布在整条实线上,每一个距离Δc→0分开:
(18.2.7)k(x,x′)=∫−∞∞exp(−(x−c)22ℓ2)exp(−(x′−c)22ℓ2)dc=πℓσ2exp(−(x−x′)22(2ℓ)2)∝kRBF(x,x′).
值得花点时间来吸收我们在这里所做的一切。通过进入函数空间表示,我们推导出了如何使用有限的计算量来表示具有无限数量参数的模型。具有 RBF 核的高斯过程是一个通用逼近器,能够以任意精度表示任何连续函数。从上面的推导我们可以直观的看出为什么。我们可以将每个径向基函数折叠成一个点质量ℓ→0, 并给每个点质量我们想要的任何高度。
因此,具有 RBF 核的高斯过程是一个具有无限数量参数且比任何有限神经网络都更加灵活的模型。也许所有关于过度参数化神经网络的大惊小怪都是错误的。正如我们将看到的,具有 RBF 内核的 GP 不会过度拟合,并且实际上在小型数据集上提供了特别引人注目的泛化性能。此外, ( Zhang et al. , 2021 )中的示例 ,例如能够完美地拟合具有随机标签的图像,但仍然可以很好地概括结构化问题,(可以使用高斯过程完美地再现) (Wilson 和 Izmailov,2020 年) . 神经网络并不像我们想象的那么独特。
我们可以通过直接从函数分布中采样,使用 RBF 内核和超参数(例如length-scale )进一步了解高斯过程。和以前一样,这涉及一个简单的过程:
选择输入x我们要查询GP的点数: x1,…,xn.
评价m(xi),i=1,…,n, 和 k(xi,xj)为了i,j=1,…,n分别构成均值向量和协方差矩阵μ和K, 在哪里(f(x1),…,f(xn))∼N(μ,K).
从此多元高斯分布中采样以获得样本函数值。
采样更多次以可视化在这些点查询的更多示例函数。
我们在下图中说明了这个过程。
def rbfkernel(x1, x2, ls=4.): #@save dist = distance_matrix(np.expand_dims(x1, 1), np.expand_dims(x2, 1)) return np.exp(-(1. / ls / 2) * (dist ** 2)) x_points = np.linspace(0, 5, 50) meanvec = np.zeros(len(x_points)) covmat = rbfkernel(x_points,x_points, 1) prior_samples= np.random.multivariate_normal(meanvec, covmat, size=5); d2l.plt.plot(x_points, prior_samples.T, alpha=0.5) d2l.plt.show()
18.2.5。神经网络内核
机器学习中高斯过程的研究是由神经网络研究引发的。Radford Neal 一直在追求更大的贝叶斯神经网络,最终在 1994 年(后来于 1996 年发表,因为它是最臭名昭著的 NeurIPS 拒绝之一)表明这种具有无限数量隐藏单元的网络成为具有特定核函数的高斯过程(Neal , 1996 ) . 对这种推导的兴趣重新浮出水面,像神经正切核这样的想法被用来研究神经网络的泛化特性(Matthews等人,2018 年) (Novak等人,2018 年). 我们可以按如下方式推导出神经网络内核。
考虑一个神经网络函数f(x)有一个隐藏层:
(18.2.8)f(x)=b+∑i=1Jvih(x;ui).
b是一种偏见,vi是隐藏输出权重, h是任何有界隐藏单元传递函数,ui是隐藏权重的输入,并且J是隐藏单元的数量。让b和vi独立于零均值和方差σb2和σv2/J,分别让ui有独立的同分布。然后我们可以使用中心极限定理来证明任何函数值的集合f(x1),…,f(xn)具有联合多元高斯分布。
对应的高斯过程的均值和协方差函数为:
(18.2.9)m(x)=E[f(x)]=0
(18.2.10)k(x,x′)=cov[f(x),f(x′)]=E[f(x)f(x′)]=σb2+1J∑i=1Jσv2E[hi(x;ui)hi(x′;ui)]
在某些情况下,我们基本上可以以封闭形式评估此协方差函数。让 h(x;u)=erf(u0+∑j=1Pujxj), 在哪里 erf(z)=2π∫0ze−t2dt, 和u∼N(0,Σ). 然后 k(x,x′)=2πsin(2x~⊤Σx~′(1+2x~⊤Σx~)(1+2x~′⊤Σx~′)).
RBF 内核是固定的,这意味着它是平移不变的,因此可以写成以下的函数 τ=x−x′. 直观上,平稳性意味着函数的高级属性(例如变化率)不会随着我们在输入空间中的移动而改变。然而,神经网络内核是非 平稳的。下面,我们展示了来自具有此内核的高斯过程的示例函数。我们可以看到函数在原点附近看起来有质的不同。
18.2.6。概括
执行贝叶斯推理的第一步涉及指定先验。高斯过程可用于指定整体先验函数。从传统的“权重空间”建模观点出发,我们可以通过从模型的函数形式入手并引入其参数分布来推导先验函数。我们也可以直接在函数空间中指定先验分布,其属性由内核控制。函数空间方法有很多优点。我们可以构建实际上对应无限数量参数的模型,但使用有限的计算量!此外,虽然这些模型具有很大的灵活性,但它们也对先验可能的函数类型做出了强有力的假设,从而在小数据集上产生了相对较好的泛化。
函数空间中模型的假设由内核直观地控制,内核通常对函数的更高级别属性进行编码,例如平滑度和周期性。许多内核是静止的,这意味着它们是平移不变的。无论我们在输入空间的哪个位置查看,从具有固定内核的高斯过程中提取的函数具有大致相同的高级属性(例如变化率)。
高斯过程是一个比较通用的模型类,包含了很多我们已经熟悉的模型例子,包括多项式、傅里叶级数等等,只要我们对参数有一个高斯先验就可以了。它们还包括具有无限数量参数的神经网络,甚至在参数上没有高斯分布。Radford Neal 发现的这种联系促使机器学习研究人员从神经网络转向高斯过程。
18.2.7。练习
从具有 Ornstein-Uhlenbeck (OU) 核的 GP 中提取样本先验函数, kOU(x,x′)=exp(−12ℓ||x−x′|). 如果你固定长度尺度ℓ同样,这些函数与具有 RBF 内核的 GP 中的示例函数有何不同?
如何改变振幅 a2RBF 核影响函数的分布?
假设我们形成u(x)=f(x)+2g(x), 在哪里 f(x)∼GP(m1,k1)和 g(x)∼GP(m2,k2). 是u(x)一个高斯过程,如果是,它的均值和协方差函数是什么?
假设我们形成g(x)=a(x)f(x), 在哪里 f(x)∼GP(0,k)和a(x)=x2. 是 g(x)一个高斯过程,如果是,它的均值和协方差函数是什么?有什么作用a(x)?样本函数是从什么得出的g(x)看起来像?
假设我们形成u(x)=f(x)g(x), 在哪里 f(x)∼GP(m1,k1)和 g(x)∼GP(m2,k2). 是u(x)一个高斯过程,如果是,它的均值和协方差函数是什么?
Discussions
-
GP
+关注
关注
0文章
29浏览量
23468 -
pytorch
+关注
关注
2文章
803浏览量
13143
发布评论请先 登录
相关推荐
评论