高斯过程基础:均值函数、协方差函数、核函数的选择
聊贝叶斯优化,高斯过程是绕不过的坎。说白了,高斯过程就是一组随机变量的集合,任意有限个都服从联合高斯分布。它像一根有弹性的绳子,既能在数据点处老老实实穿过,又能在没数据的地方保持合理的不确定性。
我刚开始接触这玩意儿时,老把均值函数和协方差函数搞混。后来做了几个项目才捋清楚——均值函数决定趋势,协方差函数决定形状。今天就跟大伙儿掰扯掰扯这几个核心部件怎么选。
均值函数——看似简单,实则暗藏玄机
最常见的做法:设均值为零。这不是偷懒,而是因为协方差函数能包住大部分建模能力。你想想,如果数据有明确趋势(比如随时间线性增长),零均值会让预测在远处偏回零,这时候就得显式定义均值函数了。
我个人习惯用这么几种:
| 均值函数类型 | 表达式 | 适用场景 |
|---|---|---|
| 常数均值 | m(x)=c | 数据围绕某个常数值波动 |
| 线性均值 | m(x)=ax+b | 有明显全局线性趋势 |
| 零均值 | m(x)=0 | 数据已经去中心化,或协方差够灵活 |
记得有一次做超参数调优,目标函数在迭代初期明显下降。我用零均值加RBF核,结果远处预测全乱了。后来换成线性均值才把趋势抓回来。所以不要无脑设零,先画个散点图看看趋势。
协方差函数(核函数)——高斯过程的灵魂
协方差函数决定了两个点之间的相关性。距离近的函数值像,距离远的几乎独立。核函数就是协方差函数的具体形式。我常用的核函数有以下几个:
- RBF(平方指数核):最经典,无限可微,生成的函数曲线非常光滑。但缺点是一旦距离稍远,相关性就掉到几乎为零。
- Matern核:比RBF更“真实”,可以控制平滑度(ν=1/2 对应指数核,ν=3/2 一次可微,ν=5/2 二次可微)。工业界最爱。
- 周期核:目标函数有明显周期性时用,比如每日流量预测。
- 线性核:拟合线性趋势,常和别的核组合。
选核本质是在选先验假设——你猜测目标函数有多光滑?有无周期?各向同性?这些假设会死死绑定在预测结果里。
下面这张图展示了高斯过程的核心组件如何协同工作:
核函数选择——实战避坑指南
选核不是拍脑袋,得跟问题匹配。我给你列几个我踩过的坑:
我曾经用RBF核去拟合带锯齿状跳变的目标函数。结果呢?远处预测平滑得像条直线,完全没捕捉到突变。后来换成Matern ν=1/2(即指数核),才把不连续性给体现出来。
选核的几个原则:
- 先看数据平滑度——如果函数可能不可微,别用RBF,用Matern ν≤3/2。
- 看是否有周期——投河数据、服务器请求量,加个周期核能省不少事。
- 各向同性还是各向异性——如果每个维度尺度不同,用ARD(自动相关性确定)核,让每个维度学自己的长度尺度。
- 别忘了噪声——观测总有噪声,加一个白噪声核(WhiteKernel)能避免过拟合。
代码示例——用GPy定义核函数
我平时用GPy或scikit-learn。下面用GPy展示怎么搭一个Matern核加线性均值:
import GPy
import numpy as np
# 生成一些模拟数据
X = np.linspace(0, 10, 20).reshape(-1, 1)
y = np.sin(X).flatten() + 0.1 * np.random.randn(20)
# 定义均值函数(线性)
mean_func = GPy.mappings.Linear(input_dim=1, output_dim=1)
# 定义核函数(Matern32 + 白噪声)
kernel = GPy.kern.Matern32(input_dim=1, variance=1., lengthscale=1.) \
+ GPy.kern.White(input_dim=1, variance=0.1)
# 创建高斯过程模型
m = GPy.models.GPRegression(X, y.reshape(-1,1), kernel, mean_function=mean_func)
m.optimize()
# 打印学到的参数
print(m)
你跑完会看到variance和lengthscale被自动优化了。这就是贝叶斯优化的基础——用数据反推超参数。
小经验:优化kernel参数时,多跑几次优化,避免陷入局部最优。我习惯用随机重启3~5次取最优。
总结一下核心要点
| 组件 | 选型建议 | 个人踩坑记 |
|---|---|---|
| 均值函数 | 有趋势用线性/常数,否则零均值 | 漏设线性均值导致远处预测飘零 |
| 核函数 | 光滑用RBF,中低光滑用Matern,周期用周期核 | Matern ν=1/2 救了锯齿函数的命 |
| 噪声项 | 永远加白噪声核 | 不加时模型把噪声当信号学,过拟合 |
| 长度尺度 | 多维用ARD让各维自己学 | 固定长度尺度在超参数敏感问题上很吃亏 |
高斯过程其实没你想的那么玄。抓住均值、协方差、核这三个把手,后面采集函数、优化流程都能顺下来。下节课咱们就进实战——怎么用高斯过程做贝叶斯优化。嗯,先把今天这些消化掉。