关于使用SGD时如何选择初始的学习率(这里SGD是指带动量的SGD,momentum=0.9):
训练一个epoch,把学习率从一个较小的值(10-8)上升到一个较大的值(10),画出学习率(取log)和经过平滑后的loss的曲线,根据曲线来选择合适的初始学习率。
从上图可以看出学习率和loss之间的关系,最曲线的最低点的学习率已经有了使loss上升的趋势,曲线的最低点不选。最低点左边的点都是可供选择的点,但是选择太小的学习率会导致收敛的速度过慢,所以根据上图我们可以选择0.01(10-2)为初始的学习率。
关于学习率的调整策略,在使用SGD时不建议使用指数型连续下降的调节方法,建议使用阶梯式调节学习率的方法。每隔一定数量的epoch学习率调节为之前的0.1倍(根据自己实际任务调节每个阶段迭代epoch的数量)。
如果不想使用上述方法,这里提供几个经验值供选择,fine-tune模型初始学习率可设置为0.01,从头开始训练模型学习率可设置为0.1(仅供参考)。
供参考的寻找初始学习率的pytorch代码(根据自己的任务进行修改):
def find_lr(init_value = 1e-8, final_value=10., beta = 0.98