大模型训练不是一上来就全速跑。开头的短短几百步里,模型调整参数的幅度被人为压得很小,这段先慢后快的开场叫做 warmup,音译就是热身。通义千问、讯飞星火的训练流程里都有它,本文借冬天启动汽车这件事,说清它到底在防什么。
先慢后快:热身在做什么
训练开始时,模型对材料一无所知,这时候如果全速调整参数,就像蒙眼的人被人猛推一把,方向全凭运气。warmup 的做法是:开头几百步里,调整幅度从小到大平滑升上去,等模型站稳了再恢复正常力度。它的形状是一条缓坡,而不是一堵墙,所以模型感受到的是渐进,不是顿挫。
这段爬坡通常只占整个训练的很小一段,却常常决定后面顺不顺。可以把它理解成开学前的摸底考:不必考出分数,只需要让师生双方知道彼此的节奏。对训练来说,这几百步买来的是方向感——参数往哪个方向调、材料大致长什么样,先有个粗浅共识,再进正题。
爬坡、巡航、占比,三段节奏的对照。
| 阶段 | 学习率怎么走 | 不这么做会怎样 |
|---|---|---|
| 开场几百步 | 调整幅度从很小开始,平滑升上去 | 像蒙眼的人被猛推一把,方向全凭运气 |
| 爬坡途中 | 是一条缓坡而不是一堵墙,模型感受到的是渐进 | 冷车猛踩油门,伤机器还跑不快 |
| 爬坡走完 | 恢复到事先选好的正常力度,这个力度不归热身管 | 起步太猛,后面常要花更大力气往回纠正 |
| 全程占比 | 总步数的百分之几到一成,在第一个轮次内走完 | 太短等于没热,太长又浪费时间 |
冬天启动汽车:一段缓行的理由
冬天车子停了一夜,机油沉底、部件发紧,老司机的做法是打着火原地缓一缓,水温表动了再走。warmup 就是这个缓一缓:训练刚开始,数据的分布、特征的尺度对模型都是新的,直接全速调参,等于冷车猛踩油门,伤机器还跑不快。缓行一段,让各个部件进入状态,再逐步给油。
缓行的时间有讲究:太短等于没热,太长又浪费时间。什么是训练轮次?epoch 多了好不好那篇讲过轮次与耗时的关系,warmup 通常只占第一个轮次开头的一小截,多数配置用几百步走完爬坡,具体步数以所用框架的默认值为起点再微调。
warmup 速查表
- 位置:训练最开始的一段,通常几百步以内
- 作用:调整幅度从小到大平滑爬升
- 跳过它:开头几步容易跑偏,后面花更多步数纠正
- 太长也没必要:爬完坡就该恢复正常力度
类比失效的地方:水温正常不等于能猛踩油门
汽车类比有一处对不上:水温正常只说明润滑到位,油门深浅还得看路况;warmup 爬完后要恢复到正常力度,这个力度同样需要事先选好,热身的任务只是把爬坡走完,不负责替你定巡航速度。把两件事混在一起,是刚开始调参的人最常踩的坑。
还有一处失效:汽车热车是物理过程,热完就是热完;warmup 是学习过程,它改变的不仅是起步那几步,还影响模型对什么样的调整算合理的早期印象。起步太猛的模型,后面常要花更大力气往回纠正,这笔早期印象的账,热车类比算不出来。什么是梯度累积?小显存也能凑大批量那篇讲的批量处理方式,也会改变每步调整的手感,与热身节奏配合着看。
关于warmup的三个常问问题
- 不设 warmup 会怎样?:开头几步的调整可能又大又乱,像冷车猛冲,轻则多花几千步纠正,重则直接把训练带偏。
- warmup 该设多长?:常见做法是占训练总步数的百分之几到一成,让爬坡在第一个轮次内走完,以框架默认值为起点再微调。
- 它和学习率是一回事吗?:前者管开场那段爬坡的形状,后者管全程调整力度的基准,一个管起步,一个管全程,别混着调。
说到底,warmup 买的是起步的方向感,不是全程的速度。没有它,训练开头就像冷车冲坡,方向全靠运气;有了它,也只是让起步稳一点,路能跑多远仍取决于什么是数据配比?训练材料怎么搭配讲的配方和轮次安排。检查配置时先问一句爬坡走完没有,再关心别的旋钮。配套的调整力度基准要是选大了,热身也会被带着失真,两者放一起复核更稳妥。


