Interview: SFT学习率为何远低于预训练及SFT常见问题分析
题目解析
SFT的学习率通常在1e-5到5e-5之间,比预训练的1e-4到3e-4低1-2个数量级。理解这背后的原因和SFT的常见陷阱,是实际微调中避免失败的关键。
解答思路
预训练是从随机初始化开始,需要大步长探索参数空间;SFT是在已收敛的预训练模型基础上做微调,参数已在一个好的basin中,大学习率会跳出这个basin,破坏已学到的知识。从优化理论看,预训练loss landscape相对平坦,SFT的loss landscape更窄更陡(因为数据量小得多),需要更小的步长才能稳定收敛。SFT最容易出的问题:1. 过拟合——数据量小且epoch过多导致模型记住训练样本;2. 格式崩溃——模型忘记应有的输出格式;3. 能力退化——某些通用能力(如数学推理)显著下降。
关键要点
- 学习率过大导致灾难性遗忘,过小则微调效果不充分;2. SFT通常只训练1-3个epoch,多了容易过拟合;3. Cosine退火到最大学习率的10%左右是常见策略;4. 监控validation loss比training loss更重要。
加分回答
可以对不同层使用不同学习率(层级学习率衰减):底层学习率更小(保护通用特征),顶层学习率稍大(适配新任务)。另外warmup比例在SFT中通常设为3%-5%,比预训练的1%稍高,帮助稳定初始训练。
常见踩坑
最常见的坑是SFT后模型变成了”复读机”——过度拟合训练数据的格式和内容。另一个坑是忽略学习率warmup,导致训练初期梯度爆炸。