本文主要涉及什么是高斯过程以及高斯过程的简单应用。主要参考这个博客
首先简单理解高斯过程,比如你有
个时间点,每个时间点的观测值都是高斯分布的,并且任意k个时间点的观测值的组合都是联合高斯分布。这样的一个过程称为高斯过程。
高斯过程通常可以用来表示一个 函数, 更具体来说是表示一个 函数的分布 (先不急着理解这句话,看到最后就明白了)。通常如果我们要学习一个函数(或者说学习一个映射),首先定义函数的参数,然后根据训练数据来学习这个函数的参数。例如我们做线性回归,学习这样一个函数就相当于训练回归参数(权重、偏置)。这种方法叫做参数化的方法。但是这种做法就把可学习的函数的范围限制死了,无法学习任意类型的函数。而非参数化的方法就没有这个缺点。用高斯过程来建模函数,就是一种非参数方法。
首先看一个简单的例子,假设我们有两个点
和
,对应这两个点的函数值服从二维高斯分布(高斯过程中“高斯”二字的由来)
然后我们从这个二维高斯分布中采样,两个x对应在x轴上,采样得到的两个y对应在y轴上,我们得到下图(采样10组)
每条直线可以被认为是从一个线性 函数分布 中采样出来的线性函数。
如果我们有20个x点,对应这20个x的函数值符合均值为0,协方差矩阵为单位矩阵的联合高斯分布。和上面一样进行采样10组,得到下图:
每一条线都是一个函数,是从某个 函数分布 中采样得到的。但是这样的函数看上去一点也不平滑,并且显得杂乱无章,距离很近的两个x对应的函数值可以相差很大。
直观来说,两个x离得越近,对应的函数值应该相差越小,也就是说这个函数应该是平滑的,而不是像上图那样是突变的。所以我们应该通过两个x之间的某种距离来定义这两个x对应的函数值之间的协方差。两个x离得越近,对应函数值之间的协方差应该越大,意味着这两个函数值的取值可能越接近。
我们引入核函数(以高斯核为例,也可以用其他核,并不是说我们在讲高斯过程所以这里就一定用高斯核):
它可以用来表示两个x之间的距离。此时,若我们有N个数据点(
),则这个N个数据点对应的N个函数值服从N维高斯分布,这个高斯分布的均值是0,协方差矩阵是K,K里的每一个元素对应:
至于为什么高斯分布的均值是0,为什么用核函数来表示协方差,可以 参考PRML 6.4.1 节(P304-P305)。
此时,再以刚才20个数据点的情况为例,我们采样10组,得到下图,现在看起来函数就平滑多了:
如果数据点再多点,例如100个数据点,则采样10组,得到下图:
上图每条曲线就是一个高斯过程的采样,每个数据点上的函数值都是高斯分布。且任意k个数据点对应的函数值的组合都是联合高斯分布。
然后我们可以用高斯过程作为先验,来学习任意函数,接下来我们将以回归问题为例。所谓的以高斯过程作为先验,意思是在没有观察到任何数据的情况下,我们认为给定x,y服从分布
。其中
。
接下来我们有训练数据
。回归问题就是希望我们通过
学习一个由
到
的映射函数 。然后给定一个
,预测
。
根据我们的高斯过程先验,训练数据
和
的联合条件分布
服从如下
根据以上
和
的联合分布,可以得到条件分布
上述就是把高斯过程作为先验的一种非参数方法。可以看到,除了kernel里面的超参数,最后对
的预测里面没有涉及到任何参数的估计。
閱讀更多 sandag 的文章