是什么导致损失曲线呈肘形?

机器算法验证 深度学习 损失函数 随机梯度下降
2022-04-12 11:20:08

FractalNetResnet 的文章,我想知道是什么原因导致损失曲线形成这种形状:

在此处输入图像描述 在此处输入图像描述

学习速度停滞不前,然后突然显着下降。引起我注意的是,这发生在大约数个时期,这表明人为因素。

事实上,对于 FractalNet,我发现这篇文章是这样写的:

对于 CIFAR/SVHN,只要剩余 epoch 的数量减半,我们就会将学习率降低 10 倍。

我的问题是,显然尤其是在 FractalNet 的情况下,在 200 纪元之前,高原已经存在了相当长的一段时间。(a)尽快降低学习率或(b)使用一些线性学习率降低方案不是更好吗?

至少从视觉上看,这似乎可以将学习速度至少加快 25%。

有什么理由不使用它吗?只是添加超参数的额外开销?

如果只是一篇论文,我认为他们只是没有打扰,但看到这一点让我怀疑我错过了更大的东西。

1个回答

在考虑学习率时,学习速度会变慢有 3 个原因:

  1. 已达到最佳值(或至少是局部最小值)
  2. 学习率太大,我们超出了我们的目标
  3. 我们处于一个梯度非常小的平台,学习率太小,无法让我们快速到达那里。

现在一个问题是确定你处于哪种情况。降低学习率会帮助还是使问题变得更糟?如果我们需要降低学习率,我们需要做多快?
对于 FractalNet,我们看到 50-200 时期的性能很差,但 1-50 时期的表现相当不错。毫无疑问,以线性方式降低学习率会降低前 50 个 epoch 的性能。另一方面,该算法可能在 50-200 个 epoch 中发现了一个平台,因此不能确定较低的学习率是否会提高这些 epoch 的性能。那么我们该怎么办?我们是否会线性降低学习率,如果是这样的话,速度有多快?有多种方法可以解决这个问题。一个有趣的例子是基于动量的方法,我们试图过滤掉重复的超调。问题是完美的解决方案因问题而异,需要进行相当多的测试才能确定哪种方法效果最好。