我正在Kaggle上进行一场比赛。首先,我用比赛数据集训练了一个Longformer基地,并在排行榜上取得了相当好的成绩。由于CUDA内存限制和时间限制,我只能训练2个批大小为1的时期。损失大约从2.5开始,在训练结束时逐渐减少到0.6。
然后,我用节省下来的重量继续训练了两个时期。这一次,我使用了稍大的学习率(Longformer论文中的学习率(,并将验证数据添加到训练数据中(这意味着我不再将数据集拆分为90/10(。我这样做是为了取得更好的成绩。
然而,这一次损失从大约0.4开始,并在第一个时期的大约一半时不断增加到1.6。我停下来是因为我不想浪费计算资源。
我应该多等一会儿吗?它最终能带来更好的测试结果吗?我认为这个模型一开始可能有点过拟合。
您的模型在第一次训练时就适应了原始训练数据。当您第二次将验证数据添加到训练集时,训练数据的分布一定发生了显著变化。因此,由于您的模型不熟悉这种新的分布,因此在第二次培训中损失增加了。
你应该多等一会儿吗?是的,损失最终会减少(尽管不一定要低于最初的训练损失(
它能带来更好的测试结果吗?可能这取决于您的验证数据是否包含以下模式:
- 尚未出现在您的训练数据中
- 与您的模型在部署中遇到的类似
事实上,训练损失的增加可能会导致训练准确性的提高。准确度与任何损失函数都不是完全(负(相关的。这仅仅是因为损失函数是模型输出的连续函数,而精度是模型输出来的离散函数。例如,预测低置信度但总是正确的模型是100%准确的,而预测高置信度但偶尔出错的模型可以产生较低的损失值,但精度低于100%。