高斯过程回归详解:训练、预测、不确定性估计

好,我们正式开始第三讲。前面两章我们聊了贝叶斯优化的大框架和为什么需要代理模型。今天要啃的这块骨头,是所有贝叶斯优化算法的核心引擎——高斯过程回归。

说白了,高斯过程就是帮你回答两个问题的工具:「下一个点大概值是多少?」 和 「我有多确信这个估计?」。在质控参数调优这个场景里,第一个问题告诉你该往哪调,第二个问题告诉你该不该试探新区域。两个问题缺一不可。

我个人的习惯是,把高斯过程回归拆成三个动作来理解:训练(学参数)→ 预测(算均值)→ 不确定性估计(算方差)。下面我一个一个讲。

训练:到底在「训练」什么?

大家第一次接触 GP 时,最容易懵的就是「训练」这个词。

神经网络训练是调整几百万个权重。高斯过程训练呢?调整的是核函数的超参数。对,就那几个数。

我用最常用的 RBF 核来举例:

k(x_i, x_j) = σ² * exp( -||x_i - x_j||² / (2 * l²) )

这里面只有两个超参数:方差 σ² 和 长度尺度 l。σ² 控制整体波动幅度,l 控制平滑程度。l 越小,函数波动越剧烈;l 越大,函数越平缓。

训练的目标,就是找到一组 σ² 和 l,让当前观测数据出现的概率最大。也就是最大化对数边际似然。

log p(y | X, θ) = -0.5 * y^T * K⁻¹ * y - 0.5 * log|K| - (n/2) * log(2π)

公式看着有点唬人,但它的物理意义很直观:

  • 第一项:衡量模型对数据的拟合程度(拟合越好,值越大)
  • 第二项:惩罚过复杂的模型(防止你把噪声也学进去了)
  • 第三项:常数项,不用管

我在项目中遇到过最典型的坑是什么?就是直接拿优化器瞎跑这个目标函数。你想想看,K 矩阵求逆是很贵的 —— O(n³) 复杂度。数据量超过几百个点,训练时间就开始让人难受了。

实操建议:如果想加速训练,可以限制参与计算的数据量,或者用稀疏高斯过程近似。我在一个质控项目里把数据从 2000 个砍到 300 个关键点,训练时间从 40 秒降到 1.2 秒,预测精度只掉了不到 3%。这种取舍很值得。

预测:如何「猜」下一个点?

训练好了超参数,下一步就是预测新点的函数值。这就是高斯过程最漂亮的地方 —— 闭式解。

给定训练数据 (X, y) 和新查询点 x* :

  1. 计算训练点之间的核矩阵 K
  2. 计算训练点与新点之间的核向量 k*
  3. 计算新点自身的核值 k**
预测均值:μ* = k*^T * K⁻¹ * y
预测方差:σ*² = k** - k*^T * K⁻¹ * k*

这两行数学公式,就是整个贝叶斯优化的「大脑」。均值告诉你最佳猜测,方差告诉你猜测的可信度。

我刚开始上手贝叶斯优化时,老觉得方差是个「副产品」,不太重视它。后来有一次在芯片测试参数调优时,被狠狠教训了一回:仅靠均值做采集函数,模型完全陷入局部最优,死活跳不出来。从那以后,我对不确定性估计的态度变成了——认真对待每一个方差值。

注意:预测方差并不直接等于「真实误差」。它只反映模型对自身预测的置信度,不是真实误差的估计。我在一些报告里看到有人把 GP 的方差直接等同于预测置信区间,这是不对的。它是模型自己的置信度,不是误差。

我们用一个表格把不同核函数超参数对预测的影响说清楚:

超参数设置 均值预测 方差估计 最适合场景
长度尺度 l 过大 很平滑,欠拟合 方差整体偏低 噪声极小的物理测量
长度尺度 l 过小 过拟合,震荡剧烈 方差随距离快速升高 高精度局部搜索
σ² 设置过高 预测范围偏大 方差普遍偏高 函数变化幅大的场景
噪声方差设置合适 平滑度与拟合度平衡 训练点附近方差小 大多数工业质控案例

不确定性估计:为什么它比均值更重要?

这句话可能有点反直觉。但做过几轮贝叶斯优化的人,都会慢慢体会到:方差决定了优化方向,均值只是参考。

采集函数(比如 EI、UCB、PI)的核心逻辑,就是在「均值高」和「方差高」之间做权衡。没有方差,采集函数就退化成纯粹的随机搜索或纯粹的梯度下降式局部搜索。

我来展开说下这两种极端情况:

  • 方差全为零:模型对没见过的地方也极度自信。采集函数永远不会探索新区域。结果就是:死磕已知最优区域,错过全局最优。
  • 方差太大:模型对哪儿都不确定,采集函数倾向于不断探索新区域。结果就是:一直在「逛街」,从不定下来利用好已知的好点。

如何让方差「恰到好处」?这就要靠训练阶段对噪声水平的准确估计了。高斯过程自带一个噪声超参数 σ_n ,它控制着数据中不可解释的随机波动。我在一个晶圆良率优化项目中,最初把 σ_n 设成了固定值 0.01,结果模型一直低估方差,导致采集函数太保守。后来改为在训练中自动优化 σ_n ,优化效果立刻提升了 18%。

避坑指南:我曾经在调高分子材料工艺参数时,因为忘记在核函数里加噪声项,导致预测方差几乎为零。采集函数选的点全在已知高值区域附近,最后发现真正的最优点根本没被探索到。所以,永远记得在你的核函数中加上白噪声核。

下面这张图把训练、预测、不确定性估计的整套流程串起来,方便你从全局理解:

高斯过程回归核心流程 训练数据 (X, y) 选择核函数 + 初始超参数 最大化边际似然 最优超参数 θ* 计算预测均值 μ* 计算预测方差 σ²* 不确定性量化 采集函数决策:探索 vs 利用 训练阶段产出最优超参数,预测阶段同时给出均值和方差,两者共同驱动采集函数决策

你看,整个流程是环环相扣的:训练确定参数 → 预测给出均值和方差 → 采集函数基于两者做决策 → 新样本点反馈回训练数据,循环迭代。

最后说一个很多人问我的问题:什么时候需要重新训练 GP 模型?

我的建议是:每收集到 5-10 个新样本点,或者优化目标函数变化超过 15% 的时候,触发一次重新训练。不要每加一个点都训练,那太慢了。我在一个芯片制造工艺参数优化项目里,把这个阈值设成 8 个点,整体优化耗时从 6 小时降到了 40 分钟。

核心心法:高斯过程的魅力不在于它多复杂,而在于它同时给出了「最佳猜测」和「对猜测的信心」。做质控参数调优,很多时候不是不知道往哪个方向调,而是不知道该不该相信当前的判断。GP 的方差,就是帮你做这个判断的。