高斯核函数参数确定_高斯过程

之前看过高斯过程(GP),不过当时也没太看懂,最近花时间认真研究了一下,感觉总算是明白咋回事了,本文基于回归问题解释GP模型的思想和方法。文中的想法是自己思考总结得来,并不一定准确,也可能存在错误性。

为什么要用GP?

回顾一下我们之前在解决回归问题时,就拿线性回归举例,我们为了学习映射函数,总是把函数参数化,例如假设

equation?tex=f%28%5Cmathbf+x%29+%3D+%5Cmathbf+w%5E%7B%5Crm+T%7D%5Cmathbf+x,然后计算参数
equation?tex=%5Cmathbf+w的后验分布,把参数估计出来之后,就得到了我们想要学习的函数,接着就可以用这个函数去做预测了。

但是有时候我们并不知道数据到底用什么形式的函数去拟合比较好(是1次的,2次的还是10次的?)。这个时候高斯过程(GP)就闪亮登场了,GP说:“我不需要用参数去刻画函数,你就告诉我训练数据是什么,你想要预测哪些数据,我就能给你预测出结果。“这样一来,我们就省去了去选择刻画函数参数的这样一个过程。

GP是怎么来的?

那么GP是怎么做到的呢?我们先来看这样一件有趣的事情:

假设我们的函数定义域和值域都是

equation?tex=%5Cmathbf+R,那么如果你的训练集是包含了所有定义域的,那么这个函数
equation?tex=%5Cmathbf+f%5E%2A我们就得到了,你给任何一个点,我都能通过查表的方式告诉你结果是多少。第二种情况我们的训练集中缺少了
equation?tex=%5C%7B1%2C2%2C3%2C4%5C%7D这四个点,并且这四个点就是我们需要进行预测的点,如果我们可以通过某种方式建立一个4维的概率分布
equation?tex=p%28%5Cmathbf%7Bf1%2Cf2%2Cf3%2Cf4%7D%29,其中
equation?tex=%28%5Cmathbf+%7Bf1%2Cf2%2Cf3%2Cf4%7D%29分别代表
equation?tex=%5C%7B1%2C2%2C3%2C4%5C%7D的预测值,那么我们是不是就可以就可以利用这个概率分布,找到对应的概率最高的点把最终的结果给估计出来。

然而,事实上虽然很多实际问题(比如房价的预测),它的定义域和值域都是

equation?tex=%5Cmathbf+R(或者是某个连续的区间),但是我们的训练数据是有限的,而基于这些训练数据,我们要对整个实数域进行预测,如果我们继续利用上面的思想的话,我们需要建立一个无穷维度的概率分布(因为我们需要进行预测的数据点事无穷个的),这显然不可能,不过庆幸的是,在每一次我们需要进行预测的时候,我们所需要进行预测的数据是有限的。假设有N个训练数据
equation?tex=%28%5Cmathbf+X%2C%5Cmathbf+Y%29,有N*个需要进行预测的数据
equation?tex=%5Cmathbf+X%5E%2A,
equation?tex=%5Cmathbf+X_0表示
equation?tex=%28%5Cmathbf+X%2C%5Cmathbf+X%5E%2A%29,那么我们最终其实就是希望得到
equation?tex=p%28%5Cmathbf+f%5E%2A%29(
equation?tex=%5Cmathbf+f%5E%2A代表了
equation?tex=%5Cmathbf+X%5E%2A所有预测值的变量的集合)。

高斯过程(GP)

下面我们就开始正式的介绍高斯过程(GP),它是怎么得到这个

equation?tex=p%28%5Cmathbf+f%5E%2A%29,然后去做预测的。在GP中,首先基于训练数据和测试数据,定义了基于定义域
equation?tex=%5Cmathbf+X_0的函数的概率分布

equation?tex=+++p%28%5Cmathbf+f_0%7C%7B%5Cmathbf+X%7D_0%29+%3D+%5Cmathcal+N%28%5Cmathbf+f_0%7C%5Cboldsymbol%5Cmu_0%2C%5Cmathbf+K_0%29%29

其中

equation?tex=+++%5Cboldsymbol%5Cmu_0+%3D+m%28%5Cmathbf+X_0%29%2C%5B%5Cmathbf+K_0%5D_%7Bi%2Cj%7D+%3D+%5Ckappa%28%5B%5Cmathbf+X_0%5D_i%2C%5B%5Cmathbf+X_0%5D_j%29
equation?tex=%5Ckappa是正定的核函数。
equation?tex=%5Cmathbf+f_0代表了
equation?tex=%5Cmathbf+X_0所有预测值的变量的集合。这里有一个关键的思想,如果核函数认为两个输入是非常相似的,那么函数给出的输出值也会非常的相似。(在这样的刻画中,我们发现
equation?tex=%5Cboldsymbol%5Cmu_0其实好像并没有太大的作用,事实上,我们通常令
equation?tex=m%28%5Cmathbf+x%29+%3D+0)。这个定义总体给出了三个信息:
  1. 在本次训练中,我们的定义域是
    equation?tex=%5Cmathbf+X_0
  2. 在这个定义域中,如果
    equation?tex=%5Cmathbf+x_i%2C%5Cmathbf+x_j基于核函数是非常接近的,那么你们的输出值也会非常接近。
  3. 我们是用高斯分布去进行刻画(用高斯的好处,至少有一点条件概率密度函数很好算)。

我们把上面的概率分布展开:

equation?tex=%5Cleft%28%5Cbegin%7Barray%7D%7Bl%7D+%7B%5Cmathbf%7Bf%7D%7D+%5C%5C+%7B%5Cmathbf%7Bf%7D_%7B%2A%7D%7D+%5Cend%7Barray%7D%5Cright%29+%5Csim+%5Cmathcal%7BN%7D%5Cleft%28%5Cleft%28%5Cbegin%7Barray%7D%7Bl%7D+%7B%5Cboldsymbol%7B%5Cmu%7D%7D+%5C%5C+%7B%5Cboldsymbol%7B%5Cmu%7D_%7B%2A%7D%7D+%5Cend%7Barray%7D%5Cright%29%2C%5Cleft%28%5Cbegin%7Barray%7D%7Bll%7D+%7B%5Cmathbf%7BK%7D%7D+%26+%7B%5Cmathbf%7BK%7D_%7B%2A%7D%7D+%5C%5C+%7B%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D%7D+%26+%7B%5Cmathbf%7BK%7D_%7B%2A+%2A%7D%7D+%5Cend%7Barray%7D%5Cright%29%5Cright%29

其中

equation?tex=%5Cmathbf%7BK%7D%3D%5Ckappa%28%5Cmathbf%7BX%7D%2C+%5Cmathbf%7BX%7D%29+%5Ctext+%7B+is+%7D+N+%5Ctimes+N%2C+%5Cmathbf%7BK%7D_%7B%2A%7D%3D%5Ckappa%5Cleft%28%5Cmathbf%7BX%7D%2C+%5Cmathbf%7BX%7D_%7B%2A%7D%5Cright%29+%5Ctext+%7B+is+%7D+N+%5Ctimes+N_%7B%2A%7D%2C+%5Ctext+%7B+and+%7D+%5Cmathbf%7BK%7D_%7B%2A+%2A%7D%3D%5Ckappa%5Cleft%28%5Cmathbf%7BX%7D_%7B%2A%7D%2C+%5Cmathbf%7BX%7D_%7B%2A%7D%5Cright%29+%5Ctext+%7B+is+%7D+N_%7B%2A%7D+%5Ctimes+N_%7B%2A%7D

利用高斯分布的性质(通过联合分布计算条件分布),我们可以得到

equation?tex=%5Cbegin%7Baligned%7D+p%5Cleft%28%5Cmathbf%7Bf%7D_%7B%2A%7D+%7C+%5Cmathbf%7BX%7D_%7B%2A%7D%2C+%5Cmathbf%7BX%7D%2C+%5Cmathbf%7Bf%7D%5Cright%29+%26%3D%5Cmathcal%7BN%7D%5Cleft%28%5Cmathbf%7Bf%7D_%7B%2A%7D+%7C+%5Cboldsymbol%7B%5Cmu%7D_%7B%2A%7D%2C+%5Cmathbf%7B%5CSigma%7D_%7B%2A%7D%5Cright%29+%5C%5C+%5Cboldsymbol%7B%5Cmu%7D_%7B%2A%7D+%26%3D%5Cboldsymbol%7B%5Cmu%7D%5Cleft%28%5Cmathbf%7BX%7D_%7B%2A%7D%5Cright%29%2B%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D+%5Cmathbf%7BK%7D%5E%7B-1%7D%28%5Cmathbf%7Bf%7D-%5Cboldsymbol%7B%5Cmu%7D%28%5Cmathbf%7BX%7D%29%29+%5C%5C+%5Cboldsymbol%7B%5CSigma%7D_%7B%2A%7D+%26%3D%5Cmathbf%7BK%7D_%7B%2A+%2A%7D-%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D+%5Cmathbf%7BK%7D%5E%7B-1%7D+%5Cmathbf%7BK%7D_%7B%2A%7D+%5Cend%7Baligned%7D

这样我们计算出了我们希望得到的

equation?tex=p%28%5Cmathbf+f%5E%2A%29。至此为止,整个GP就结束了。关于GP那么它有什么优点呢,我认为有两点:
  1. 这一点也是我们上面就说过的,GP是无参的,对于任何一组数据,你不需要知道他的结构是什么,你也不需要去用参数刻画它函数的样子,GP就可以帮你做预测。
  2. GP它刻画出了函数的概率分布。这个非常有用。回顾之前的线性回归的方法,当你把参数
    equation?tex=%5Cmathbf+w估计出来后,你的函数就确定了,接下来我拿出任何一个数,你都会“毫无感情的”给我一个预测值。但是GP不一样,当我们知道我们预测函数的不确定度(不确定度很高,这个预测的结果就不可靠)之后,我们能探索最不可能实现高效训练的数据区域。这也是贝叶斯优化背后的主要思想。下面这句话我觉得写得非常贴切:如果你给我几张猫和狗的图片,要我对一张新的猫咪照片分类,我可以
    很有信心地给你一个判断。但是,如果你给我一张鸵鸟照片,强迫我说出它是猫还是狗,我就只能信心全无地预测一下。——Yarin Gal。

有噪声观测的情况下

在有噪观测的情况下,我们假设观测模型是这样的

equation?tex=y%3Df%28%5Cmathbf%7Bx%7D%29%2B%5Cepsilon,其中
equation?tex=%5Cepsilon+%5Csim+%5Cmathcal%7BN%7D%5Cleft%280%2C+%5Csigma_%7By%7D%5E%7B2%7D%5Cright%29,那么观测的核函数则更新为
equation?tex=%5Cmathbf%7BK%7D%2B%5Csigma_%7By%7D%5E%7B2%7D+%5Cmathbf%7BI%7D_%7BN%7D+%5Ctriangleq+%5Cmathbf%7BK%7D_%7By%7D(假设不同观测之间是独立的),基于这样的假设,联合概率分布和条件概率分布分别是:

equation?tex=%5Cleft%28%5Cbegin%7Barray%7D%7Bl%7D+%7B%5Cmathbf%7By%7D%7D+%5C%5C+%7B%5Cmathbf%7Bf%7D_%7B%2A%7D%7D+%5Cend%7Barray%7D%5Cright%29+%5Csim+%5Cmathcal%7BN%7D%5Cleft%28%5Cmathbf%7B0%7D%2C%5Cleft%28%5Cbegin%7Barray%7D%7Bll%7D+%7B%5Cmathbf%7BK%7D_%7By%7D%7D+%26+%7B%5Cmathbf%7BK%7D_%7B%2A%7D%7D+%5C%5C+%7B%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D%7D+%26+%7B%5Cmathbf%7BK%7D_%7B%2A+%2A%7D%7D+%5Cend%7Barray%7D%5Cright%29%5Cright%29
equation?tex=%5Cbegin%7Baligned%7D+p%5Cleft%28%5Cmathbf%7Bf%7D_%7B%2A%7D+%7C+%5Cmathbf%7BX%7D_%7B%2A%7D%2C+%5Cmathbf%7BX%7D%2C+%5Cmathbf%7By%7D%5Cright%29+%26%3D%5Cmathcal%7BN%7D%5Cleft%28%5Cmathbf%7Bf%7D_%7B%2A%7D+%7C+%5Cboldsymbol%7B%5Cmu%7D_%7B%2A%7D%2C+%5Cmathbf%7B%5CSigma%7D_%7B%2A%7D%5Cright%29+%5C%5C+%5Cboldsymbol%7B%5Cmu%7D_%7B%2A%7D+%26%3D%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D+%5Cmathbf%7BK%7D_%7By%7D%5E%7B-1%7D+%5Cmathbf%7By%7D+%5C%5C+%5Cboldsymbol%7B%5CSigma%7D_%7B%2A%7D+%26%3D%5Cmathbf%7BK%7D_%7B%2A+%2A%7D-%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D+%5Cmathbf%7BK%7D_%7By%7D%5E%7B-1%7D+%5Cmathbf%7BK%7D_%7B%2A%7D+%5Cend%7Baligned%7D

核函数参数的影响

那么核函数对GP有什么影响呢,假设我们选择SE核函数:

equation?tex=%5Ckappa_%7By%7D%5Cleft%28x_%7Bp%7D%2C+x_%7Bq%7D%5Cright%29%3D%5Csigma_%7Bf%7D%5E%7B2%7D+%5Cexp+%5Cleft%28-%5Cfrac%7B1%7D%7B2+%5Cell%5E%7B2%7D%7D%5Cleft%28x_%7Bp%7D-x_%7Bq%7D%5Cright%29%5E%7B2%7D%5Cright%29%2B%5Csigma_%7By%7D%5E%7B2%7D+%5Cdelta_%7Bp+q%7D
equation?tex=%5Cdelta_%7Bpq%7D表示p=q时取1,否则取0)

这个核函数有三个参数,分别是

equation?tex=%5Cell
equation?tex=%5Csigma_%7Bf%7D%5E%7B2%7D
equation?tex=%5Csigma_%7By%7D%5E%7B2%7D,分别控制着水平尺度,垂直尺度,以及噪声的方差。通过三幅图我们来看看这三个参数是怎么控制预测的结果的:

f732303ebedf4a2b58b032f6e36f3a15.png

三幅图的超参数

equation?tex=%5Cleft%28%5Cell%2C+%5Csigma_%7Bf%7D%2C+%5Csigma_%7By%7D%5Cright%29分别是:
equation?tex=%28a%29+%281%2C1%2C0.1%29%2C+%28b%29+%280.3%2C0.108%2C0.00005%29%2C+%28c%29+%283.0%2C1.16%2C0.89%29。(只改变
equation?tex=%5Cell,其他的参数是通过优化边际似然函数得到的)

我们可以看到(a)图整体看上去是估计的比较好的,(b)图中,减小了

equation?tex=%5Cell,我们发现图变得弯弯曲曲的,而且一旦预测的数据点稍微远离训练的数据点,这个不确定度就大大的上升(因为只要输入的距离稍微大一点点,核函数就认为它们已经非常不相似了)。(c)图中,
equation?tex=%5Cell为3,函数看上去更加的平滑了,但是拟合的效果就显得很差。

版权声明:本文为weixin_35521315原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。