18 模型超参数调优
系列进度
PyTorch 入门 · 第 18 / 20 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
PyTorch 调参不应该一上来做大范围搜索。先用小实验确认学习率、batch size、模型容量和训练轮数的大致范围。
我会用少量数据跑短实验,先看 loss 是否能下降。小实验都不稳,完整训练通常也不会好。
在机器学习中,模型的性能往往取决于多个因素,其中之一就是超参数的选择。在上一篇文章中,我们讨论了过拟合与正则化的内容,了解了如何通过正则化技术来防止模型的过拟合。而在本篇中,我们将深入探讨如何通过超参数调优来进一步提升模型的性能。
什么是超参数?
超参数是指在模型训练过程之前设置的参数,这些参数不是通过学习得到的,而是由开发者手动指定的。常见的超参数包括:
调优 PyTorch 模型时,先看学习率、batch size、优化器、权重衰减、训练轮数和验证曲线。
- 学习率(learning rate)
- 批大小(batch size)
- 网络层数(number of layers)
- 每层的神经元数量(number of neurons per layer)
- 正则化强度(regularization strength)
选择合适的超参数可以显著提升模型的准确性,而错误的选择则可能导致欠拟合或过拟合。
超参数调优的方法
网格搜索(Grid Search)
开始读《模型超参数调优》前,可以先看图中从问题到结果的路径。读完后再对照正文,确认自己能不能照着复现。
网格搜索是最常用的超参数调优方法之一。它通过定义一个可能的超参数值列表并穷举所有可能的组合来寻找最佳的超参数配置。
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
# 定义参数网格
param_grid = {
'C': [0.1, 1, 10],
'kernel': ['linear', 'rbf']
}
# 创建支持向量机模型
svc = SVC()
# 创建网格搜索对象
grid_search = GridSearchCV(svc, param_grid, cv=5)
# 拟合数据
grid_search.fit(X_train, y_train)
# 输出最佳参数
print("Best parameters:", grid_search.best_params_)
随机搜索(Random Search)
与网格搜索相比,随机搜索并不是遍历所有参数的组合,而是在指定的参数空间中随机选择一定数量的组合进行评估。这种方法在参数空间较大时更加高效。
from sklearn.model_selection import RandomizedSearchCV
import numpy as np
# 定义随机参数分布
param_dist = {
'C': np.logspace(-3, 3, 7),
'kernel': ['linear', 'rbf']
}
# 创建随机搜索对象
random_search = RandomizedSearchCV(svc, param_distributions=param_dist, n_iter=10, cv=5)
# 拟合数据
random_search.fit(X_train, y_train)
# 输出最佳参数
print("Best parameters:", random_search.best_params_)
贝叶斯优化(Bayesian Optimization)
贝叶斯优化是一种基于贝叶斯推断的智能搜索方法。与网格搜索和随机搜索不同,贝叶斯优化通过学习超参数与模型性能之间的关系来逐步优化超参数。
虽然贝叶斯优化的实现相对复杂,但可以使用库如 BayesianOptimization 来简化这个过程。
from bayes_opt import BayesianOptimization
# 定义目标函数
def black_box_function(C, gamma):
model = SVC(C=C, gamma=gamma)
model.fit(X_train, y_train)
return model.score(X_test, y_test)
# 设置参数空间
pbounds = {'C': (0.1, 10), 'gamma': (0.01, 1)}
# 创建贝叶斯优化对象
optimizer = BayesianOptimization(f=black_box_function, pbounds=pbounds, verbose=2)
# 进行优化
optimizer.maximize(init_points=5, n_iter=25)
# 输出最佳参数
print("Best parameters:", optimizer.max)
调优的注意事项
-
交叉验证:在超参数调优时,使用
交叉验证是非常重要的。通过交叉验证,你可以有效评估模型在未见数据上的性能,从而避免过拟合。 -
评估指标选择:选择合适的评估指标来衡量模型的性能非常关键。对于分类任务,可以使用准确率、F1-score、ROC-AUC等,而对于回归任务,可以使用均方误差(MSE)、均方根误差(RMSE)等。
-
超参数之间的关系:某些超参数可能相互影响,因此在调优时应该同时关注它们的组合效果。
-
学习曲线:绘制学习曲线有助于观察模型在不同超参数下的表现,从而选择出最佳的超参数设置。
学完《模型超参数调优》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。
如果想把《模型超参数调优》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。
总结
在模型评估与调优的过程中,超参数的选择是至关重要的一步。在本文中,我们介绍了多种超参数调优的方法,包括网格搜索、随机搜索和贝叶斯优化。每种方法都有其适用的场景和优缺点。
运用这些技术后,接下来我们将步入学习的总结阶段,回顾在整个学习过程中的心得与收获,帮助我们更好地掌握 PyTorch。
请继续关注下一篇文章,探讨我们在学习过程中的总结与体会。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
模型超参数调优适合谁读?
这是 PyTorch 入门 系列第 18 / 20 篇,适合正在学习PyTorch 入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇PyTorch 入门教程要多久?
按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读