回调
探索回调在机器学习中的重要作用——这些工具可以监控、控制和自动化模型训练,从而提高准确性、灵活性和效率。
在机器学习中,回调是在模型训练过程中的特定点执行的自动化脚本或函数。可以将其视为训练框架在预定义阶段(例如在epoch、训练批次或整个训练会话的开始或结束时)遵循的一组指令。回调为开发人员提供了一种强大的机制来监控、控制和自动化训练的各个方面,而无需更改模型或训练循环的核心代码。它们是构建高效且强大的机器学习 (ML) 管道的重要工具。
回调如何工作
当您训练一个 神经网络 (NN),该过程涉及迭代一个 数据集 多个 epoch。训练循环管理这个过程,其中包括将数据馈送到模型,计算 损失函数,以及更新 模型权重 通过 反向传播。回调会在特定事件挂钩到此循环中。 例如,一个 on_epoch_end callback 将在每个 epoch 完成后精确地执行其代码。这允许进行动态干预,例如调整 外部配置设置,保存模型的最佳版本,或者在性能停滞时提前停止训练。 这种自动化是结构良好的 机器学习工作流程.
实践案例
Callback 广泛应用于各种计算机视觉 (CV)任务中,以改善训练结果。
- 保存最佳目标检测模型: 在训练用于目标检测的Ultralytics YOLO模型时,您可以使用ModelCheckpoint回调。此回调监控验证数据集上的平均精度均值 (mAP)。仅当mAP分数与先前保存的最佳分数相比有所提高时,它才会将模型的权重保存到文件中,从而确保您保留最准确的模型。您可以在我们的模型比较页面上查看不同模型的性能。
- 防止图像分类中的过拟合:想象一下在像ImageNet这样的复杂数据集上训练用于图像分类的模型。可以配置 EarlyStopping 回调来监视验证损失。如果验证损失在设定的 epoch 数内没有减少,则回调会自动停止训练。这可以防止模型过度拟合训练数据,并节省大量的训练时间和计算成本。您可以了解更多关于图像分类任务以及如何实施它们的信息。
Callbacks 与其他概念
区分回调与其他相关术语很有帮助:
- 函数: 虽然回调是一种函数,但它的定义特征是它作为参数传递给另一个函数(训练循环),并且由该函数在特定时间在内部调用。标准函数通常由程序员直接调用。
- 钩子 (Hooks): 在软件工程中,钩子是一个更通用的术语,指的是代码中允许插入自定义逻辑的位置。机器学习框架中的回调是钩子概念的一个具体实现,专门针对模型训练生命周期的事件。
- 超参数调优: 这是为模型寻找最佳超参数(如学习率或批量大小)的过程。回调函数可以辅助超参数调优,例如,通过实现学习率调度器,但它们本身并不是调优过程。调优过程是一种更高级别的搜索或优化程序。
使用回调函数的优势
将回调集成到训练过程中具有以下几个显著优势:
- 自动化: 回调可自动执行重复性任务,例如保存模型、使用 TensorBoard 等工具记录指标以及调整参数,从而减少长时间训练运行期间手动干预的需要。
- 灵活性和定制: 它们允许开发人员将自定义逻辑插入到训练循环中,而无需修改核心框架代码,从而实现高度定制的训练行为。这对于复杂的实验或实施高级训练技术特别有用。
- 效率: 像 Early Stopping 和动态学习率调整这样的回调可以通过节省计算资源并可能加速模型收敛来提高训练效率。
- 洞察和监控: 它们通过启用随时间推移的指标的详细日志记录和可视化,提供对训练动态的深入洞察,这对于模型评估至关重要。
- 可复现性: 通过标准化训练期间采取的行动(例如,保存标准、停止条件),回调有助于提高机器学习实验的可复现性。
诸如 Keras 和 PyTorch Lightning 之类的框架提供了大量的内置回调和简单的接口,用于创建自定义回调。Ultralytics 还在其训练管道中利用回调,从而提高了 Ultralytics YOLOv8 和 Ultralytics HUB 平台等工具的稳健性和用户友好性。查阅 Ultralytics 文档 可以提供更多与 YOLO 模型训练相关的具体示例。