基于高斯过程的贝叶斯优化算法基础题
题目描述:考虑一个我们不知道解析表达式、但可以在任意点进行(有噪声或近似)评估的函数 \(f(x)\),目标是找到其全局最小值(或最大值)。这是一个典型的高维、非凸、评估代价高昂的黑箱函数优化问题。要求使用贝叶斯优化(Bayesian Optimization, BO)框架,特别是以高斯过程(Gaussian Process, GP)作为代理模型,来解决此问题。我们将通过一个具体的一维示例,详细阐述其算法步骤、原理和实现逻辑。
题目分解与核心思想
贝叶斯优化是一种序列模型优化(Sequential Model-Based Optimization, SMBO)方法,适用于目标函数评估成本高、无导数信息的优化问题。其核心思想是:
- 构建代理模型:利用已有采样点,构建一个概率模型(常用高斯过程)来近似未知的目标函数。这个模型不仅给出预测值,还给出预测的不确定性(方差)。
- 通过采集函数决策:定义一个采集函数(Acquisition Function),它利用代理模型的预测和不确定性,在“探索”(在不确定性高的区域采样)和“利用”(在预测值好的区域采样)之间进行权衡,以决定下一个最佳采样点。
- 迭代更新:在选定的新点评估真实目标函数,将该数据加入历史观测集,更新代理模型,重复此过程直至满足停止条件。
解题步骤详解
步骤1:问题形式化与初始化
我们假设目标是最小化黑箱函数 \(f(x)\),定义在域 \(\mathcal{X}\) 上(例如 \(x \in [0, 1]\))。
- 初始采样:由于没有任何先验信息,我们先随机(或通过拉丁超立方采样)选择 \(n_{\text{init}}\) 个初始点 \(X_{\text{init}} = \{x_1, ..., x_{n_{\text{init}}}\}\),并评估得到对应的函数值 \(y = f(X_{\text{init}})\)(可能含观测噪声 \(y = f(x) + \epsilon\))。
- 目标:迭代地选择下一个采样点 \(x_{n+1}\),使得经过 \(N\) 次总评估后,我们找到的点 \(x^*\) 的函数值 \(f(x^*)\) 尽可能小。
步骤2:构建高斯过程(GP)代理模型
高斯过程为函数 \(f(x)\) 提供了一个先验分布,并在观察到数据后,通过贝叶斯推理得到后验分布。
- GP定义:GP完全由其均值函数 \(m(x)\) 和协方差函数(核函数) \(k(x, x')\) 定义。我们通常设先验均值为常数(例如零),即 \(f(x) \sim \mathcal{GP}(0, k(x, x'))\)。
- 核函数选择:最常用的是平方指数(径向基函数,RBF)核:
\[ k(x_i, x_j) = \sigma_f^2 \exp\left(-\frac{1}{2l^2} (x_i - x_j)^2\right) + \sigma_n^2 \delta_{ij} \]
其中:
* $ \sigma_f^2 $ 是信号方差,控制函数值的变化幅度。
* $ l $ 是长度尺度,控制函数的平滑程度。
* $ \sigma_n^2 $ 是噪声方差(如果观测有噪声),$ \delta_{ij} $ 是克罗内克函数。
- 后验分布:给定观测数据 \(\mathcal{D}_{1:t} = \{(x_i, y_i)\}_{i=1}^{t}\),对于任意新点 \(x_*\),函数值 \(f(x_*)\) 的后验分布仍然是高斯分布:
\[ f(x_*) | \mathcal{D}_{1:t} \sim \mathcal{N}(\mu_t(x_*), \sigma_t^2(x_*)) \]
其中后验均值和方差为:
\[ \mu_t(x_*) = \mathbf{k}_*^T (\mathbf{K} + \sigma_n^2 \mathbf{I})^{-1} \mathbf{y} \]
\[ \sigma_t^2(x_*) = k(x_*, x_*) - \mathbf{k}_*^T (\mathbf{K} + \sigma_n^2 \mathbf{I})^{-1} \mathbf{k}_* \]
* $ \mathbf{K} $ 是 $ t \times t $ 的核矩阵,元素 $ K_{ij} = k(x_i, x_j) $。
* $ \mathbf{k}_* $ 是 $ t \times 1 $ 的向量,元素 $ k(x_i, x_*) $。
* $ \mathbf{y} = (y_1, ..., y_t)^T $。
- 超参数优化:在实际使用前,需要通过最大化边缘似然(证据)来优化核函数的超参数 \(\theta = (\sigma_f, l, \sigma_n)\):
\[ \log p(\mathbf{y} | X, \theta) = -\frac{1}{2} \mathbf{y}^T (\mathbf{K}_{\theta} + \sigma_n^2 \mathbf{I})^{-1} \mathbf{y} - \frac{1}{2} \log |\mathbf{K}_{\theta} + \sigma_n^2 \mathbf{I}| - \frac{t}{2} \log 2\pi \]
步骤3:定义和优化采集函数
采集函数 \(\alpha(x; \mathcal{D}_{1:t})\) 基于当前的GP后验 \((\mu_t(x), \sigma_t(x))\) 构造,下一个采样点通过最大化采集函数得到:\(x_{t+1} = \arg\max_{x \in \mathcal{X}} \alpha(x)\)。
常用采集函数有:
- 期望改进(Expected Improvement, EI):衡量在点 \(x\) 处,函数值相比当前最佳观测 \(y_{\text{best}} = \min(\mathbf{y})\) 的期望改进量。
\[ \text{EI}(x) = \mathbb{E}[\max(y_{\text{best}} - f(x), 0)] \]
利用GP后验,可解析计算:
\[ \text{EI}(x) = (y_{\text{best}} - \mu_t(x) - \xi)\Phi(Z) + \sigma_t(x) \phi(Z), \quad \text{若} \sigma_t(x) > 0 \]
其中 $ Z = \frac{y_{\text{best}} - \mu_t(x) - \xi}{\sigma_t(x)} $,$ \Phi $ 和 $ \phi $ 分别是标准正态分布的累积分布函数和概率密度函数。参数 $ \xi \geq 0 $ 用于平衡探索与利用。
- 置信上界(Upper Confidence Bound, GP-UCB):
\[ \text{UCB}(x) = -\mu_t(x) + \beta_t \sigma_t(x) \]
对于最小化问题,我们取负均值(因为GP建模的是 $ f(x) $ 本身)。$ \beta_t $ 是一个随时间增加的参数,理论上能保证收敛。
- 概率改进(Probability of Improvement, PI):相对简单,但容易陷入局部开发。
步骤4:迭代流程与算法实现
结合以上步骤,贝叶斯优化的算法循环如下:
- 输入:搜索空间 \(\mathcal{X}\),黑箱函数 \(f\),初始采样点数量 \(n_{\text{init}}\),总评估预算 \(N\)。
- 初始化:在 \(\mathcal{X}\) 内随机采样 \(n_{\text{init}}\) 个点,得到初始数据集 \(\mathcal{D} = \{(x_i, y_i)\}_{i=1}^{n_{\text{init}}}\)。
- For \(t = n_{\text{init}}\) to \(N-1\) do:
a. 拟合GP模型:使用当前数据集 \(\mathcal{D}\) 优化GP超参数,得到后验均值函数 \(\mu_t(x)\) 和方差函数 \(\sigma_t^2(x)\)。
b. 优化采集函数:在定义域 \(\mathcal{X}\) 上,通过全局优化器(如多起点梯度下降、DIRECT、或随机搜索)找到最大化采集函数 \(\alpha(x)\) 的点 \(x_{t+1}\)。
c. 评估目标函数:计算 \(y_{t+1} = f(x_{t+1})\)(可能带有噪声)。
d. 更新数据集:\(\mathcal{D} \leftarrow \mathcal{D} \cup \{(x_{t+1}, y_{t+1})\}\)。 - 输出:从所有评估点中返回最佳点 \(x^* = \arg\min_{(x, y) \in \mathcal{D}} y\)。
示例演示
假设我们要最小化函数 \(f(x) = (6x-2)^2 \sin(12x-4)\),定义域 \(x \in [0, 1]\)。这是一个有多个局部极小值的函数。
- 初始化:随机选3个点,例如 \(x = [0.1, 0.5, 0.9]\),计算对应的 \(y\) 值。
- 第一次迭代:
- 用这3个点拟合GP,得到整个区间上每个点的后验均值(预测曲线)和95%置信区间(均值 ± 1.96 * 标准差)。
- 计算EI采集函数,它在当前最佳点(假设是 \(x=0.1\))附近较低(因为不确定性小),在未探索区域(如 \(x=0.3\) 或 \(x=0.7\))较高(因为不确定性大)。
- 最大化EI,假设得到 \(x_4 = 0.3\)。评估 \(f(0.3)\) 并加入数据集。
- 后续迭代:
- 用4个点重新拟合GP,置信区间在已采样点周围变窄,预测更准确。
- 再次最大化EI,新点可能会在预测值低且有一定不确定性的区域产生。
- 重复此过程。通常经过10-20次迭代,GP的预测能较好地近似真实函数,并且采样点会集中在全局最优点(此函数在 \(x \approx 0.757\) 处有全局最小值)周围。
关键要点与讨论
- 探索 vs. 利用:采集函数的设计是核心。EI是实践中非常鲁棒和高效的选择。
- 计算成本:主要开销在于每次迭代中GP的矩阵求逆(\(O(t^3)\))和优化采集函数(需全局优化,但目标相对平滑)。
- 高维扩展:在高维空间,GP的核函数需要精心设计,且搜索空间呈指数增长,使得采集函数优化和GP拟合都更具挑战性。常用方法包括使用加性核、随机嵌入或与局部搜索结合。
- 优势:贝叶斯优化特别适用于评估代价高昂的问题(如超参数调优、实验设计、模拟优化),因为它能用尽可能少的评估找到较优解。
通过以上步骤,你不仅理解了贝叶斯优化的算法流程,也掌握了其核心组件:高斯过程回归、采集函数以及序列决策的框架。这是解决无导数黑箱优化问题的一种强大工具。