17 模型评估与调优之超参数调优
系列进度
深度学习入门 · 第 17 / 24 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
超参数调优最怕凭感觉乱试。更好的做法是先建立基线,再按学习率、模型容量、正则化等顺序逐步调整,并记录每次变化。
建立一张实验表:改了什么、训练 loss、验证指标、耗时、结论。没有记录的调参,很难复盘。
在进行深度学习模型的构建与评估时,超参数的调优是一个至关重要的步骤。上一节中,我们讨论了常用的评估指标,这些指标为我们提供了模型性能的初步理解。在这一节中,我们将深入探讨如何有效地进行超参数调优,以提升模型的表现,并最终实现更好的预测效果。
什么是超参数?
超参数是模型训练过程中的一些设置,这些设置并不是通过学习算法学习到的,而是由我们手动设定的。其中包括:
做超参数调优时,先固定基线,再逐步比较学习率、批量大小、网络深度、正则化和训练轮数。
- 学习率:控制模型在更新参数时的步长。
- 批量大小:每次训练中使用的样本数。
- 层数和每层的神经元数量:影响模型的复杂程度。
- 正则化参数:控制模型复杂度,防止过拟合。
例如,在一个简单的深度神经网络中,如果我们设置了学习率为 0.001,批量大小为 32,那么这些都是超参数。
超参数调优方法
1. 手动搜索
读《模型评估与调优之超参数调优》时,先确定要解决的场景,再把关键概念和练习动作串起来。这样读到细节时,不容易只记住零散名词。
手动搜索是一种最简单的调优方法。您可以从一组初始的超参数设置开始,训练模型并观察其性能。然后,根据结果,您可以手动调整这些超参数。
例如,我们可以尝试以下条件:
# 假设使用了 Keras 定义了一个模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, batch_size=32, epochs=10, validation_data=(X_val, y_val))
通过观察不同的学习率和批量大小,我们可以逐步优化模型。
2. 网格搜索 (Grid Search)
网格搜索是一种系统化的调优方法。我们可以为多个超参数定义一个值的集合,并通过穷举法搜索所有可能的超参数组合。
例如,使用 GridSearchCV 方法:
from sklearn.model_selection import GridSearchCV
param_grid = {
'batch_size': [16, 32, 64],
'epochs': [10, 20],
'learning_rate': [0.001, 0.01, 0.1]
}
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, scoring='accuracy')
grid_search.fit(X_train, y_train)
当您运行上述代码时,系统将尝试每种组合以找到最佳参数。
3. 随机搜索 (Random Search)
与网格搜索相比,随机搜索在超参数的选取上更加灵活。它从预定义的参数分布中随机选择参数组合,从而可以更快地找到接近最优的超参数。
from sklearn.model_selection import RandomizedSearchCV
param_dist = {
'batch_size': [16, 32, 64],
'epochs': [10, 20],
'learning_rate': [0.001, 0.01, 0.1]
}
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=10, scoring='accuracy')
random_search.fit(X_train, y_train)
这里的 n_iter 表示我们要随机选择的组合数量。
4. 贝叶斯优化
贝叶斯优化是一个更智能的超参数调优方法。它利用贝叶斯理论进行模型的选择,以最小化函数评估的次数。库如 Hyperopt 和 Optuna 提供了强大的贝叶斯优化功能。
from hyperopt import fmin, tpe, hp
# 定义目标函数
def objective(params):
model = create_model(params)
model.fit(X_train, y_train)
accuracy = model.evaluate(X_val, y_val)
return -accuracy # 返回负值,因为我们希望最大化准确率
space = {
'batch_size': hp.choice('batch_size', [16, 32, 64]),
'learning_rate': hp.loguniform('learning_rate', 0, 1)
}
best_params = fmin(objective, space, algo=tpe.suggest, max_evals=50)
评估效果
在调优完超参数后,仍然需要使用在第一节中提到的评估指标来评估模型的最终效果。我们可以在验证集上计算准确率、召回率等,以确保模型的泛化能力。
复习《模型评估与调优之超参数调优》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。
练习《模型评估与调优之超参数调优》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。
小结
超参数调优是提升模型性能的重要步骤。通过手动搜索、网格搜索、随机搜索和贝叶斯优化等方法,我们可以找到最佳的超参数组合,从而提高模型的准确率。在下一节中,我们将探讨如何避免过拟合,确保模型在新数据上表现良好。在调整超参数时请牢记,寻找合适的超参数组合是一个迭代过程,需要结合经验和直觉。希望这篇文章能为您在超参数调优的过程中提供一些有用的指导。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
模型评估与调优之超参数调优适合谁读?
这是 深度学习入门 系列第 17 / 24 篇,适合正在学习深度学习入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇深度学习入门教程要多久?
按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读