想象你是一名寻宝者,站在一片终年迷雾笼罩的山脉前。传说在峡谷最深处埋着一只会发光的金箱子——找到它,就找到了“最优解”。问题是:你每一步该迈多大?如果步子迈得太大,你可能一个箭步跨过藏着宝箱的谷底,直接冲上对面的山坡;如果步子迈得像蚂蚁一样小,你虽然不会错过沿途任何一寸土,可太阳落山也走不到山谷深处。聪明的寻宝者会怎么做?他们会先大步流星赶路,等接近谷底时再一点点缩小步幅,精确定位那些微弱的光亮。 这正是训练神经网络时的真实困境。损失函数就是“山的海拔图”,模型参数就是你的坐标,梯度告诉你怎么走最陡的下坡路。学习率,就是每一步迈的幅度;而学习率调度,是一整套“什么时候大步赶路、什么时候小步精修”的策略。本文会带你认识三张最实用的“寻宝地图”:阶跃衰减、余弦退火和 Warmup 预热。

岗位关联

学习率调度是深度学习调参中最立竿见影的“内功心法”。掌握它,你能让模型收敛更快、精度更高,还能在微调大模型时避免训练发散,这是 AI 工程师实战与面试的高频考点。

目录
  1. 可视化演示
  2. 学习率基础:步幅决定命运
  3. 阶跃衰减:分段减档上山
  4. 余弦退火:缓缓收力的步伐
  5. Warmup预热:先热身再冲刺
  6. 策略对比:哪条路最快最稳
  7. 实践应用:把策略装进框架
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示让模型越训越精的学习率调度术的核心机制,通过全局/局部/动态/静态四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

让模型越训越精的学习率调度术:学习率与 学习率与训练动态的关系基础 阶梯衰减Step Decay等 核心机制可视化 让模型越训越精的学习率调度术整体架构与关键组件

学习率基础:步幅决定命运

你站在峡谷边缘,手电筒的光柱勉强够到谷底——那里隐约有一个金属反光,宝箱!问题是:第一步怎么迈?一大步跨出去?那会直接跳过谷底撞上对面石壁。小碎步挪下去?安全但太慢,天黑前摸不到箱子。寻宝者的第一课,就是理解“步幅”决定了下山路线的好坏。

神经网络训练的本质,就是在这张“海拔图”上一次次迈步。损失函数 \(L(\theta)\) 描绘地形的起伏,模型参数 \(\theta\) 是你当前的坐标,梯度 \(\nabla L(\theta_t)\) 是指向最陡下坡的方向。而学习率,就是一步迈多远。这个核心动作浓缩在一个公式里:

把学习率设得太大,相当于每一步都像蹦极一样弹跳——损失值会在谷底两侧来回震荡,甚至冲出地图直接发散成 NaN;设得太小,则像蚂蚁爬行,几百个 epoch 过去还在山坡上磨蹭,而且容易被小土包(局部极小值)困住。损失曲面越崎岖的地方,对步幅的容忍度越低。

所以,寻宝者的第一课结论是:单独的“大”或“小”都不对,关键是让步幅随地形变化。学习率调度,就是给登山杖装一个可调旋钮——前期放长一截赶路,后期拧短一截精修。

θt+1=θt−ηt∇L(θt)\theta_{t+1} = \theta_t - \eta_t \nabla L(\theta_t)
新位置 = 老位置 − 步幅 × 最陡下坡方向
  1. \(\theta_t\)(老位置)训练第 \(t\) 步时模型参数,也就是你在“损失山脉”上的坐标点。
    θt\theta_t
  2. \(\eta_t\)(步幅)第 \(t\) 步的学习率。它决定这一步迈多大,是调度策略唯一要操纵的量。
    ηt\eta_t
  3. \(\nabla L(\theta_t)\)(下坡方向)损失函数在当前点的梯度,指向海拔上升最快的方向。加负号就是逆着它往下走。
    ∇L(θt)\nabla L(\theta_t)
  4. \(\theta_{t+1}\)(新位置)从老位置沿下坡方向移动“步幅 × 方向”后到达的新坐标。
    θt+1=θt−ηt∇L(θt)\theta_{t+1} = \theta_t - \eta_t \nabla L(\theta_t)

阶跃衰减:分段减档上山

老练的寻宝者随身带一根可伸缩登山杖。他的习惯是:每走 500 米,就把登山杖缩短一半。这样在开阔地带大步流星,越接近谷底步幅越小,不会一头冲过头。这种“走一段、减一档”的做法,就是学习率调度里最朴素的阶跃衰减(Step Decay)。

阶跃衰减的操作很简单:设定一个“里程碑”步数 \(T_0\),每走满一个里程碑,就把当前学习率乘以一个小于 1 的系数 \(\gamma\)(常见 0.1 或 0.5)。比如每 30 个 epoch 学习率减半,训练 120 个 epoch 时学习率就会经历 4 次减半。公式如下:

阶跃衰减的优点和缺点都来自“阶跃”二字。优点是简单直观:里程碑设在哪些 epoch、每档衰减多少,都能明明白白画出来,训练结果也可预期;缺点是每到一个里程碑,学习率瞬间跳变,损失曲线偶尔会跟着“抖一下”。不过在常规 CNN 图像分类任务中,这种小抖动能被优化器平滑掉,因此它至今仍是 ResNet 等经典模型训练的主力调度。

台阶式减档的寻宝者形象,很好地概括了这个策略的性格:稳、准、可控,只是偶尔“咔哒”一声换挡时,手里宝箱的微光会闪一下——不必在意,继续走就好。

ηt=η0×γ⌊t/T0⌋\eta_t = \eta_0 \times \gamma^{\lfloor t / T_0 \rfloor}
当前学习率 = 初始学习率 × 衰减系数^(已经走完的里程碑数)
  1. \(\eta_0\)(初始大步幅)训练刚开始时的学习率,通常取得较大,方便快速越过开阔地带。
    η0\eta_0
  2. \(\gamma\)(衰减比例)每个里程碑后学习率被乘上的系数。\(\gamma=0.5\) 代表减半,数值越小降得越猛。
    γ\gamma
  3. \(\lfloor t / T_0 \rfloor\)(已过里程碑数)\(t\) 是当前步数,\(T_0\) 是里程碑间隔。向下取整表示“走满几档就减几次”。
    ⌊t/T0⌋\lfloor t / T_0 \rfloor
  4. \(\eta_t\)(折减后的步幅)把前两项代入,得到第 \(t\) 步实际使用的学习率。
    ηt=η0×γ⌊t/T0⌋\eta_t = \eta_0 \times \gamma^{\lfloor t / T_0 \rfloor}

余弦退火:缓缓收力的步伐

另一位寻宝者用的登山杖完全没有“咔哒”声。他的步幅像太阳落山时的影子,每一秒钟都在缓缓变短,从正午的昂首阔步,到黄昏的蹑手蹑脚,中间没有任何突变。这种“无级变速”式的衰减,就是余弦退火(Cosine Annealing)。

余弦退火的公式借用了余弦函数在 0 到 π 之间从 1 平滑降到 −1 的特性。训练总步数为 \(T\),当前步数为 \(t\),学习率从最大值 \(\eta_{\max}\) 平滑过渡到最小值 \(\eta_{\min}\):

余弦退火还有一种进阶玩法叫“热重启”(Warm Restart):训练到一半突然把学习率重新拉高,再走一轮余弦下降。这就像寻宝者明明快到谷底了,突然想起另一侧山坳可能埋着更大的箱子,于是转身大步走回去重新搜一遍——能帮助模型跳出差的局部极小。余弦家族还有个好处:除了最大/最小学习率和周期长度外,几乎不需要手动设置里程碑,因而在 Transformer 和大模型训练中备受青睐。

比起阶跃衰减的“咔哒”换挡,余弦退火的魅力在于“无感”——每一步都比上一步精一点,等到你意识到时,已经稳稳站在谷底了。

ηt=ηmin⁡+12(ηmax⁡−ηmin⁡)(1+cos⁡πtT)\eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max} - \eta_{\min})\left(1 + \cos\frac{\pi t}{T}\right)
学习率沿半段余弦曲线从高到低平滑滑落,后期下降变缓,给足精修时间
  1. \(\eta_{\max}\) 与 \(\eta_{\min}\)(步幅上下限)训练开始时的最大步幅和结束时的最小步幅,相当于登山杖的“最长挡”和“最短挡”。
    ηmax⁡, ηmin⁡\eta_{\max},\ \eta_{\min}
  2. \(\cos(\pi t / T)\)(余弦下落)当 \(t=0\) 时 \(\cos 0 = 1\),\(t=T\) 时 \(\cos\pi = -1\),整体从最亮滑向最暗。
    cos⁡πtT\cos\frac{\pi t}{T}
  3. \(\frac{1}{2}(1 + \cos\frac{\pi t}{T})\)(归一化系数)把余弦值从 [−1, 1] 映射到 [0, 1],保证学习率始终在两界之间。
    12(1+cos⁡πtT)\frac{1}{2}\left(1 + \cos\frac{\pi t}{T}\right)
  4. \(\eta_t\)(当前步幅)用上下限之差乘以上面的系数,再加上下限,就得到第 \(t\) 步的学习率。
    ηt=ηmin⁡+12(ηmax⁡−ηmin⁡)(1+cos⁡πtT)\eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max} - \eta_{\min})\left(1 + \cos\frac{\pi t}{T}\right)

Warmup预热:先热身再冲刺

你注意到一个奇怪的现象:那位经验最丰富的寻宝者,出发前十分钟走得特别慢。旁人催促,他却说“先让眼睛适应黑暗,不然一进去就是瞎跑”。果然,等他真正放开大步时,路线比任何人都直。这个“慢启动”策略,就是 Warmup 预热。

为什么训练开始时需要预热?因为模型参数是随机初始化的,此时损失曲面的形状对所有方向来说都极其陌生——梯度方向大概率是错的。如果一上来就用大步幅,相当于蒙着眼在陌生山林里冲刺,轻则跑偏,重则一脚踩空(损失爆炸)。预热阶段先用很小的学习率走一小段路,让参数到达一个“粗略正确的方向”上,再把学习率加满,就能稳准狠地前进。

实际训练中,Warmup 几乎不单独使用,而是叠在其他调度策略前面——最经典的组合是“Warmup + 余弦退火”:先用几百步小碎步稳住方向,再大步探索,最后余弦平滑收尾。GPT、BERT 等大模型训练与微调几乎都采用这套组合,因为大模型参数量巨大,对初始学习率极其敏感,少了预热,第一个 batch 就可能把损失打到 NaN。

热身并不是浪费时间,而是“磨刀不误砍柴工”。那十分钟慢走,让后来的每一步都快十倍——这就是 Warmup 的智慧。

ηt=ηmax⁡×tTwarm,t<Twarm\eta_t = \eta_{\max} \times \frac{t}{T_{\text{warm}}}, \quad t < T_{\text{warm}}
预热期内,学习率从 0 开始线性爬升,到第 \(T_{\text{warm}}\) 步时正好抵达目标学习率
  1. \(T_{\text{warm}}\)(热身步数)预热的持续时间,通常是总训练步数的 5%~10%。
    TwarmT_{\text{warm}}
  2. \(t / T_{\text{warm}}\)(线性升温比例)当前步数占热身总步数的比例。起步时接近 0,结束时等于 1。
    tTwarm\frac{t}{T_{\text{warm}}}
  3. \(\eta_{\max}\)(目标步幅)预热结束后要到达的正式学习率。
    ηmax⁡\eta_{\max}
  4. \(\eta_t\)(当前步幅)预热期内实际使用的学习率,从接近 0 平滑涨到目标值。
    ηt=ηmax⁡×tTwarm\eta_t = \eta_{\max} \times \frac{t}{T_{\text{warm}}}

策略对比:哪条路最快最稳

三位寻宝者聚在山脚,各自亮出自己的走法:阶梯先生喜欢“走一段减一档”;余弦女士信奉“全程匀速收力”;预热小哥坚持“先慢后冲再收力”。到底谁的路更好?这取决于山的形状和你的目标。

从收敛速度看,阶跃衰减和固定大学习率在前期都很快,预热策略会慢热一些,但后者后期追赶迅速。从最终精度看,余弦退火以微弱优势领先,因为它后期的学习率下降得足够慢,给了参数充分“落位”的时间;阶跃衰减的突然换挡偶尔会让模型停在略微偏离谷底的位置。从鲁棒性看,Warmup + 余弦的组合最强,它同时避免了初期的发散风险和后期的震荡,几乎不需要人工干预。

场景匹配上,简单直观的阶跃衰减适合正则化成熟、训练流程稳定的 CNN 分类任务;余弦退火适合需要精细调参的 Transformer 系列;但凡要训练或微调大模型,首选 Warmup + 余弦退火;固定学习率则只在极浅层或调试阶段使用。没有绝对最好的调度,只有最贴合任务的策略。

如果把训练比作寻宝,那阶跃衰减是“稳妥老手”,余弦退火是“节奏大师”,Warmup 是“夜路向导”。真正的高手不会只背一条路,而是看准山形,把这些走法组合成自己的登山术。

实践应用:把策略装进框架

再好的走法也要落到双腿上。在实际工程里,学习率调度通常只需在深度学习框架里写一行代码。以 PyTorch 为例:创建优化器后,挂一个调度器,每个 epoch 结束调用 scheduler.step() 即可。更换调度策略,只需要换一行构造代码。

参数选择上,初始学习率常从 \(10^{-3}\) 或 \(3 \times 10^{-4}\) 起步,batch size 越大可适度放大;阶跃衰减的里程碑可设在总 epoch 的 1/3、2/3 处;余弦退火的周期长度通常等于总训练步数;Warmup 步数取总步数的 5%~10% 比较安全。训练中要用 TensorBoard 之类的工具同时监控 loss 曲线和学习率曲线——学习率曲线像登山杖的刻度,loss 曲线像你的海拔记录,两者对照才能确认节奏是否合适。

微调大模型时还有一个实用技巧:不同层用不同学习率(比如底层小、顶层大),再配一个较小的 Warmup 比例;同时把余弦退火周期设成微调总步数,防止学习率降得太快导致“灾难性遗忘”。这样既保住了预训练学到的通用知识,又能让顶层充分适应新任务。

把调度器接入代码,就像给登山杖装上智能旋钮。从此你不用每走一步都低头调长度,只需要在出发时把旋钮设定好,然后安心赶路——框架会帮你把每一步的步幅安排得明明白白。

AI 应用场景

图像分类模型训练提速

阶段:模型训练阶段/超参数调优

解决的问题:传统方式用固定学习率训练 ResNet 时,前期学习率太小导致收敛慢,后期又因为学习率太大在最优解附近反复横跳,最终精度上不去。引入阶跃衰减后,模型在前期大步探索、后期小步精修,收敛速度提升 30% 以上,最终准确率也能稳定高出一截。

具体案例:某算法工程师在 CIFAR-10 上训练 ResNet-50,最初固定学习率 0.1,训练 100 epoch 后准确率卡在 92.5%。改用每 30 epoch 学习率减半的 StepLR 后,同样的算力和时间,准确率提升到 94.2%,而且验证集 loss 曲线明显更平滑。

大模型微调的稳定配方

阶段:模型微调阶段/指令微调

解决的问题:大模型微调时,初始参数分布与预训练阶段差异大,直接用较大学习率很容易让第一个 batch 的损失暴涨、甚至指标变成 NaN。使用 Warmup + 余弦退火组合,先用小步幅稳定方向,再平滑收力,既避免了发散,又让模型在任务数据上获得更高精度。

具体案例:某团队用 LoRA 微调 7B 参数的大语言模型做中文问答。他们设置了 200 步线性预热和总长 2000 步的余弦退火,初始学习率 2e-4。相比固定学习率方案,训练过程零发散,评测集上的 BLEU 分数提升了 4 个百分点,且模型保留了较完整的通用知识。

知识蒸馏后的精修

阶段:模型压缩阶段/二次训练

解决的问题:知识蒸馏后学生模型通常需要更精细的学习率才能逼近教师模型的表现。余弦退火平滑下降的特性,特别适合这种“已经接近目标、只需要再靠近一点”的收尾场景,学生模型的精度能从 88% 提升到 91%。

具体案例:某推荐系统团队把精排模型从 100MB 蒸馏到 20MB,使用余弦退火调度把蒸馏损失降到最低,离线 AUC 仅损失 0.5%,在线点击率反而小幅上升。

Python 演示

python34 行
import numpy as np def f(w):    return w[0]**4 - 2*w[0]**2 + 0.5*w[1]**2 def grad_f(w):    return np.array([4*w[0]**3 - 4*w[0], w[1]]) def make_scheduler(name):    def step_sch(t, T, lr0=0.05):        return lr0 * (0.5 ** (t // (T // 5)))    def cosine_sch(t, T, lr0=0.05):        return lr0 * 0.5 * (1 + np.cos(np.pi * t / T))    def warm_cosine(t, T, lr0=0.05):        warm = int(T * 0.1)        if t < warm:            return lr0 * (t + 1) / warm        return lr0 * 0.5 * (1 + np.cos(np.pi * (t - warm) / (T - warm)))    return {'step': step_sch, 'cosine': cosine_sch, 'warm_cosine': warm_cosine}[name] def train(name, T=300, lr0=0.05):    w = np.array([2.0, 2.0])    sch = make_scheduler(name)    loss_hist = []    for t in range(T):        lr = sch(t, T, lr0)        w = w - lr * grad_f(w)        loss_hist.append(f(w))    return w, loss_hist if __name__ == '__main__':    for s in ['step', 'cosine', 'warm_cosine']:        w, hist = train(s)        print(f'{s:12s} final w={w.round(3)} loss={hist[-1]:.5f}')
目的:在二维非凸损失函数上对比三种学习率调度策略(阶梯衰减、余弦退火、Warmup+余弦)的最终收敛结果,直观看出“步幅策略”对模型精度的真实影响。
  1. def f(w): return w[0]**4 - 2*w[0]**2 + 0.5*w[1]**2定义一个带两个局部极小值的“双谷”损失函数,模拟寻宝地形。
  2. def grad_f(w): return np.array([4*w[0]**3 - 4*w[0], w[1]])手算梯度,告诉程序当前下坡方向。
  3. 'step': step_sch把三种调度器装进字典,按名字取用,方便循环对比。
  4. if t < warm: return lr0 * (t + 1) / warmWarmup 阶段线性升温,保证初始步幅极小。
  5. w = w - lr * grad_f(w)核心更新句:参数沿负梯度方向走一步,步幅是当前学习率。
  6. loss_hist.append(f(w))记录每一步的损失值,方便后续画曲线。
  7. for s in ['step', 'cosine', 'warm_cosine']三组实验同时跑,对比哪种“走法”落点更好。

常见误区

误区“学习率设大一点,步子大了走得快,loss 降得也快嘛,0.1 不够就设 1.0,反正最后都能收敛。”

正解学习率过大会让损失“原地蹦迪”——在谷底两侧来回跨越,甚至直接发散成 NaN。学习率调度的核心价值恰恰是“该快时快、该小时小”:前期用合适的步幅快速赶路,后期必须收步幅才能精确落位。固定大学习率在前期确实降得快,但后期永远无法收敛到最优位置。

为何常见:只看到了前几个 epoch 的损失下降,误以为“快就是好”,忽略了后期震荡和发散的风险。

误区“直接用大的学习率训练多省事,Warmup 那几十步白跑了,纯属浪费时间。”

正解随机初始化的模型在第一步时,梯度方向极其混乱,就像一个蒙着眼的人在山里大步冲刺。Warmup 用小白步让“眼睛睁开”——等参数方向稳定后学习率才加满,整体反而更快。大模型训练如果没有 Warmup,第一个 batch 就可能把损失打到 NaN,直接白跑。

为何常见:从 loss 曲线看,Warmup 阶段的损失下降确实比正常阶段慢,容易让人误判它在“拖后腿”。

误区“反正最后学习率都会变得很小,用余弦退火和全程固定用 0.001 有什么区别?效果肯定一样。”

正解余弦退火的关键在“过程”——早期保持较大的学习率快速探索,中后期平滑收细,兼顾速度与精度。固定小学习率虽然终点一样,但全程“蠕动”,前期探索不足,更容易被困在次优谷底。同样的 epoch 数,余弦退火能到达更优的位置。

为何常见:只对比了“最终学习率”这一个时间点,忽略了整个训练过程中的学习率变化对参数轨迹的影响。

误区“我代码里写了 CosineAnnealingLR,学习率就不用管了,超参也不用调了,它就是银弹。”

正解调度器只是“策略框架”,初始学习率、周期长度、预热比例都要根据数据和模型来调。比如余弦退火的 \(T_{\max}\) 如果设置得比总训练步数短,学习率会在中途就跌到谷底,后面白跑;设置得太长,又等于没有衰减。还是要监控 loss 曲线做微调。

为何常见:把调度器当成“自动挡”,以为挂上就能开,忽略了它同样有需要人工设定的参数。

面试题

Q1. 深度学习中,学习率的本质作用是——

单选题 · easy

  • A.决定模型的层数
  • B.控制参数更新的步长← 正确答案
  • C.决定训练数据的批次大小
  • D.控制激活函数的形状

答案:B。学习率就是梯度下降时“一步迈多远”,对应每次参数更新的步长。A 是网络结构,C 是数据加载,D 是激活函数,都与学习率无直接关系。想象寻宝者的步幅,学习率就是那只“登山杖的长度”。

Q2. 学习率设置过大,最可能出现的现象是——

单选题 · mid

  • A.损失快速收敛到最优值
  • B.损失震荡甚至直接发散← 正确答案
  • C.模型参数完全不更新
  • D.训练时间显著变长

答案:B。学习率过大就像大步流星跳过峡谷,模型参数在损失曲面两侧来回碰撞。前期 loss 可能骤降,随后开始震荡,严重时直接发成 NaN。寻宝者步子太大,宝箱没踩到,反而摔进对面石缝里。

Q3. 阶跃衰减策略中,每经过一个里程碑,学习率会被——

单选题 · easy

  • A.乘以一个衰减系数 gamma← 正确答案
  • B.减去一个固定的数值
  • C.加上一个固定的数值
  • D.重置为初始值

答案:A。阶跃衰减的公式是 \(\eta_t = \eta_0 \times \gamma^{\lfloor t/T_0 \rfloor}\),每走完一个里程碑就把当前学习率乘以 \(\gamma\)(通常 0.1~0.5)。就像登山杖每走一段就缩短一截,而不是均匀缩短或重新长出来。

Q4. 以下哪些属于常见的学习率调度策略——

多选题 · mid

  • A.阶跃衰减← 正确答案
  • B.余弦退火← 正确答案
  • C.Warmup 预热← 正确答案
  • D.梯度裁剪

答案:ABC。阶跃衰减、余弦退火、Warmup 预热都是调整学习率随时间变化的策略。梯度裁剪解决的是梯度爆炸问题,它修改的是梯度本身,而不是学习率的步幅,因此不算调度。

Q5. 余弦退火调度中,学习率随时间变化的形状是——

单选题 · mid

  • A.直线线性下降
  • B.指数曲线下降
  • C.余弦曲线平滑下降← 正确答案
  • D.随机波浪上下浮动

答案:C。余弦退火的公式是 \(\eta_t = \eta_{\min} + \tfrac12(\eta_{\max}-\eta_{\min})(1+\cos\frac{\pi t}{T})\),学习率沿余弦函数从最大值平滑滑向最小值。它不是线性或指数下降,更不是随机浮动,而是像夕阳一样逐渐收缓。

Q6. Warmup 预热阶段的学习率变化规律是——

单选题 · hard

  • A.从大到小快速衰减
  • B.从小到大升至目标值← 正确答案
  • C.全程保持为零不变
  • D.随机抽取不同数值

答案:B。Warmup 的核心是从接近 0 的小值线性升至目标学习率,让初始的随机参数先“看清方向”再大步前进。A 是一般的衰减策略;C 会导致训练完全不更新;D 是随机扰动,都不属于预热。

Q7. 关于余弦退火的热重启(Warm Restart),下列说法正确的有——

多选题 · hard

  • A.学习率周期性回升再下降← 正确答案
  • B.能帮助模型跳出局部极小← 正确答案
  • C.可以替代 Warmup 预热阶段
  • D.重启后常配合更长周期← 正确答案

答案:ABD。热重启是训练周期结束时把学习率重新拉高,再走一轮余弦下降(A 对)。学习率回升会给模型一个“冲劲”跳出局部极小(B 对)。重启之后通常把下一轮周期拉长,让精修更充分(D 对)。而 Warmup 是解决初始方向不稳定的问题,二者作用不同,不能互相替代(C 错)。

Q8. 大模型(如 GPT、BERT)预训练和微调最常用的调度组合是——

单选题 · mid

  • A.全程固定学习率
  • B.阶跃衰减加大步长
  • C.Warmup 加余弦退火← 正确答案
  • D.随机切换学习率

答案:C。大模型参数量巨大,初始训练第一个 batch 就可能爆炸,需要 Warmup 稳起步;后期又需要平滑衰减来精细收敛,因此 “Warmup + 余弦退火” 成为标配。固定学习率后期会震荡,阶跃衰减在大模型上容易引发损失跳变。

Q9. 学习率设置过小可能导致的后果有——

多选题 · mid

  • A.收敛速度显著变慢← 正确答案
  • B.容易停留在次优区域← 正确答案
  • C.损失值必然变成 NaN
  • D.最终精度反而大幅提升

答案:AB。学习率太小,参数每步只挪一点点,收敛极慢(A 对),且在复杂损失曲面上缺乏冲过小土包的能力,容易被困在局部极小(B 对)。损失变 NaN 通常是大学习率导致的梯度爆炸(C 错);过小的学习率往往精度不足而非大幅提升(D 错)。

Q10. 训练后期观察到 loss 曲线上出现高频小抖动,最佳应对手段是——

单选题 · hard

  • A.调大学习率
  • B.平滑衰减学习率← 正确答案
  • C.立即停止训练
  • D.增大批次大小

答案:B。后期抖动说明当前学习率相对偏大,模型在谷底附近来回横跳。采用平滑的余弦退火或阶跃衰减把学习率降下去,才能稳稳落在低点。调大学习率会加剧抖动;立即停止训练则浪费了之前的学习;加大批次只改变梯度的噪声,不能解决步幅过大的问题。