验证显示巨大的波动。可能是什么原因?
数据挖掘
图像分类
美国有线电视新闻网
损失函数
2021-10-04 09:03:50
2个回答
通过对您的情节的简单检查,我可以得出一些结论并列出要尝试的内容。(这是在不了解您的设置的情况下:训练参数和模型超参数)。
看起来损失正在减少(通过验证损失放置一条最佳拟合线)。看起来你可能可以训练更长时间来改善结果,因为曲线仍然向下。
首先,我将尝试回答您的标题问题:
验证损失波动的原因是什么?
我能想到三种可能:
- 正则化- 帮助平滑学习过程并使模型权重更加稳健。添加/增加您的正则化将防止引入对权重的大量更新。
- 批量大小- 它是否相对较小(例如 < 20?)。这意味着在网络末端测量的平均误差仅使用几个样本来计算。假设批量大小为 ,
8
那么在查看损失时,获得4/8
正确与获得正确相比6/8
具有较大的相对差异。对如此小批量的误差取平均值将导致损失曲线不太平滑。如果您有足够的 GPU 内存/RAM,请尝试增加批量大小。 - 学习率- 可能太大。这类似于关于正则化的第一点。为了更顺利地进行改进,您可能需要在接近损失最小值时放慢学习速度。
6
你可以让它按计划运行,每次验证损失没有改善时,例如时期,它就会减少一些因素(例如,将其乘以 0.5) 。这将阻止您迈出大步,然后可能会超过最小值并在它周围弹跳。
针对您的任务,我还建议您尝试解冻另一层,以增加微调的范围。根据您的数据,这将为 Resnet-18 提供更多的学习自由。
关于你的最后一个问题:
这是我应该担心的事情,还是应该只选择在我的性能指标(准确性)上得分最高的模型?
你应该担心吗?简而言之,没有。像你这样的验证损失曲线可以非常好并提供合理的结果;但是,在解决之前,我会尝试上面提到的一些步骤。
你应该只选择性能最好的模型吗?如果您的意思是将模型置于具有最佳验证损失(验证准确性)的位置,那么我会说要更加小心。在你上面的情节中,这可能相当于第 30 个时期左右,但我个人会采取一个训练得更多的点,曲线变得不那么不稳定。同样,在尝试了上述一些步骤之后。
我还建议您使用数据增强和过采样方法来补偿类的不平衡。这篇斯坦福论文解释了一些想法,您可以使用深度学习来实现图像分类中数据增强的有效性。
我希望这有帮助!