超参数
“超参数”(Hyperparameter)是在机器学习模型训练开始之前需要人为设定的参数,它们不是通过训练数据自动学习得到的,而是由开发者或研究人员根据经验、实验或调优策略来指定的。
定义
在训练开始前由开发者手动设定的配置项。
作用
控制模型结构、训练过程或正则化方式。
如何获得
不能从数据中学到,需通过经验、实验或调优方法确定。
是否需要人工设定
✅ 是。
为什么超参数重要?
超参数对模型性能影响极大。例如:
- 学习率太大 → 模型不收敛;
- 学习率太小 → 训练太慢甚至陷入局部最优;
- 正则化太强 → 欠拟合;
- 网络太深但数据太少 → 过拟合。
因此,超参数调优(Hyperparameter Tuning) 是机器学习工作流中的关键步骤。
常见的超参数调优方法
- 手动调参:基于经验尝试;
- 网格搜索(Grid Search):遍历预设的参数组合;
- 随机搜索(Random Search):随机采样参数组合,通常比网格更高效;
- 贝叶斯优化(Bayesian Optimization):智能地选择下一个最有希望的参数;
- 自动化工具:如 Optuna、Ray Tune、Hyperopt、Keras Tuner 等。
模型参数
模型在训练过程中自动学习的内部变量。
作用
直接决定模型的预测结果。
如何获得
通过优化算法(如梯度下降)从训练数据中学习得到。
是否需要人工设定
❌ 不需要,由训练过程自动更新。
例子
假设训练一个神经网络:
模型参数(Parameters)
神经网络中的权重(weights)和偏置(biases)。这些是模型在训练过程中自动学习的——通过反向传播和梯度下降不断调整。
| 模型类型 | 模型参数 |
|---|---|
| 线性回归 | 权重 w_1, w_2, ... ,w_n ,偏置 b |
| 神经网络 | 所有层的权重矩阵 W 和偏置向量 b |
| 逻辑回归 | 权重和偏置 |
| 支持向量机(SVM) | 支持向量对应的系数(在对偶形式中) |
超参数(Hyperparameters)
不能被模型自己学会,必须在训练前就定好:
| 类别 | 超参数示例 |
|---|---|
| 模型结构 | 神经网络层数、每层神经元数、卷积核大小、注意力头数 |
| 优化相关 | 学习率(learning rate)、优化器类型(Adam/SGD)、批量大小(batch size) |
| 训练设置 | 训练轮数(epochs)、早停耐心值(patience) |
| 正则化 | L1/L2 正则化系数(λ)、Dropout 比例、数据增强强度 |
代码例子(神经网络)
用 PyTorch 训练一个全连接网络:
model = nn.Sequential(
nn.Linear(784, 128), # ← 这里的 784 和 128 是超参数(结构设计)
nn.ReLU(),
nn.Linear(128, 10)
)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001) # ← lr=0.001 是超参数
模型参数:
Linear层中的权重矩阵和偏置向量(训练时自动更新)。超参数:输入/输出维度
(784, 128, 10)、激活函数类型、优化器类型、学习率0.001。
二者关系图
你(开发者)
│
├── 设定超参数 ──▶ 控制 ──▶ 模型结构 & 训练过程
│ │
│ ▼
训练数据 ───────────▶ 模型自动学习 ──▶ 模型参数
│
▼
预测结果
超参数 vs 模型参数 对比
| 项目 | 模型参数(Parameters) | 超参数(Hyperparameters) |
|---|---|---|
| 是否自动学习? | ✅ 是(通过训练) | ❌ 否(需人工设定) |
| 例子 | 权重、偏置 | 学习率、网络结构、正则化强度 |
| 数量 | 通常非常多(百万级) | 相对较少(几个到几十个) |
| 调整方式 | 由优化算法自动更新 | 通过交叉验证、网格搜索、贝叶斯优化等手动/自动调优 |