当种子对模型性能有很大影响时该怎么办?

数据挖掘 机器学习 数据科学模型
2022-02-11 21:22:26

我为图像识别任务设置了一个训练程序。每次训练模型时,我都会记录训练损失、验证损失、验证精度和验证召回。

最近我从 EfficientNet 切换到了基于 ResNet 的模型。两个模型都是预训练的,所以权重初始化是确定性的。使用旧模型,我使用完全相同的参数进行了 5 次实验(每个实验 5 倍),仅改变种子并得到大约 0.001 标准偏差的验证损失。使用新模型,我用完全相同的参数进行了 3 次实验(也有 5 次折叠),得到的验证损失标准差为 0.028。

这种高方差使得在使用新模型运行新实验时很难解释更改非种子参数的影响,因为在许多情况下,性能差异位于一个标准偏差内。每个实验需要多个小时,因此针对每种条件运行多个实验是不可行的。

遇到这种情况怎么办?

2个回答

这只是一个简单的想法,我经常建议您了解在这种情况下会发生什么:

您可以尝试进行消融研究,使用不同大小的训练数据(例如 10%、20%、...、100% 的完整训练数据)训练模型。鉴于您的问题是不稳定的,最好使用不同的随机子集对每个大小进行多次。然后将性能绘制为数据大小的函数,例如使用箱线图以可视化方差。考虑到模型的复杂性,性能的演变(及其方差)将向您展示是否有足够的训练数据:如果是,则曲线会增加,然后开始稳定在其最大值附近。如果不是,则曲线在达到 100% 时仍处于增加阶段,这意味着需要更多数据才能使模型稳定。

当然缺点是你需要多次运行训练/测试,所以这可能不实用。

好的,所以不是一个完整的答案,但我会提到,在我的例子中,简单地训练更多的时期可以减少模型方差:

在此处输入图像描述

如您所见,训练 9 个 epoch 会产生更低且更一致的 val loss 结果。事情仍然有点不可行,因为单个 9 epoch 实验需要 > 6 小时,但它是一些东西。