机器学习入门 · 调参核心

什么是网格搜索

模型训完了,准确率却一般——问题往往不在「学」,而在「事先设错了旋钮」。
那些旋钮叫超参数,网格搜索就是系统地拧它们的办法。

向下滑动
第一步 · 参数与超参数

先分清:模型参数 ≠ 超参数

1 为什么这一点最重要?

学网格搜索之前,必须先搞清机器学习里两类「参数」。很多人把它们混为一谈,后面就会卡在:「既然能用梯度下降学权重,为什么还要手动调参?」

模型参数 Parameters

训练过程中自动学出来的量。线性回归的斜率 w 与截距 b,神经网络里的权重矩阵,都是参数。你一般不手动改它们。

超参数 Hyperparameters

训练开始前就要定好的配置。决策树最大深度、学习率、正则强度 C、网络层数……它们决定「怎么学、学成什么样」,却不能靠普通梯度下降直接更新。

2 一张对照表记住区别

对比项模型参数超参数
谁来设定算法从数据中学习人(或搜索算法)事先指定
何时确定训练过程中不断更新训练开始前就固定
典型例子wb、神经网络权重学习率、max_depth、C
能否梯度下降可以(常见)通常不行,需另寻优化法
调错会怎样训练失败 / 拟合不好过拟合、欠拟合、训不动

核心洞察

参数回答「模型记住了什么」;超参数回答「模型按什么规则去记」。网格搜索管的是后者。

3 生活比喻:学骑自行车

参数 ≈ 肌肉记忆

练着练着身体自己会调:重心、踩踏节奏。对应模型权重,靠练习(训练)自动形成。

超参数 ≈ 车与场地

座椅多高、轮胎气压、在平地还是坡道练——开练前就要定。定错了,怎么练都别扭。

网格搜索 ≈ 系统试配置

列出几种座椅高度 × 几种气压,每种组合练一遍,挑最稳的那套。

第二步 · 调参痛点

为什么必须「试」超参数?

1 同一模型,旋钮不同,结果天差地别

以决策树为例:max_depth=2 可能太浅,学不到规律(欠拟合);max_depth=50 可能把噪声也背下来(过拟合)。中间某个深度往往最好——但这个「某个」没法从公式里一步算出。

关键事实:超参数通常不能用训练参数的那套梯度下降直接更新。它们往往离散、不可微,或定义在「训练过程之外」。所以需要专门的超参数优化(Hyperparameter Optimization)

2 凭感觉拧旋钮的问题

太慢

靠直觉一个个试,容易漏掉好组合

不可复现

别人很难重复你的「手感调参」过程

容易自欺

若用测试集来挑旋钮,成绩会虚高

我们需要一种穷尽、可复现、可并行的试法——最基础的就是网格搜索。
第三步 · 网格搜索

网格搜索:把候选值铺成一张网,逐格试

1 一句话定义

网格搜索(Grid Search)是最直观的超参数优化策略:为每个超参数列出一组候选值,把它们交叉组合成网格,然后穷举评估每一个网格点,选出验证表现最好的那一组。

2 咖啡比喻(建立直觉)

假设你要调一杯最合口味的咖啡,只有两个旋钮:

糖量:1 / 2 / 3 勺 奶量:10 / 20 / 30 ml

网格搜索会把全部 3 × 3 = 9 种组合都做一遍并品尝,最后挑最合口味的那一杯——绝不漏掉网格里的任何一点。

组合数 = n₁ × n₂ × … × nₖ
每个超参数有 nᵢ 个候选值,总试验次数是它们的乘积

3 四步工作原理

1

定义搜索空间

为每个要调的超参数列出候选列表

2

构建网格

笛卡尔积交叉,形成多维「格子」

3

遍历评估

对每个格子训练模型并打分

4

择优录取

选验证分数最高的那组配置

4 映射到真实机器学习

咖啡世界机器学习
糖量候选超参数 A 的候选值,如 max_depth ∈ {3, 5, 8}
奶量候选超参数 B 的候选值,如 learning_rate ∈ {0.01, 0.1, 0.3}
尝一口打分在验证集(或交叉验证)上算准确率 / F1
最合口味的那杯验证分数最高的超参数组合

原理本质

网格搜索 = 离散搜索空间上的暴力穷举。它不「聪明」,但在你划定的候选范围内保证不漏最优格点——这正是它简单却可靠的原因。

第四步 · 交叉验证

怎么公平地给每一格打分?

1 不能用测试集来挑超参数

测试集应只在最终模型上用一次。若一边搜网格一边看测试集分数,信息会泄露:你等于「偷看答案再选题」,报告的成绩会虚高,上线后往往掉链子。

2 单次验证集也不够稳

只切一次「训练 / 验证」,分数容易受这一刀运气影响。某一组超参数碰巧分到简单验证样本,就会被高估。

标准做法:网格搜索通常与 K 折交叉验证(K-Fold CV) 绑定,合称 GridSearchCV(如 scikit-learn 中的同名工具)。

3 GridSearchCV 在干什么

对网格上的每一组超参数:

  1. 把训练数据分成 K 份(常见 K=5 或 10)
  2. 轮流用 K−1 份训练、1 份验证,得到 K 个分数
  3. 取平均,作为该组超参数的「实力评分」

最后比较各网格点的平均分,选出最高者;再用这组最佳超参数,在全部训练数据上重训,到独立测试集上做最终评估。

总训练次数 ≈ (n₁ × n₂ × … × nₖ) × K
组合数 × 折数。例如 4 个超参数各 10 个候选、5 折 → 10⁴ × 5 = 50,000 次训练
第五步 · 动手演示

互动:看网格搜索如何逐格试探

你可以试试:点击「开始搜索」,观察 3×3 网格被逐个评估;搜索结束后橙色格就是当前最优。再拖动「候选密度」,感受组合数如何指数膨胀。

搜索成本估算(含 5 折交叉验证)

3 × 3 × 5 = 45 次训练 小网格 · 很轻松

准备就绪:将依次尝试糖量 × 奶量的 9 种组合。

正在评估 已评估 当前最优
第六步 · 局限与进阶

网格搜索的优缺点,以及下一步去哪

1 优点:全面、稳定、易并行

范围内不漏

候选网格上的每一点都会试到,不会「碰巧没抽到」最优格。

结果可复现

搜索空间固定,别人用同一网格能得到同一结论。

天然可并行

各网格点彼此独立,多核 / 多机可同时训。

2 缺点:维度灾难

超参数一多,或每个参数的候选一密,组合数就会指数爆炸。上面公式里 50,000 次训练,对大模型或大数据集往往不可接受。

维度灾难:网格搜索在低维、小候选集上很香;在高维空间会迅速变得不切实际。

3 常见替代与进阶路线

网格搜索

全量穷举。适合:超参数少、候选粗、要可解释的「扫一遍」。

随机搜索 Random Search

在空间中随机抽 N 组来试。高维时往往用更少计算达到接近甚至更好的效果——因为真正敏感的维度通常很少。

贝叶斯优化 / Optuna

根据已试结果建立「哪里可能更好」的模型,优先探索高潜力区域。有记忆,比盲目试更聪明。

进阶路径可以记成:网格穷举 → 随机采样 → 有记忆的智能搜索

4 它在完整工作流中的位置

数据与特征

清洗、划分训练 / 测试

选基模型

如随机森林、SVM、XGBoost

网格 + CV

在训练集上搜最佳超参数

重训与测试

最佳配置全量重训,测一次

想巩固「参数如何被训练出来」?可延伸阅读:通俗理解梯度下降线性回归详解
总结

带走这几条

返回首页