在机器学习(ML)中,尤其是在训练深度学习模型时,一个纪元代表整个训练数据集通过学习算法的一次完整传递。训练模型是一个迭代过程,模型通过反复处理数据来学习模式。历元是一个基本的超参数,它定义了算法通过整个数据集的次数,允许模型多次从数据中的每个示例中学习。
纪元解释
在训练过程中,模型的内部参数或权重会根据其预测误差进行调整。这种调整通常使用梯度下降或其变体(如亚当优化器)等优化算法进行。一个历元意味着训练数据集中的每个样本都有机会更新一次模型的内部参数。对于大型数据集来说,一次性处理整个数据集的计算成本很高,因此通常会将数据分成较小的块,称为批次。
历时与迭代与批量大小
重要的是要将一个时代与相关术语区分开来:
- 批量大小:这定义了模型权重更新前处理的样本数量。
- 迭代:指完成一个历元所需的批次数。如果一个数据集有 1000 个样本,批次大小为 100,那么一次迭代需要 10 次迭代(1000 个样本/每批 100 个样本 = 10 批次/迭代)。每次迭代需要处理一个批次并更新模型权重。
- 周期:整个训练数据集的一个完整周期。在上例中,完成 10 次迭代即为一个历元。
把它想象成阅读一本书:整本书就是数据集,一个章节就是一批数据,阅读一个章节就是一次迭代,而阅读整本书的封面到封底就是一个纪元。
时代为何重要
历元数是一个关键的超参数,因为它决定了模型从完整数据集中学习的次数。
- 历时太短:如果模型的训练历时太短,它可能无法充分接触数据,从而无法有效学习基本模式。这会导致拟合不足,即模型在训练数据和未见测试数据上的表现都很差。
- 训练历元过多:相反,训练历元过多会导致过度拟合。在这种情况下,模型对训练数据的学习效果太好,包括其噪声和具体细节,从而失去了对新的、未见过的数据进行泛化的能力。模型可能会在训练集上显示出极佳的准确性,但在验证数据或测试数据上却表现不佳。
找到适当的平衡点是实现良好模型性能和泛化的关键。这通常需要在训练过程中监控模型在单独验证数据集上的表现。
确定纪元数
没有单一的 "正确 "历元数;最佳值取决于数据的复杂性、数据集的大小、模型架构和学习率。常见的方法包括
- 实验:尝试不同的计时次数并评估性能。
- 监控验证指标:跟踪验证集上的损失和准确率等指标。当这些指标停止改善或开始下降时,通常会停止训练,这种技术被称为 "早期停止"。
- 超参数调整:系统搜索最佳超参数,包括历时次数,通常使用自动工具或技术,如《Ultralytics 超参数调整指南》中的工具或技术。
真实案例
- 物体检测在训练 Ultralytics YOLO模型时,如 YOLOv8或 YOLO11在COCO 这样的大型数据集上,模型可能需要经过特定次数的训练,例如 100 或 300 次。在每个epoch期间,模型会处理 COCO 训练集中的所有图像,调整权重以更好地预测物体的边界框和类标签。Ultralytics HUB等平台,用户可以轻松管理这一训练过程,并监控不同历元的性能。
- 自然语言处理 (NLP):在为情感分析等任务训练BERT等大型语言模型时,需要向模型输入大量文本数据。由于数据集和模型的规模庞大,训练可能需要较少的历时(如 3-10 个历时)。每个历元都能确保模型看到一次整个文本语料库,从而完善其对与情感相关的语言细微差别的理解。像Hugging Face Transformers这样的框架通常会指定用于微调的默认历元数。
工具和框架
纪元是大多数深度学习框架的标准参数:
epochs是ML迭代学习的基石,它可以在充分接触数据的需求与过度拟合的风险之间取得平衡。正如斯坦福大学 CS231n 课程或 "机器学习大师 "博客等资源中讨论的那样,选择正确的历元数通常需要通过仔细的实验和监控,这是构建有效模型的关键。您可以在Google 机器学习词汇表等资源中找到更多定义。