6.11 学习率调节器
本章的前面几个小节我们详细介绍了从基础的梯度下降法,它的各种变体,到动量法及各种子子孙孙,再到Adam算法的发展演进过程。在随机梯度下降法中,我们提到过动态调整学习率是帮助模型快速收敛的有效办法,因为它是各类优化算法中的关键参数。本节咱们就专注于这个话题,介绍更多知识。
6.11.1 影响学习率主要因素
先来看看调整学习率时,需要考虑哪些因素:
模型的复杂度:较复杂的模型可能需要较小的学习率,因为复杂的模型更难拟合数据。
训练数据的规模:较大的训练数据集可以设置稍大的学习率,因为大的训练数据集可以提供更多的信息,模型也更容易拟合数据。
训练过程中损失函数的变化情况:如果损失函数的变化较小,可能需要调高学习率;如果损失函数的变化较大不稳定,就需要适当调低学习率。
目标任务的复杂度:较复杂的目标任务可能需要较小的学习率,因为复杂的任务更难拟合。
优化器的类型:不同的优化器可能对学习率的敏感度不同,需要根据实际情况进行一定调整。
Batch size:较小的batch size可能会带来较大的随机噪声,导致训练不稳定,一般设置为较小的学习率。
所谓“牵一发而动全身”,这样来形容学习率在深度学习优化算法中的作用一点也不为过。事实上,除了上述因素之外,还有许多其他的因素可能会影响调整学习率的效果,在实战中需要根据具体情况进行调整。这么复杂而关键的问题,光靠人工手动调整太复杂,因此科学家们希望这件事能够自动的进行,因此就涌现出了“学习率调节器”(Learning Rate Scheduler)。
6.11.2 学习率调节器
学习率调节器是在训练神经网络时用来控制学习率的方法,更好的模型更新步骤大小的值。当学习率过大时,模型会振荡或者发散,而当学习率过小时,模型的收敛速度会变慢。学习率调节器的作用就是帮助我们在训练过程中动态调整学习率,以便获得更好的模型训练效果。
学习率调节器的发展可以追溯到 20 世纪 60 年代,当时已经有人提出了调节学习率的方法。但是,直到 2012 年,学习率调节器才真正开始流行。这是因为在 2012 年,Geoffrey Hinton 和他的团队发表了著名的论文 "ImageNet Classification with Deep Convolutional Neural Networks",提出了一种名为 "AdaGrad" 的学习率调节器。在此之后,学习率调节器发展迅速,出现了许多新的方法,包括 "RMSProp"、"Adam" 和 "SGD with Warm Restarts" 等。这些方法在实践中表现出了良好的性能,因此被广泛使用。现在,学习率调节器已经成为训练神经网络的重要工具,并且在机器学习界广受好评。
目前常用的深度学习框架,如 PyTorch、TensorFlow、 Keras 等,都提供了内置的学习率调节器或者允许用户自定义学习率调节器。因此,在使用这些框架训练深度学习模型时,你可以直接使用这些框架提供的学习率调节器,也可以自己实现一个学习率调节器并使用。
我们来看看一些常见的学习率调节器及其代码实现。

注意,预热通常是在训练过程中的前几个 epoch 使用,并在达到一定的迭代次数后切换到其他的学习率调节方法。预热和学习率调节器是两个不同的概念,但是它们都可以用来调节学习率。
梗直哥提示:这部分的完整代码实现涉及到比较多的对pytorch框架的讲解,以及实战经验。限于篇幅,欢迎选修进阶课程《梗直哥深度学习必修课:python实战》
