做法

Warm-up 做法一开始在 ResNet 中明确提到:

We further explore n = 18 that leads to a 110-layer ResNet. In this case, we find that the initial learning rate of 0.1 is slightly too large to start converging . So we use 0.01 to warm up the training until the training error is below 80% (about 400 iterations), and then go back to 0.1 and continue training.

...

With an initial learning rate of 0.1, it starts converging (<90% error) after several epochs, but still reaches similar accuracy.

完整的训练过程是:

  1. 使用学习率 0.01 训练模型到 training error 小于 80%(大概 400 步);
  2. 使用学习率 0.1 继续训练模型,每次 loss 平稳不变时就降低为 1/10 倍,降低两次。

如果一开始就用学习率 0.1 来训练,要很久才开始收敛(几个 epoch 之后);而如果使用 warm-up 技巧,则大大加快收敛速度,最终性能相当

问题来了,为什么这样做有效?

解释

在训练一开始,每个数据点都是模型未见过的,因此梯度较大,模型会很快根据数据进行调整,并很快地过拟合于一开始使用的数据,这导致在后面的过程中,需要经过多轮训练才能「矫正」这种过拟合。而较大的学习率,正加重了这一现象。

如果使用 较小的学习率,那么模型一开始的更新速度较慢,会见识到更多的数据,而不容易「过拟合」于一开始的少量数据,不容易学偏。一段时间之后,就可以调到正常的较大的学习率,使得模型正常学习,并且不容易跑偏。

当训练到一定阶段后,模型的分布就已经比较固定了,即接近 local optimal 了,因此 对学习率进行 decay,以便模型收敛到该 local optimal。

参考