验证损失增加,而训练损失减少

机器算法验证 深度学习 卷积神经网络
2022-03-16 10:56:33

我正在训练一个模型,并且训练集和验证集的准确性都提高了。我使用的是预训练模型,因为我的数据集非常小。我不确定为什么在验证的微调过程中损失会增加: 在此处输入图像描述 而从头开始训练时,损失会减少,类似于训练: 在此处输入图像描述

我在这里也添加了精度图:微调精度: 在此处输入图像描述

从零开始训练准确性: 在此处输入图像描述

预训练中使用的模型在训练集中没有所有的类/也没有精确的模式。这是否解释了为什么微调没有提高准确性,并且与微调相比,从头开始的训练有一点点增强?

额外的信息:

我正在使用 C3D 模型,它首先将一个视频分成几个“堆栈”,其中一个堆栈是由 16 帧组成的视频的一部分。我正在尝试从视频中学习动作。

C3D模型由5个卷积层和3个全连接层组成:https ://arxiv.org/abs/1412.0767

预训练数据集:11 个类,6646 个视频分为 94069 个堆栈训练数据集:18 个类(有 11 个与预训练“几乎相似”的类),657 个视频分为 6377 个堆栈

在微调中,我不会冻结任何层,因为与用于预训练的数据集中的视频相比,训练中的视频位于不同的位置,并且在视觉上与预训练视频不同。接下来我正在尝试用全连接层中的少量神经元来训练模型。

学习率从 lr = 0.005 开始,在第 4、8、12 步之后,在预训练和微调阶段分别降低 10、100、1000

1个回答

这是一个过拟合的例子。随着训练持续到模型的学习能力饱和,训练损失将始终趋于改善。当训练损失减少但验证损失增加时,您的模型已经达到停止学习一般问题并开始学习数据的程度。

你说你使用的是预训练模型?这个预训练模型很可能是通过提前停止训练的:来自特定时期的实现最低验证损失的网络参数被保存并提供给这个预训练模型。如果是这种情况(很可能是这样),则意味着任何进一步的微调都可能使网络在泛化到验证集时变得更糟,因为它已经实现了最佳泛化。

从头开始训练时,您没有看到验证损失在训练率随着时间的推移而下降,因此在从头开始训练时,任何过度拟合的影响都会得到缓解。微调预训练模型时,优化器从训练速率计划的开始就开始,因此从高训练速率开始,导致损失迅速减少,因为它过度拟合训练数据,反之验证损失迅速增加。n

既然您说您正在使用新的训练数据进行微调,我建议您尝试更低的训练率(0.0005 美元)和不那么激进的训练计划,因为该模型仍然可以学习更好地泛化到您视觉上不同的新训练数据,同时保持良好的对其原始数据集进行预训练的泛化属性。