1 基本概念

1.1 定义

学习率(Learning Rate)是机器学习深度学习优化过程中一个关键的超参数,它决定了模型参数在每次迭代中沿梯度方向更新步长大小。学习率不参与模型本身的推理计算,而是控制着梯度下降算法损失函数的搜索行为。

1.1.1 数学表达式

在标准的梯度下降更新规则中,学习率通常记作 \(\eta\) 或 \(\alpha\),其数学表达式为:

\[ \theta_{t+1} = \theta_t - \eta \cdot \nabla_\theta J(\theta_t) \]

其中 \(\theta_t\) 表示第 \(t\) 次迭代时的模型参数,\(\nabla_\theta J(\theta_t)\) 是损失函数 \(J\) 在当前参数处的梯度,\(\eta\) 即为学习率。该公式直观显示:学习率乘以梯度方向,决定了参数更新的实际幅度。

1.1.2 与梯度下降的关系

学习率是梯度下降系列算法的核心控制旋钮。在每一步迭代中,模型首先计算损失函数关于参数的梯度(指向最陡上升方向),然后以学习率为缩放因子沿梯度负方向更新参数。若学习率为零,参数永不更新;若学习率为无穷大,参数将无视梯度信息直接跳跃。因此,学习率必须在合适的范围内选取,以平衡收敛速度稳定性

1.2 直观理解

1.2.1 步长比喻

可以将学习率理解为登山者在崎岖山谷中下山的“步长”。步长太小,需要迈出无数次脚才能到达谷底;步长太大,则可能一步跨过山谷撞到对面的山坡上,甚至滚落悬崖。机器学习中的“地形”是损失函数曲面,学习率决定了每一步跨越的物理距离。

1.2.2 收敛行为

收敛行为与学习率密切相关:在凸优化问题中,适当的学习率能保证线性收敛;在深度学习的非凸损失曲面中,学习率决定了模型能否逃离局部极小点、鞍点,以及最终抵达平坦且泛化好的谷底。理想情况下,学习率应使损失函数值单调递减,最终稳定在一个低值附近。

2 学习率的影响

2.1 学习率过大的问题

2.1.1 震荡发散

当学习率设置过大时,参数更新一步会“跳过”最优区域,导致损失值在后续迭代中剧烈波动甚至爆炸。这种震荡表现为损失曲线上下跳动,无法形成稳定的下降趋势。严重时梯度可能爆炸为NaN,模型“原地升天”。

2.1.2 无法收敛

过大的学习率会使参数在损失曲面中来回反弹,永远无法落入收敛盆地。在某些场景下,参数甚至可能发散至无穷远,损失函数值持续增大,训练彻底失败。

2.2 学习率过小的问题

2.2.1 训练缓慢

学习率过小则每一步更新极其微薄,需要耗费大量迭代次数才能达到理想的损失水平。训练时间以数量级增加,容易让开发者怀疑人生——尤其当显卡发出热浪而损失曲线却纹丝不动时。

2.2.2 局部最优陷阱

极小的学习率会极大降低模型逃离局部极小点或鞍点的能力。模型可能被“卡”在一个较高的损失区域,永远无法探索到更优的全局谷底。此外,过小学习率还会使模型对数据中的细微噪声过度敏感,陷入不良局部解。

2.3 理想学习率的特性

理想的学习率应在训练初期提供较大步长快速接近最优区域,在后期逐步减小步长以精细调整,同时避免在鞍点附近停滞。它还应具有一定的鲁棒性:在损失曲面局部曲率变化时自然调整步长,而非一成不变。实际应用中,理想学习率往往通过调度策略或自适应算法近似实现。

3 学习率调整策略

3.1 固定学习率

固定学习率是最简单的策略:整个训练过程中保持学习率不变。它仅适用于某些高度调参的简单问题(如线性模型)或具有平坦损失函数的场景。对于深度网络,固定学习率往往难以同时兼顾初期速度和后期稳定。

3.2 学习率衰减

学习率衰减策略使学习率随训练进程逐渐减小,常见方法包括基于步数的衰减和基于评估指标的衰减。

3.2.1 基于步数的衰减

按预设的步数(epoch或iteration)里程碑降低学习率,例如每隔20个epoch将学习率乘以0.1。这种“阶梯式衰减”实现简单,但需要手动设定衰减点。

3.2.2 基于评估指标的衰减

当验证集上的性能(如损失、准确率)在若干个epoch内无明显改善时,自动降低学习率(例如乘以0.5)。这是更智能的衰减方式,能动态响应模型收敛状态。

3.3 自适应学习率算法

自适应算法不再使用单一全局学习率,而是为每个参数赋予动态调整的步长。

3.3.1 AdaGrad

AdaGrad将每个参数的学习率除以该参数历史梯度平方和的平方根。它使频繁更新的参数步长变小,稀疏参数步长变大,但累积平方和单调递增会导致学习率过早衰减到接近零。

3.3.2 RMSProp

RMSProp引入指数移动平均替代AdaGrad的累加机制,缓解了学习率衰减过快问题。它维护梯度平方的滑动均值,用其平方根调整学习率,在非凸问题上表现稳定。

3.3.3 Adam

3.3.3.1 原理与公式

Adam(Adaptive Moment Estimation)结合了动量思想与RMSProp的自适应步长。它维护梯度的一阶矩估计(动量)和二阶矩估计(梯度平方的指数移动平均),更新公式为:

\[ m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t \] \[ v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2 \] \[ \hat{m}_t = \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t} \] \[ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t \]

其中 \(g_t\) 为当前梯度,\(\beta_1, \beta_2\) 通常取0.9和0.999,\(\epsilon\) 为防零小常数。

3.3.3.2 优缺点

优点:Adam参数设定鲁棒,默认学习率(0.001)在多任务上表现良好;对稀疏梯度、噪声数据友好;内存占用适中。缺点:在某些任务上泛化性能可能劣于SGD加动量调度;自适应机制可能抑制大梯度方向的探索。不过在绝大多数实践中,Adam是首选默认优化器。

3.4 周期性学习率

周期性学习率使学习率在一定范围内循环变化,而非单调递减,旨在帮助模型跳出局部极小。

3.4.1 余弦退火

余弦退火以余弦函数形式将学习率从初始值平滑下降至接近零,并可根据需要重复多个周期(重启)。热重启(SGDR)方法在每次周期结束时将学习率跳回初始值,迫使模型以新的起点搜索。

3.4.2 循环学习率

循环学习率(Cyclical LR)让学习率在预设的最小值和最大值之间周期性线性或三角波动。该方法能在少量超参调优下快速找到合适的训练环境,尤其适合在小数据集上调试。

4 学习率调优方法

4.1 学习率范围测试

由Leslie Smith提出的测试方法:使用小批量数据训练少数epoch,让学习率从极小值以固定方式增长到极大值,记录损失函数变化。

4.1.1 线性扫描

学习率在每个batch后线性增加。通常初始值设为 \(10^{-7}\),终值设为 \(10\)。观察损失值曲线:当损失开始急剧上升时对应的学习率即为最优范围的上界;损失开始大幅下降的点为下界。

4.1.2 对数扫描

使用对数尺度增加学习率,更适合大范围搜索。结果曲线能更清晰地分辨出稳定下降区间。该测试通常只在初始设置阶段运行一次,之后即可选定学习率。

4.2 基于经验法则的设置

在深度学习中,常用经验值:Adam默认学习率0.001;SGD配合动量则从0.1开始尝试(经过适当学习率衰减);小模型可尝试0.01。但经验法则仅适用于常见网络结构,对特殊任务需结合范围测试验证。

4.3 自动化超参数搜索

4.3.1 网格搜索

在预设的离散学习率值(如 [0.1, 0.01, 0.001])上进行全排列组合,训练后选择最佳模型。网格搜索计算成本高,且容易错过最优值所在区间。

4.3.2 随机搜索

从指定分布(如对数均匀分布)随机采样学习率,训练并评估。随机搜索在相同预算下通常比网格搜索更高效,尤其在超参数敏感性不均时。

4.3.3 贝叶斯优化

利用高斯过程等概率模型,基于已有实验的结果指导下一次学习率采样。它能在较少的尝试次数内逼近最优参数,但实现复杂度较高。实际中可借助Optuna、Hyperopt等库完成。

5 学习率的常见误区与“梗”文化

5.1 “学习率玄学”调侃

许多机器学习实践者将学习率称为“玄学参数”——明明遵循了所有教程,调了十几次学习率,模型要么不收敛,要么乱跳。有人戏称学习率是“炼丹炉的火候”,调对了炼丹成功,调不对直接“炸炉”。

5.2 炼丹师的日常:调参手抖

在深度学习社区,流传着“手抖一下,学习率从0.001变成0.01,模型从SOTA变成灾难”的段子。初学者常因少打一个零导致训练一夜后损失爆炸,而老手则会安慰道:“没事,再跑一轮,这次我把小数点加回来。”

5.3 学习率过大导致模型“暴走”的段子

某著名段子:“我设置了学习率=1.0,跑了100步后,loss变成了NaN。这个模型领悟了存在的虚无,决定自我毁灭。” 另一个流行梗:将学习率过大的模型输出称为“精神病发作”——它学会了用最高概率输出完全无关的答案,但它确实在努力。

6 相关概念与扩展

6.1 动量(Momentum)

动量在梯度下降中引入历史梯度的指数移动平均,相当于为参数更新添加“惯性”。数学形式为 \(v_{t} = \gamma v_{t-1} + \eta \nabla_\theta J(\theta_t)\),其中 \(\gamma\) 常取0.9。动量能加速在平坦方向的移动,抑制震荡方向,与学习率协同工作。

6.2 学习率预热(Warm-up)

预热策略在训练初始阶段使用较小的学习率,然后逐渐提升到目标值,以防止模型在随机初始化下梯度方向过于剧烈。常见于大规模Transformer训练(如BERT预训练前几千步线性预热)。预热通常持续数个epoch或若干千步。

6.3 学习率与批次大小的耦合

研究表明,学习率与批次大小之间存在线性缩放规则:当批次大小增大K倍时,学习率可相应增大K倍(同时保持其他条件不变)。这是由于大批次提供了更准确的梯度估计,允许更大步长。但超出一定范围后缩放规则失效,还需同时调整动量或衰减策略。

6.4 学习率在其他优化器中的作用

除了梯度下降族,学习率也出现在其他优化器中:如二阶优化方法(Newton法)虽不使用显式学习率,但其步长由Hessian矩阵逆直接控制;进化策略中的步长类似学习率;更广义的参数更新强度概念在强化学习策略梯度中同样存在。学习率的本质,始终是控制“每次探索或利用的幅度”。