返回 Ultralytics 术语表
Hyperparameter Tuning
超参数调优旨在找出能最大限度提升验证集表现的训练设置。内容比较网格搜索、随机搜索、贝叶斯搜索和进化搜索。
超参数调优旨在寻找能让机器学习模型在留出数据上获得最佳性能的训练设置。超参数在训练开始前固定,与训练过程中从数据中学到的模型权重不同。每种候选配置都必须通过训练模型并在验证数据上评估来打分,因此调优是构建模型时计算量最大的步骤之一,选择好的搜索策略和选择要搜索的值同样重要。
常见超参数#
- 优化:学习率及其调度、动量、权重衰减,以及优化器的选择,例如 SGD 或Adam 优化器。学习率通常影响最大,搜索时会使用对数刻度。
- 训练时长和批处理:轮数、预热时长和批量大小。
- 数据增强:每种变换的概率和强度,例如翻转、缩放、颜色偏移和马赛克增强。
- 损失权重:用于平衡复合损失函数中各项的增益,例如检测器中的边界框损失和分类损失。
搜索方法#
从业者使用几种常见策略,在可能的配置空间中进行探索:
- 网格搜索:训练固定值列表中的每一种组合。它简单且穷尽,但每增加一个超参数,计算成本都会相应增加。
- 随机搜索:从允许的范围内随机采样配置。Bergstra 和 Bengio 证明,相比网格搜索,随机搜索只需极少一部分计算量,就能找到同样好或更好的模型;这是因为对于任何给定问题,真正影响较大的超参数只有少数几个,而随机采样能为每个超参数尝试更多不同的值。
- 贝叶斯优化:拟合一个代理模型,预测分数如何取决于超参数,并在最可能带来改进的区域选择下一次试验。像Optuna这样的库默认采用这种方法。
- 提前终止方法:Hyperband和逐次减半会先用少量预算启动许多配置,然后只给最有前景的配置分配更多轮数。
- 进化算法:将每种配置视为一个基因组,通过选择和变异来改进一组配置。
进化搜索#
进化搜索适用于包含许多相互作用超参数的训练任务,因为它不需要搜索空间模型,只需要为每次试验计算适应度分数。每一轮都会从目前找到的最佳配置中选出一个,对其中一些值进行变异,用变异后的结果训练,并在新配置得分较高时将其保留在候选池中。
Ultralytics 调优器会为 YOLO 训练运行这一循环:每次迭代都会从适应度最高的九个结果中选出一个父代,对最多 26 个超参数中大约一半进行变异,这些超参数涵盖学习率、损失增益和数据增强;检测任务的适应度分数为mAP50-95。官方 YOLO26检查点的COCO 阶段超参数就是通过这种进化搜索找到的。
from ultralytics import YOLO
# 加载预训练的 YOLO26n 模型
model = YOLO("yolo26n.pt")
# 搜索空间:每个待调优超参数的(最小值,最大值)边界
search_space = {"lr0": (1e-5, 1e-2), "degrees": (0.0, 45.0)}
# 30 次迭代中的每一次都会使用新变异的值训练 10 轮
model.tune(data="coco8.yaml", epochs=10, iterations=30, space=search_space, plots=False, save=False, val=False)运行会将 best_hyperparameters.yaml、每次迭代适应度图,以及最佳迭代的权重写入 tune 目录。除非指定优化器,否则 model.tune() 会使用 AdamW 进行训练,因为默认的 optimizer="auto" 会覆盖已调优的 lr0。
超参数调优与相关术语的比较#
- 模型训练:训练通过反向传播,为一组固定的超参数学习权重。调优则是外层循环,会多次运行训练并比较结果。
- 微调:尽管名称相似,微调是指在新数据上继续训练预训练模型的权重。微调也有需要调优的超参数,例如更低的学习率和冻结层的数量。
- 神经架构搜索(NAS):搜索网络结构,例如层类型和宽度,而不是训练设置。
- 自动机器学习(AutoML):自动化更广泛的流程,包括模型选择和数据预处理,超参数调优是其中一个环节。
- 对验证集过拟合:数百次调优试验都在同一验证集上打分,可能会偶然选出适合该验证集的设置,因此最终结果应在调优过程中从未使用过的独立测试集上评估。










