贝叶斯优化:用更少试验调超参

调超参是机器学习的日常痛点:学习率、批量大小、正则系数、网络宽度,每一个组合都对应一次昂贵训练。若候选超参有 d 个、每个取 n 档,网格搜索要试 n^d 次,很快变得不可行。贝叶斯优化(Bayesian Optimization, BO)的核心主张是:与其盲目撒网,不如边试边学,用已经做过的试验去指导接下来该试哪一组。

与网格、随机搜索的对比

  • 网格搜索:系统性地遍历所有组合,但当维度升高,所需试验数指数爆炸,且大量试验浪费在明显糟糕的区域。
  • 随机搜索:在超参空间随机采样,往往比同预算的网格搜索更早发现较优解,因为它更可能覆盖到关键维度的变化。
  • 贝叶斯优化:在随机或少量初始试验的基础上,维护一个「目标函数长什么样」的概率模型,并据此主动挑选下一组超参。它把预算优先投到「既可能好、又不确定」的地方。

简言之,前两者是被动采样,BO 是带模型的主动探索。

两个核心组件

BO 由两部分配合:

  • 代理模型(surrogate model):通常用高斯过程(Gaussian Process, GP)拟合「超参到验证指标」的映射,不仅给出预测值,还给出预测的不确定性。也可以用随机森林或深度集成作为替代。
  • 采集函数(acquisition function):把代理模型的「预测均值」与「不确定性」合成一个分数,决定下一组试验选哪里。常用期望改进(Expected Improvement, EI):它倾向于选择能让指标预期提升最大的点,同时保留对高不确定区域的探索。

这种「预测加不确定度」的组合,使 BO 在「利用已知好区域」与「探索未知区域」之间取得平衡,而不是二选一。

一个调参流程示例

下面用伪代码展示一轮 BO 的循环:

def bayesian_optimize(objective, space, iters=30):
    # objective: 训练并回报验证指标(越贵越需省着用)
    # space: 超参搜索空间
    X, Y = init_random_samples(objective, space, n=5)   # 先随机几组热身
    for t in range(iters):
        surrogate = fit_gp(X, Y)                        # 训练高斯过程代理
        candidate = argmax_acquisition(surrogate, space, kind="EI")  # 选采集分数最高者
        y_new = objective(candidate)                    # 真实评估(昂贵)
        X.append(candidate); Y.append(y_new)            # 用新结果更新信念
    return best_of(X, Y)                                # 返回历史最优超参

要点在于:每次真实评估后,代理模型与采集函数都会更新,下一轮的选择因此越来越聪明。

适用场景与局限

BO 特别适合目标函数昂贵、每次评估成本高(如训练大模型、跑仿真)且维度不高的场景,例如超参调优、实验设计、自动机器学习(AutoML)的搜索阶段。

但它也有明显边界:

  • 计算开销:维护高斯过程在样本数增多时复杂度上升,通常只在数十到数百次试验内高效。
  • 维度诅咒:当超参维度很高(例如几十维以上),不确定性估计变弱,BO 的优势被稀释,往往要让位于随机搜索或进化策略。
  • 噪声敏感:若目标评估带较大噪声,需要代理模型显式建模噪声,否则采集函数会被误导。

小结

贝叶斯优化用高斯过程等代理模型刻画「超参到效果」的映射,再以期望改进等采集函数在利用与探索间权衡,从而用比网格、随机搜索少得多的试验逼近较优超参。它最适合评估昂贵、维度适中的调参与实验设计,却受困于高维与代理模型本身的计算成本。

参考与延伸阅读

  • Snoek, Larochelle, Adams. Practical Bayesian Optimization of Machine Learning Algorithms(NeurIPS 2012)。把 BO 系统引入超参调优的现代奠基工作之一。已核验。
  • Shahriari et al. Taking the Human Out of the Loop: A Review of Bayesian Optimization(Proceedings of the IEEE, 2016)。对代理模型、采集函数与理论性质的综述。已核验。
  • 高斯过程与采集函数的实现可参考开源库如 BoTorch、Hyperopt、Optuna 的 TPE 模块;具体 API 与版本以各项目文档为准。待核实。
本文累计阅读