学习率是什么?决定模型每次调整参数步子有多大的超参数
学习率(Learning Rate)是机器学习中的一个超参数,用来决定训练过程中每次更新模型参数的步长。它是优化过程中的关键因素,对模型最终的性能有重大的影响。学习率通常在训练开始之前选定,也常常在训练过程中按照一定的规则调整。
一个下山的比喻
训练模型,可以想象成一个人蒙着眼睛下山,目标是找到山谷的最低点,也就是损失最小的地方。每一步,他都用脚感受一下哪个方向的坡度最陡、往下降得最快,这就是计算梯度;然后朝那个方向迈出一步,这就是更新参数。学习率决定的,就是每一步迈多大。
步子太大,也就是学习率过高:每一步都可能迈过头,越过了谷底,冲到对面的山坡上,然后又迈回来,来回震荡,始终无法稳定在最低点;严重时甚至会越走越高,损失变得越来越大,训练彻底失败,这叫发散。步子太小,也就是学习率过低:每一步都只挪一点点,虽然方向是对的,但要走非常非常多步才能到达谷底,训练极其缓慢;而且可能被困在一个不太深的小坑里,也就是局部最优点,再也走不出来。合适的学习率,能让模型又快又稳地找到好的解。
学习率调度
实践中,学习率往往不是固定不变的,而是在训练过程中按照一定的策略变化,这叫学习率调度。预热(Warmup):训练刚开始时,模型的参数是随机的,梯度可能很大、很不稳定,如果一上来就用较大的学习率,容易导致训练崩溃。所以先用很小的学习率,在开始的若干步内逐渐增大到设定值。大模型的训练几乎都会使用预热。衰减:随着训练的进行,模型逐渐接近最优点,需要更精细的调整,于是逐渐减小学习率,就像快到谷底时放慢脚步、小步挪动,找到更准确的最低点。常见的衰减方式有阶梯式衰减、指数衰减,以及在大模型中非常常用的余弦衰减:学习率按照余弦曲线的形状平滑地下降。
自适应的学习率
Adam、AdaGrad、RMSProp 等优化器会为每个参数自动地调整有效的学习率:变化剧烈的参数步子小一些,变化平缓的参数步子大一些。但即使使用这些优化器,仍然需要设定一个基础的学习率。
怎么选择学习率
学习率通常需要通过实验来确定:可以尝试一组不同数量级的值,比如 0.1、0.01、0.001,在验证集上比较效果;也可以用“学习率范围测试”的方法,从很小的学习率开始逐渐增大,观察损失的变化,找到损失下降最快的区间。经验上,微调预训练模型时,通常使用比从头训练小得多的学习率,以免破坏模型已经学到的知识。学习率也和批次大小有关:批次越大,通常可以使用越大的学习率。