0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PyTorch教程-18.2. 高斯过程先验

jf_pJlTbmA9 来源:PyTorch 作者:PyTorch 2023-06-05 15:44 次阅读

了解高斯过程 (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()

pYYBAGR9PTSAKYoyAACD4mECYpw630.svg

如果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=log⁡J, c1=−log⁡J, 和 ci+1−ci=Δc=2log⁡JJ, 和 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()

poYBAGR9PTaABEIYAABcqru5mwI075.svg

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
    GP
    +关注

    关注

    0

    文章

    29

    浏览量

    23468
  • pytorch
    +关注

    关注

    2

    文章

    803

    浏览量

    13143
收藏 人收藏

    评论

    相关推荐

    一文了解高斯滤波器,附原理及实现过程

    `本文主要介绍了高斯滤波器的原理及其实现过程高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器
    发表于 09-04 08:00

    PyTorch如何入门

    PyTorch 入门实战(一)——Tensor
    发表于 06-01 09:58

    高斯过程回归GPR和多任务高斯过程MTGP

    使用相关方法的论文进行了简述,最后附上对两种方法的编程实现。所有内容的是从我自己的总结文档中截取的不足之处,欢迎指正。高斯过程回归高斯过程以概率分布来表示函数输出的
    发表于 06-30 06:59

    基于高斯过程回归的云计算资源调度算法

    针对现有基于强化学习的云资源调度算法收敛速度慢的问题,在详细分析云作业执行流程后,采用了一种细粒度的云计算平台模型,设计了一种基于高斯过程回归和强化学习的云计算资源调度算法。算法将资源分配问题转换
    发表于 11-02 16:50 15次下载
    基于<b class='flag-5'>高斯</b><b class='flag-5'>过程</b>回归的云计算资源调度算法

    监测时间序列数据的高斯过程建模与多步预测

    针对传感网环境监测应用采集的时间序列数据,提出了一种新的基于高斯过程模型的多步预测方法,实现了对未来时刻的环境监测数据的预测。高斯过程模型通过核函数描述数据的特性,通过对环境监测数据的
    发表于 03-08 10:12 1次下载

    高斯过程隐变量模型及相关实践

    高斯过程隐变量模型(GPLⅴM)作为一种无监督的贝叶斯非参数降维模型,无法有效利用数据所包含的语义标记信息,同时其建模过程中假设观测变量的各特征相互独立,忽略了特征之间的空间结构信息。为解决上述问题
    发表于 03-11 16:01 8次下载

    基于狄利克雷过程的可扩展高斯混合模型

    针对使用高斯混合模型的图像先验建模中分量数目难以扩展的问题,构建基于狄利克雷过程的可扩展高斯混合模型。通过聚类分量的新增及归并机制,使模型复杂度根据数据规模自适应变化,从而增强
    发表于 04-29 11:17 7次下载
    基于狄利克雷<b class='flag-5'>过程</b>的可扩展<b class='flag-5'>高斯</b>混合模型

    什么是高斯过程 神经网络高斯过程解析

    神经网络是怎么和高斯过程联系在一起的呢?Lee et al. [1] and Neal [2] 指出,随机初始化无限宽网络的参数会产生一个高斯过程,称作神经网络
    发表于 08-10 11:25 4354次阅读

    PyTorch教程18.1之高斯过程简介

    电子发烧友网站提供《PyTorch教程18.1之高斯过程简介.pdf》资料免费下载
    发表于 06-05 10:46 0次下载
    <b class='flag-5'>PyTorch</b>教程18.1之<b class='flag-5'>高斯</b><b class='flag-5'>过程</b>简介

    PyTorch教程18.2高斯过程先验

    电子发烧友网站提供《PyTorch教程18.2高斯过程先验.pdf》资料免费下载
    发表于 06-05 10:47 0次下载
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>18.2</b>之<b class='flag-5'>高斯</b><b class='flag-5'>过程</b><b class='flag-5'>先验</b>

    PyTorch教程18.3之高斯过程推理

    电子发烧友网站提供《PyTorch教程18.3之高斯过程推理.pdf》资料免费下载
    发表于 06-05 10:48 0次下载
    <b class='flag-5'>PyTorch</b>教程18.3之<b class='flag-5'>高斯</b><b class='flag-5'>过程</b>推理

    PyTorch教程-18.1. 高斯过程简介

    18.1. 高斯过程简介¶ Colab [火炬]在 Colab 中打开笔记本 Colab [mxnet] Open the notebook in Colab Colab [jax
    的头像 发表于 06-05 15:44 826次阅读
    <b class='flag-5'>PyTorch</b>教程-18.1. <b class='flag-5'>高斯</b><b class='flag-5'>过程</b>简介

    PyTorch教程-18.3。高斯过程推理

    18.3。高斯过程推理¶ Colab [火炬]在 Colab 中打开笔记本 Colab [mxnet] Open the notebook in Colab Colab [jax
    的头像 发表于 06-05 15:44 979次阅读
    <b class='flag-5'>PyTorch</b>教程-18.3。<b class='flag-5'>高斯</b><b class='flag-5'>过程</b>推理

    解读PyTorch模型训练过程

    PyTorch作为一个开源的机器学习库,以其动态计算图、易于使用的API和强大的灵活性,在深度学习领域得到了广泛的应用。本文将深入解读PyTorch模型训练的全过程,包括数据准备、模型构建、训练循环、评估与保存等关键步骤,并结合
    的头像 发表于 07-03 16:07 918次阅读

    PyTorch神经网络模型构建过程

    PyTorch,作为一个广泛使用的开源深度学习库,提供了丰富的工具和模块,帮助开发者构建、训练和部署神经网络模型。在神经网络模型中,输出层是尤为关键的部分,它负责将模型的预测结果以合适的形式输出。以下将详细解析PyTorch中神经网络输出层的特性及整个模型的构建
    的头像 发表于 07-10 14:57 439次阅读