AlphaGo Zero用它来调参?【高斯过程】到底有何过人之处?

简介:

高斯过程可能不是当前机器学习最火的研究方向,但仍然在很多前沿的研究中被使用到——例如,最近在AlphaGo Zero中自动调整MCTS超参数就使用了它。在建模能力和进行不确定性估计方面,它们具有非常高的易用性。

然而,高斯过程很难掌握,尤其是当你习惯了深度学习中其他常见的模型之后。所以本文希望在具备相当少的ML知识背景下,对高斯过程提供一个直观的理论介绍,请学习者下载notebook并实现本文中提到的所有代码。

Jupyter notebook 版本:

https://gist.github.com/Bridgo/429594942ff51037ecc703905e40c562

什么是高斯过程,为什么使用它?

高斯过程(Gaussian process, GP)是一个强大的模型,可以用来表示函数的分布。机器学习中的大多数现代技术都倾向于通过参数化函数,然后对这些参数(例如线性回归中的权重)进行建模来避免这种情况。

然而,GP是直接对函数建模的非参模型。这种方法带来的一个非常重要的好处是:不仅可以拟合任何黑箱函数,还可以拟合我们的不确定性。量化不确定性是非常有价值的——例如,如果允许我们随意探索(需要更多的数据),我们就可以选择尽可能高效地探索最不确定的领域。这是贝叶斯优化背后的主要思想。

如果你给我几张猫和狗的照片作为学习资料,然后给我一张新的猫的照片让我分类——我应该给出一个置信度相当高的预测。但是如果你给我一张鸵鸟的照片,强迫我判断它是猫还是狗——我最好还是给出一个置信度非常低的预测。

——Yarin Gal

对于这个介绍,我们将考虑一个没有噪声的简单回归模型设置(但GP可以扩展到多维和噪声数据):

  • 假设我们需要拟合某个隐函数f:R—> R
  • 已知数据X = [x1,…,xN]T,Y = [y1,…,yN]T,其中yi = f(xi)
  • 我们要预测一些新的未观测点x*的函数值

使用高斯拟合函数

GP背后的关键思想是可以使用无限维多元高斯分布拟合函数。换句话说,输入空间中的每个点与一个随机变量相关联,并将多元高斯分布用来拟合这些点的联合分布。

那么,这究竟意味着什么呢?让我们从一个更简单的情况开始:一个二维高斯。已知:

9232f3c0a8e4cb2aa2b10fe83705533e5d8d0e40

通常它是高度表示概率密度的3D钟形曲线。但是,假如不是表示整个分布,我们只需要从分布中抽样。然后我们将得到两个值,我们可以绘制点d并在它们之间画一条线。

36cd590a1ac254f99d2b582a3ea208440f543125

观察图中的这些直线,看起来像我们仅仅抽取了10个线性函数样本……如果我们现在使用20维的高斯函数,依次连接每个样本点,会发生什么样的变化呢?

a988acbd71b59e4ab2dc7bc85e8f0adf0d6e2d87

这些绝对看起来像多个函数,但相对于我们的目的,它们看起来噪声太大所以不可用。让我们进一步考虑可以从这些样本中得到什么,以及如何改变分布从而获得更好的样本……

多元高斯有两个参数,即均值和协方差矩阵。如果我们改变了均值的话,我们只会改变整体趋势(即如果均值是上升的整数,如np.arange(D),那么样本会呈现出整体正向线性趋势),但是仍然会出现锯齿形的噪声形状。出于这个原因,我们将GP的均值设置为0——它们实际上已经足够强大,可以在不改变均值的情况下拟合各种函数。

相反,我们需要一些平滑的概念:即如果两个输入点彼此邻近,那么我们期望这些点的函数值是相似的。就我们的模型而言,对用于相邻点的随机变量在它们的联合分布(即高斯协方差)下采样时应该具有相似的值。

这些点的协方差被定义为高斯的协方差矩阵。假设我们有N维高斯模型y0,…yN,协方差矩阵Σ是N╳N维且它的第(i,j)个元素是Σij = cov(yi,yj)。换句话说,Σ是对称的而且存储着所有随机变量的联合模型的成对协方差

用核技巧进行平滑处理

那么如何定义我们的协方差函数呢?这时大量关于核的文献可以派上用场。我们将选择平方指数核(最简单的形式)来达到我们的目的,定义如下:

34fd9a418cf945e491da89cfaf2b83fd8cf70afe

当x = x’时,函数值(我们刚刚绘制的)为1并且随着点的不同而趋于0

a4317fe59913a678ce5a2cea968def8d114c0637

我们可以绘制这个核函数来展示它在x = x’时是最大的,然后随着两个输入的不同开始平滑的下降

bab928976202b47f5f640a74e8b5373fac4302f4

因此,为了得到我们想要的那种平滑性,我们将考虑在xi和xj处绘制两个随机变量yi和yj,来得到它们的协方差cov(yi,yj) = k(xi,xj) ——它们越接近,它们的协方差越高。

使用上面的核函数我们可以得到k(xs,xs)这个矩阵。现在我们试着从20维高斯中抽取另外10个样本,但是这次使用新的协方差矩阵。当我们这样做时,我们可以得到:

ad3a582e453e8b8d3de924eaa751a341cb04556f

现在我们有了一些开始看起来像一个(有用的)函数分布。而且我们可以看到,随着维数趋于无穷大,我们不再需要连接这些点,因为我们可以为每一个可能的输入指定一个点。

让我们使用更多维度,并在更大范围的输入中查看他的外形:

b05a795340a07eab841f0eb497116f22864a52ad

用先验和观测进行预测

现在我们有了函数的分布,我们如何通过训练数据拟合隐函数从而进行预测?

首先,我们需要获取训练数据。 这可以通过构造我们的秘密函数f来生成数据。 

目标函数

本教程中我们使用一个五次多项式

a34634b5927d34820ae19cdd2f819fd476334a91

我选择它是因为这个函数有个漂亮的波浪图形。当然,我们也可以用其它的函数。 

858c260240bfacbc75aca30cf65b4cfc9fa77216

数学推导

现在我们已经进入高斯过程的核心了。这需要更多的数学知识,不过不用担心,我们只需要巩固已有的知识就行,然后用一个小技巧在观测数据上决定我们的联合概率分布:

到目前为止,我们已知能够用多元正态分布来模拟p(y|x)了。

71a754bbfabc66eb22fa7071e3d6b3f75f03a6af

其中,640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=这是一个先验分布,它表示在没有任何观测数据的情况下,640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=出现时,640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=出现的概率。

现在,我们有了训练集,其训练得到的模型输入为640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=,输出640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=。当有新样本640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=时,其预测值为640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

77e9d2df64253d71175d5493ae8340034124b2e7

回顾之前高斯过程的定义,我们将拟合gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAgif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAA的联合概率分布。

2dcc3fe6cc663a4abaebae659550658fd39ce677

其中640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=和前面一样,我们将均值设为0.

但是,这是在拟合640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=,而我们仅需要640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=的分布。

条件多元高斯

与其从头开始计算640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=的分布,我们可以使用标准结果。如果我们有了前面提到过的640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=的联合概率分布,而要得到640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=的条件概率分布,可以用如下的公式:

979a4887abb2b5776229f8dbd0fce40ccc8665c6

现在我们就可以用先验分布和观测数据计算640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy的后验分布了!

注意:下面给的代码在实际过程中并没有用到,因为K通常处于较差条件,所以它的逆通常不准确。在本教程第二部分中我们将给出一个更好的方法。

a1d14c005b7ae76293cd55a5a00436d1178c16df

这就是上面公式的代码实现! 现在就可以用这两个参数从条件概率分布中采样了。我们将它们与真实函数(虚线)画在一起对比。因为我们用的是高斯过程,它包含有不确定性信息,这种不确定性信息以随机变量的方差形式表示出来。我们知道第i个随机变量的方差为∑*ii,换句话说,方差就是∑*的对角线值。下图中的样本包含了标准方差为±2的不确定性。

2f1c58713d6a699d57a9707163b83cabe4f8df9e

接下来讲什么?高斯过程回归和噪声数据处理

实际上,我们需要做更多的工作才能得到更好的预测结果。你可能已经注意到核中包含两个参数-σ和l。如果你在采样过程中试着改变这两个参数,你会发现σ影响纵坐标的变化而l影响横坐标的范围。

因此,我们需要改变它们来反映我们对隐函数的先验置信度。譬如,如果我们希望隐函数有更大的输出范围(一个我们感兴趣的范围),那么我们需要相应的增加640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=的值(试着将隐函数返回的值放大100倍,看会出现什么,然后将sigma设置为100再看)。事实上,任何用到核的函数,我们都可以通过改变核得到一个完全不一样的函数(例如,周期函数)。

核的选择需要人工进行,但参数可以通过最小化损失函数来自动优化。这就是高斯过程回归的内容。

最后,我们需要考虑怎么处理含有噪声的数据,例如,在实际过程中我们可能无法获得符合隐函数的标准数据。在这种情况下我们需要将这种不确定性纳入模型中以获得更好的泛化能力。


原文发布时间为:2018-01-17

本文作者:文摘菌

本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“大数据文摘”微信公众号

相关文章
|
2月前
|
机器学习/深度学习 自然语言处理 算法
【模式识别】探秘判别奥秘:Fisher线性判别算法的解密与实战
【模式识别】探秘判别奥秘:Fisher线性判别算法的解密与实战
65 0
|
5天前
|
机器学习/深度学习 存储 人工智能
一阶优化算法启发,北大林宙辰团队提出具有万有逼近性质的神经网络架构的设计方法
【4月更文挑战第19天】北京大学林宙辰团队在深度学习领域取得突破,提出基于一阶优化算法的神经网络设计方法,构建具有万有逼近性质的模型,提升训练速度和泛化能力。该方法利用一阶导数信息,高效处理大规模问题。虽然面临非光滑优化和收敛速度挑战,但团队通过正则化和自适应学习率等策略进行改进,相关研究在多个标准数据集上表现出色。
10 1
|
9月前
|
算法
基于模态凝聚算法的特征系统实现算法的自然激励技术(Matlab代码实现)
基于模态凝聚算法的特征系统实现算法的自然激励技术(Matlab代码实现)
|
4月前
|
机器学习/深度学习 算法 关系型数据库
PyTorch深度强化学习中蒙特卡洛策略梯度法在短走廊环境(CartPole-v0)中的实战(超详细 附源码)
PyTorch深度强化学习中蒙特卡洛策略梯度法在短走廊环境(CartPole-v0)中的实战(超详细 附源码)
26 0
|
4月前
|
机器学习/深度学习 人工智能 算法
极智AI | 谈谈非线性激活函数的量化方式
本文主要聊一聊深度学习模型量化中对激活函数的处理方式。
58 0
|
6月前
|
人工智能 算法
Facebook出手!自适应梯度打败人工调参
Facebook出手!自适应梯度打败人工调参
|
8月前
|
算法 计算机视觉
【图像去噪】基于进化算法——自组织迁移算法(SOMA)的图像去噪研究(Matlab代码实现)
【图像去噪】基于进化算法——自组织迁移算法(SOMA)的图像去噪研究(Matlab代码实现)
|
8月前
|
机器学习/深度学习 数据采集 算法
乳腺癌预测的黑科技!一起探索 R 语言和随机森林算法的奇妙之处!
本文旨在综述R语言和随机森林算法在乳腺癌研究中的应用,探讨其在乳腺癌预测、诊断和个性化治疗中的作用。通过对相关文献和实例的分析,该研究将提供关于使用R语言和随机森林算法改进乳腺癌研究的新见解,并对未来的发展方向和挑战进行讨论。
134 0
|
11月前
|
机器学习/深度学习 算法
瞎聊机器学习——朴素贝叶斯以及拉普拉斯平滑
瞎聊机器学习——朴素贝叶斯以及拉普拉斯平滑
|
11月前
|
算法 数据挖掘 Python
AIGC背后的技术分析 | K均值聚类算法Python实现
本篇介绍K均值聚类算法实现。
133 0