超参数怎么调优?网格搜索、随机搜索、贝叶斯优化有什么区别?
简化版
超参数是不由一次常规模型拟合直接估计、而由外层选择的配置。调优在开发数据上用预先固定的验证方案比较配置;IID 小数据常用交叉验证,大规模或时序任务也可用固定/滚动验证集。网格搜索穷举给定离散网格,简单但组合爆炸;随机搜索按分布采样、预算易控制;贝叶斯优化用历史试验拟合代理模型并由采集函数选点,在低维、单次评估昂贵且噪声可控时可能更省试验。三者都不保证连续空间全局最优,也不能使用最终测试集选参。
详细版
超参数 vs 参数:
- 参数:模型从数据里学出来的(如线性回归的权重 w、树的分裂点)。
- 超参数:训练前人为设定的(学习率、树深、正则 λ、K、C、γ、树的数量…),需调优。
三种调参方法对比:
| 方法 | 思路 | 优点 | 缺点 |
|---|---|---|---|
| 网格搜索 | 候选值全组合遍历 | 简单、彻底、可并行 | 组合爆炸、维度高极慢 |
| 随机搜索 | 随机采样若干组 | 相同预算常更优、可控成本 | 有随机性、非最优保证 |
| 贝叶斯优化 | 用代理模型指导下一步 | 少试验找好解、样本高效 | 实现复杂、串行为主 |
关键: 搜索器与验证器是两件事。每组配置可用交叉验证、时间滚动验证或固定验证集评估;选择规则、早停与预处理都必须留在开发数据内,最终测试集只用于锁定方案后的确认。
完整版教学
一、先分清:超参数不是参数
- 参数(parameters):模型从训练数据中自动学到的量——线性回归的系数 w、逻辑回归的权重、神经网络的连接权重、决策树的分裂特征和阈值。它们由训练过程(如梯度下降)求出。
- 超参数(hyperparameters):训练开始前人为设定、模型自己学不出来的配置——学习率、正则强度 λ、树的深度、树的数量、K-means 的 K、SVM 的 C 和 γ、KNN 的 K……
超参数直接决定模型的复杂度和学习方式,选得好不好对效果影响巨大。「调参」就是在候选空间里搜索一组让模型泛化最好的超参数。
参数与超参数是相对于训练层级的区分,不表示某个数数学上永远不能学习。例如正则强度 λ 通常由外层交叉验证选择,也可放进双层优化或经验贝叶斯框架估计;常规面试语境仍将它称为超参数。
条件超参数也要正确建模:选择 kernel=linear 时 γ 无效,不能把全部组合都当成同一个矩形网格,否则既浪费预算,也会干扰配置间的公平比较。
二、评估的载体:交叉验证
调参的本质是用一个模拟部署的验证设计比较许多配置。IID 小样本可对每组跑交叉验证;有用户组、时间依赖或超大数据时,应采用 Group CV、walk-forward 或预留验证窗口。不能把“必须 CV”当定律,切分结构与搜索算法相互独立。
关键红线:不能用测试集来调参。测试集只在最后确认泛化能力用;用它调参会「偷看答案」,导致对测试集过拟合、评估虚高。严谨做法是嵌套交叉验证(内层调参、外层评估)。
三、方法一:网格搜索——全组合遍历
网格搜索(Grid Search) 最直接:为每个超参数列出候选值,把所有超参数的候选值做笛卡尔积、逐一组合全试一遍:
学习率 ∈ {0.01, 0.1, 0.3}
树深 ∈ {3, 5, 7}
→ 组合 = 3 × 3 = 9 组,每组跑交叉验证,选最优
- 优点:简单、彻底(候选内不遗漏)、天然可并行。
- 缺点:组合数随超参数个数指数爆炸(维度灾难)——5 个超参各 5 个候选就是 5⁵=3125 组,每组还要跑 K 折,成本巨大。且候选值是人为离散设定的,可能错过网格之间的更优值。
网格搜索适合超参数少、候选值不多的情况。
四、方法二:随机搜索——随机采样
随机搜索(Random Search) 不遍历所有组合,而是在参数空间里随机采样固定数量的组合来试(如随机试 50 组)。
为什么随机搜索常常更高效(重要认知):真实问题中,往往只有少数超参数真正重要,其余影响很小。
网格搜索:在「不重要参数」上浪费了很多次尝试(重复试它的不同值)
随机搜索:每次采样让「重要参数」都取到不同值 → 重要维度探索更充分
在相同的试验预算下,随机搜索通常能在重要超参数上探索到更多不同取值,因此常比网格搜索更快找到好的配置。而且随机搜索的成本可控(想试多少组就多少组),还能覆盖连续取值。缺点是有随机性、不保证找到全局最优。
五、方法三:贝叶斯优化——智能地选下一组
网格和随机搜索都是「盲目」试——每次尝试不利用之前的结果。贝叶斯优化(Bayesian Optimization) 更聪明:用已经试过的结果建立一个「代理模型」(surrogate,如高斯过程),预测参数空间里哪些区域最有希望,然后有针对性地选下一组参数去试。
流程直觉:
1. 试几组初始参数,记录得分
2. 用代理模型拟合「参数 → 得分」的关系(含不确定性)
3. 用「采集函数」权衡「探索未知区域」和「利用已知好区域」,选下一组最值得试的参数
4. 试它、更新代理模型,重复
- 优点:在低维、单次评估昂贵且目标噪声可建模的问题上,可能用更少试验找到较好配置。深度网络或大模型是否适合还取决于高维条件空间、并行需求和单次评估定义,不能只因训练昂贵就断定适合标准贝叶斯优化。
- 缺点:实现复杂、主要是串行(每步依赖前面结果,不易并行)、初期有开销。
- 工具:Optuna、Hyperopt、scikit-optimize 等。
代理模型给出目标值及不确定性,采集函数再权衡 exploitation 与 exploration。它不是每次都选预测均值最高点,也没有全局最优保证。
| 场景 | 更现实的选择 |
|---|---|
| 低维、单次训练昂贵 | GP 或 TPE 贝叶斯优化 |
| 高维、强条件参数 | TPE、随机搜索 |
| 可大量并行或有预算层级 | ASHA、Hyperband |
标准高斯过程方法在高维、强噪声和大规模并行下可能变差,不能把智能搜索当成无条件优于随机搜索。
贝叶斯优化是否省预算,要用相同总计算成本与随机搜索比较。目标噪声大时,应重复评估或让代理模型显式表达噪声。维度很高、条件参数很多或需要大规模并行时,标准高斯过程方法未必占优。工程上还要记录失败试验、随机种子和早停资源,才能复现实验结论。
六、实践建议
- 超参少、候选少 → 网格搜索(简单彻底)。
- 超参多、想控成本 → 随机搜索(性价比高,常作默认)。
- 单次训练很贵、想省试验次数 → 贝叶斯优化(Optuna 等)。
- 先粗后细:先大范围随机/粗网格找到好区域,再在附近细搜。
- 对数尺度采样:学习率、正则强度等跨数量级的参数,在对数尺度上采样(如 10⁻⁴~10⁻¹)。
- 配合早停:GBDT/神经网络调参时用早停省时间。
- 别用测试集调参;在与部署一致的开发验证方案上搜索,最终在独立测试集确认。
七、常见追问
- 超参数和参数区别? 参数是模型学出来的(权重、分裂点);超参数是训练前人设的(学习率、树深、λ、K)。
- 随机搜索为什么常比网格好? 相同预算下重要超参数被更充分探索,不在不重要参数上浪费。
- 贝叶斯优化好在哪? 利用历史结果指导搜索,常以更少试验找到较好配置,适合训练昂贵场景。
- 调参能用测试集吗? 不能——用交叉验证,测试集只做最终确认,否则过拟合验证集。
- 调参和交叉验证关系? 每组超参都在交叉验证上评估、选平均最优。
八、先算拟合预算,再决定搜索算法
4 个超参数各放 5 个网格值,会产生 5⁴=625 组;配 5 折交叉验证就是 3125 次拟合。若随机搜索预算为 60 组,则只需 300 次拟合,成本约为网格的 9.6%。这并不保证随机搜索得分更高,只表示它能把固定预算分配到更多不同的连续坐标。
| 搜索器 | 适合的预算形态 | 主要风险 |
|---|---|---|
| Grid | 少量离散、强交互且范围已知 | 组合爆炸 |
| Random | 维度较多、可并行、先找范围 | 结果有随机波动 |
| Bayesian | 单次评估昂贵、试验数有限 | 代理模型开销与串行依赖 |
| Hyperband/ASHA | 可按轮数逐步淘汰 | 早期指标未必代表最终 |
定义搜索空间(连续参数常用 log-uniform)
→ 固定 CV 与随机种子策略
→ 搜索只看训练/验证数据
→ 锁定配置并全量重训
→ 测试集只评估一次
贝叶斯优化用采集函数权衡 exploitation 与 exploration,不是“每次都选预测均值最高点”。在高维、强条件参数或大量并行 worker 下,TPE、随机搜索和多保真方法可能比标准高斯过程更合适。
心法:调参先问“允许多少次 fit、每次多贵”,再选 Grid、Random 或 Bayesian,而不是按算法名气选择。
九、常见误区与追问
- 误区:网格搜索覆盖候选就等于找到连续空间全局最优。 它只穷举人为给定的离散网格。
- 误区:贝叶斯优化必然比随机搜索好。 效果依赖维度、噪声、代理模型、预算和并行方式。
- 追问:学习率为什么常按对数分布采样? 它的有效变化通常跨数量级,线性均匀会浪费大量点。
- 追问:阈值算超参数吗? 它是决策层配置,也应只在验证数据选择,不能用测试集调。
- 追问:搜索结束后为什么还要重训? CV 中每个模型只见过部分训练数据,锁定配置后应利用全部训练数据。
十、加强记忆
超参数由外层验证流程选择,参数由一次模型拟合估计;层级是相对的。Grid 穷举给定离散组合,Random 按定义分布采样,Bayesian 用代理模型与采集函数顺序选点。先按总 fit/资源预算、维度、条件参数、噪声与并行需求选搜索器,再用符合数据结构的 CV、Group/Time split 或固定验证集评估。贝叶斯优化不因“智能”就必胜随机搜索,网格也只覆盖人为网格。预处理、早停和阈值选择都属于开发流程,测试集不能参与选择;锁定配置后全量重训并一次性确认。