在机器学习和深度学习中,我们通常不会用全部数据来训练模型,而是将其划分为三个独立的部分:训练集、验证集和测试集。
这就像一个学生准备考试一样:
1. 训练集 (Training Set)
训练集是学生上课时做的所有练习题。
- 作用:用来训练模型。模型通过在训练集上学习数据中的模式和规律,并根据这些规律来调整自己的参数(权重和偏置)。
- 在你的代码中:
train_dataloader
提供的就是训练集数据,用于在每个 epoch 中进行前向传播和反向传播,以更新模型参数。
2. 验证集 (Validation Set)
验证集是学生做的模拟卷或课后作业。
- 作用:用来在训练过程中评估模型的性能。由于模型在训练时会“记住”训练集的内容,为了确保模型具有泛化能力(即能处理新数据),我们必须用它从未见过的数据来定期检验。验证集可以帮助我们:
- 调整超参数:例如,选择最合适的学习率、隐藏层数量等。
- 防止过拟合:如果模型在训练集上表现越来越好,但在验证集上表现开始变差,就说明模型可能过拟合了,这时我们应该停止训练。
- 在你的代码中:你的代码中没有显式地使用验证集,而是用测试集来代替评估过程。在更严谨的实践中,这两个集是分开的。
3. 测试集 (Test Set)
测试集是学生最终的期末考试。
- 作用:用来最终评估模型的性能。在模型训练和超参数调整都完成后,我们会使用测试集来得到一个模型在真实世界数据上的最终性能指标(如准确率)。
- 为什么需要它:测试集是一个完全独立且“神圣”的数据集,它在训练和验证的任何阶段都不能被模型看到。这样做是为了确保最终的评估结果是公正、客观的,能够真实反映模型在处理全新数据时的能力。
- 在你的代码中:
dev_dataloader
提供的就是测试集数据,用来计算每个 epoch 结束时的准确率。
总结
- 训练集:让模型学习。
- 验证集:帮助你调整模型和超参数。
- 测试集:提供一个无偏的最终评估。
正确地划分和使用这三个数据集是构建健壮、可靠的机器学习模型的关键步骤。