跳转至

二十三:调参技巧自测题答案

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484236&idx=1&sn=9191a8d7b6732be7420c8ddb0fdefde9&chksm=f01eb035c76939230eaed9056b4ff2c72ce3ba96c0792ebe02e191e2f5e9f86bdec391fbc8ca#rd

参考资料

  • Google Research Deep Learning Tuning Playbook: https://github.com/google-research/tuning_playbook

  • Google Developers Deep Learning Tuning Playbook: https://developers.google.com/machine-learning/guides/deep-learning-tuning-playbook

  • PyTorch Reproducibility: https://docs.pytorch.org/docs/stable/notes/randomness.html

  • Hugging Face Transformers Trainer: https://huggingface.co/docs/transformers/en/main_classes/trainer

  • Hugging Face Transformers Hyperparameter Search: https://huggingface.co/docs/transformers/en/hpo_train

  • Hugging Face PEFT LoRA: https://huggingface.co/docs/peft/package_reference/lora

  • Optuna Documentation: https://optuna.readthedocs.io/

  • Weights & Biases Sweeps: https://docs.wandb.ai/models/sweeps

  • Ray Tune Schedulers: https://docs.ray.io/en/latest/tune/api/schedulers.html

  • CSDN 调参技巧整理: https://blog.csdn.net/qq_42718887/article/details/118242358

A. 调参目标与基本原则

1. 什么是超参数?它和模型参数有什么区别?

模型参数是训练过程中通过反向传播学习得到的量,例如权重矩阵、bias、embedding。超参数是训练前或训练流程中人为设定的量,例如学习率、batch size、训练轮数、优化器、weight decay、dropout、LoRA rank、warmup ratio。 面试中要强调:参数由数据和优化器学习,超参数由人或搜索算法选择;调参本质上是在控制训练动态、泛化能力和工程成本。

2. 为什么说调参不是盲目试参数,而是一个实验工程问题?

因为每次调参实验都依赖数据版本、代码版本、随机种子、指标定义、训练预算和硬件环境。若这些条件不受控,实验结果不可解释,参数好坏也无法判断。 好的回答应包含三点:先建立 baseline,再有假设地改变少量变量,最后用曲线、指标和错误分析验证假设。调参不是“试到分数高”,而是用可复现实验找到稳健配置。

3. 一个调参任务开始前,应该先明确哪些目标和约束?

需要明确主指标、辅助指标、业务目标、训练预算、显存限制、推理延迟、模型大小、上线安全要求和可复现要求。 例如大模型微调中,不能只说“提升效果”,还要明确是提升人工偏好胜率、事实正确率、格式遵循能力,还是降低拒答率和幻觉率。不同目标会导致完全不同的调参方向。

4. 为什么调参前必须建立可靠 baseline?

baseline 是所有实验比较的参照物。没有 baseline,无法判断新参数是真的改善了模型,还是因为数据变化、评估脚本变化、随机种子或训练时长变化造成的偶然结果。 可靠 baseline 还可以暴露训练管道问题,例如 loss mask 错误、验证集泄漏、评估指标实现错误、checkpoint 恢复失败等。

5. 一个可靠 baseline 至少应该记录哪些信息?

至少记录数据版本、训练/验证/测试划分、代码 commit、模型和 tokenizer、完整超参数、随机种子、硬件环境、训练曲线、评估结果、checkpoint 路径和运行命令。 面试加分点:还应记录吞吐、显存峰值、梯度范数、学习率曲线、错误分析样本和失败实验结论。失败实验同样有价值,可以避免团队重复踩坑。

6. 为什么要先做小数据过拟合测试?它能排查哪些问题?

小数据过拟合测试用于验证训练链路是否真的能学习。做法是取很小一批样本,让模型反复训练,看 train loss 是否能明显下降甚至接近过拟合。 如果小数据都无法过拟合,通常说明训练流程有 bug,例如 label 错误、loss mask 错误、optimizer 没有包含可训练参数、模型处于 eval 模式、学习率极不合理、数据和标签错位。

7. 调参时为什么不能只看单次实验的最好结果?

深度学习训练有随机性,单次最好结果可能来自幸运初始化、数据 shuffle、dropout 或评估采样。只看最好一次容易高估真实效果。 更稳健的做法是对候选配置做多 seed 复验,报告均值、方差和置信区间。若一个配置平均表现好且方差小,比偶尔冲高但不稳定的配置更适合生产。

8. 什么是 scientific hyperparameters、nuisance hyperparameters 和 fixed hyperparameters?这种分类有什么价值?

scientific hyperparameters 是当前真正想研究影响的参数,例如 LoRA rank 对效果的影响。nuisance hyperparameters 是为了公平比较必须调好的参数,例如每个 rank 下都需要合适学习率。fixed hyperparameters 是当前固定不动的参数。 这种分类的价值是控制实验变量,避免一次改变太多因素导致结论不可解释。它也能提醒我们:比较两个模型或方法时,不能因为某一方 nuisance 参数没调好就得出错误结论。

B. 数据、指标与误差分析

9. 训练集、验证集和测试集在调参流程中分别承担什么角色?

训练集用于学习模型参数;验证集用于调参、早停和模型选择;测试集用于最终无偏评估。 面试中要强调:验证集会参与决策,因此反复使用验证集会逐渐对验证集过拟合;测试集应尽量保留到最终阶段,不能参与日常调参。

10. 为什么测试集不能在调参过程中频繁使用?

如果频繁根据测试集结果调整超参数,测试集就变成了验证集,最终测试分数会带有选择偏差,不能代表真实泛化能力。 正确做法是使用验证集做实验选择,测试集只用于最终确认。如果项目周期很长,可以设置多个验证切片或保留一组 final holdout。

11. 时间序列任务和用户级任务在数据划分上分别要注意什么?

时间序列任务应按时间切分,避免未来信息泄漏到过去。用户级任务应按用户或实体分组切分,避免同一用户的相似行为同时出现在训练和验证中。 例如推荐系统中,同一用户历史在训练集、未来行为在验证集是合理的;但如果同一个会话的相似样本同时出现在训练和测试中,会高估模型泛化能力。

12. 请列举几种常见数据泄漏形式。

常见泄漏包括:训练集和验证集重复或近重复;特征工程使用全量数据统计;数据增强把验证样本变体放入训练集;检索库包含目标答案;prompt 或工具结果中暴露标签;同一用户、文档、代码仓库跨集合出现。 大模型任务还要注意 benchmark 题目污染、答案模板泄漏、评测集被训练语料覆盖等问题。

13. 如果验证集指标很高但测试集明显下降,你会如何排查?

首先检查数据划分和重复样本,确认验证集是否泄漏或过于接近训练集。然后比较验证集和测试集的分布差异,例如类别比例、长度、难度、来源、时间范围。 接着检查是否对验证集调参过度,是否反复选择验证集最优模型。最后做错误分析,看测试集下降集中在哪些切片上,再决定是重划验证集、增加数据、改变指标还是调整正则化。

14. 调参时为什么要区分优化指标、监控指标、业务指标和切片指标?

优化指标用于选择模型,监控指标用于发现训练异常,业务指标用于判断真实价值,切片指标用于发现局部退化。 如果混在一起,会导致决策混乱。例如验证 loss 下降是好事,但如果人工偏好下降、长文本切片下降或安全拒答能力下降,就不能简单认为模型变好。

15. 为什么总指标提升不一定代表模型真的变好?

总指标可能被大类样本主导,掩盖小类、长尾、困难样本或关键业务场景的退化。也可能因为模型过度优化某个自动指标而牺牲真实用户体验。 例如摘要 ROUGE 提升但事实错误增加,代码 pass@1 提升但安全漏洞增多,客服模型平均准确率提升但高价值客户问题下降,这些都说明总指标不足以支持结论。

16. 误差分析应该如何指导下一轮调参?

误差分析要把错误样本归类,然后把错误类型映射到调参动作。若长文本错误多,考虑增大 max length 或改进截断策略;若模型过度自信,考虑 label smoothing 或更好校准;若训练集也学不好,考虑学习率、训练步数和容量。 好的调参不是随机改参数,而是从错误类型出发提出假设,再通过受控实验验证。

17. 在大模型微调中,为什么训练 loss 下降不一定代表模型质量提升?

训练 loss 只衡量模型拟合训练 token 的程度,不直接衡量事实性、安全性、指令遵循、推理能力和人类偏好。模型可能通过记忆模板降低 loss,却在真实任务上泛化差。 此外,如果 loss mask 错误、chat template 不一致、数据质量差或训练分布偏窄,loss 下降甚至可能伴随灾难性遗忘或输出风格退化。

C. 学习率、Batch Size 与训练步数

18. 为什么学习率通常是最重要的超参数?

学习率直接决定每一步参数更新幅度。过大可能发散或震荡,过小则训练太慢或在预算内欠拟合。 面试中可以用公式说明:

theta_{t+1} = theta_t - lr * update_t
在优化器、batch、schedule 固定时,learning rate 往往是最先决定训练是否成功的因素。

19. 学习率过大时,训练曲线和数值表现通常会出现哪些现象?

常见现象包括 loss 不降、loss 剧烈震荡、训练初期 NaN/Inf、梯度范数爆炸、验证指标大幅波动、模型输出退化。 处理方式通常是降低 learning rate、增加 warmup、开启梯度裁剪、检查混合精度和异常样本。但第一优先级通常是降低学习率。

20. 学习率过小时,训练过程通常有什么表现?

loss 下降缓慢,训练曲线很平滑但长时间停滞,固定训练预算内无法充分拟合,验证指标提升很慢。 如果 train loss 和 valid loss 都高,同时没有震荡或 NaN,常见方向是增大学习率、增加训练步数或调整 schedule。

21. 为什么学习率搜索通常使用对数尺度?

学习率的有效范围通常跨数量级,例如 1e-6 到 1e-3。线性搜索会浪费大量试验在同一数量级附近,难以覆盖真正可能的区域。 因此常用候选值如 1e-5、3e-5、1e-4、3e-4,或在 log-uniform 空间随机采样。

22. 大模型全参微调和 LoRA 微调在学习率选择上通常有什么差异?

全参微调会更新全部模型参数,破坏预训练能力的风险更高,学习率通常更保守。LoRA 只训练低秩适配参数,可训练参数少,常能承受相对更大的学习率。 但这不是固定规则。数据量、任务难度、模型规模、batch size、训练步数和 target_modules 都会影响合适学习率,仍需实验验证。

23. micro batch size、gradient accumulation steps、world size 和 global batch size 分别是什么?

micro batch size 是每张 GPU 单次 forward/backward 处理的样本数。gradient accumulation steps 是累积多少个 micro batch 后执行一次 optimizer step。world size 是并行训练的 GPU 或进程数量。global batch size 是一次参数更新等效使用的总样本数。 这些概念必须区分,因为显存主要受 micro batch 和序列长度影响,而优化动态主要受 global batch 和 optimizer step 影响。

24. 请写出 global batch size 的计算公式。

常用公式是:

global_batch_size = micro_batch_size_per_gpu * gradient_accumulation_steps * world_size
例如每卡 micro batch 为 2,梯度累积 8 步,使用 4 张 GPU,则 global batch size 为 2 * 8 * 4 = 64。

25. 增大 batch size 会对显存、吞吐、梯度噪声和泛化产生什么影响?

micro batch 增大会增加激活显存;global batch 增大会降低梯度估计噪声,使训练更稳定,但也可能减少噪声带来的正则化效果,影响泛化。 吞吐通常会随 batch 增大而提高到某个饱和点,之后可能受显存、数据加载或通信限制。batch 改变后通常需要重新调学习率、warmup 和训练步数。

26. 梯度累积能解决什么问题?它不能解决什么问题?

梯度累积能在显存受限时增大等效 global batch,即多个 micro batch 的梯度累积后再更新参数。 它不能降低单次 micro batch 的激活显存,也不能让过长序列自动适配显存。它还会减少 optimizer step 频率,可能影响训练动态和吞吐,需要配合学习率、训练步数重新计算。

27. 当 GPU 数量增加时,为什么原来的学习率和训练步数可能不再合适?

如果 micro batch 和累积步数不变,GPU 数增加会增大 global batch。global batch 变大后,每个 epoch 的 optimizer step 变少,梯度噪声变小,原学习率和 warmup 可能不再适合。 因此扩展 GPU 不只是工程加速问题,也会改变优化过程。需要重新计算 total steps、warmup steps,并验证学习率缩放策略。

28. 如果 global batch size 变大,可以采用哪些学习率缩放策略?

常见策略包括线性缩放和平方根缩放。线性缩放指 batch 放大 k 倍,学习率也放大 k 倍;平方根缩放指学习率放大 sqrt(k) 倍,更保守。 实际使用时应配合 warmup 和稳定性监控。若出现震荡、NaN 或泛化下降,应降低学习率或缩小 batch。

D. 优化器、正则化与学习率调度

29. SGD、Adam 和 AdamW 的核心区别是什么?

SGD 使用当前梯度直接更新,通常需要精心学习率调度。带 Momentum 的 SGD 会累计历史梯度方向。Adam 使用一阶矩和二阶矩估计自适应调整每个参数的更新尺度。AdamW 将 weight decay 从 Adam 的梯度更新中解耦。 在 Transformer 和大模型中,AdamW 因收敛快、默认配置稳健而非常常见。

30. 为什么 Transformer 和大模型训练中 AdamW 很常见?

Transformer 参数规模大、不同参数梯度尺度差异明显,Adam 类优化器的自适应更新更容易稳定训练。AdamW 的解耦 weight decay 通常比 Adam 加 L2 更适合控制权重规模。 面试加分点:AdamW 不是永远最优,但在预训练、SFT 和多数 NLP 微调中是强 baseline。

31. Adam 优化器中的 beta1、beta2、epsilon 分别影响什么?

beta1 控制一阶动量的指数衰减,影响梯度方向的平滑程度。beta2 控制二阶矩估计的衰减,影响自适应步长的稳定性。epsilon 是分母中的数值稳定项,避免除零并影响极小方差情况下的更新。 通常先用默认值,只有训练不稳定或任务规模特殊时再细调。

32. 在常规调参中,为什么通常优先调 learning rate 和 weight decay,而不是一开始就调 beta1/beta2?

learning rate 和 weight decay 对训练速度、稳定性和泛化影响更直接,敏感度更高。beta1/beta2 通常默认值已经在大量任务中验证过,早期就调它们会扩大搜索空间并降低实验效率。 合理顺序是先确定学习率、batch、schedule、weight decay,再考虑优化器内部参数。

33. weight decay 的作用是什么?AdamW 中的 weight decay 和传统 L2 正则有什么区别?

weight decay 通过抑制权重幅度降低过拟合风险,改善泛化。传统 L2 正则通常把权重惩罚项加入 loss,梯度再进入优化器。AdamW 的 weight decay 是解耦形式,直接在参数更新中衰减权重。 解耦的好处是 weight decay 不再与 Adam 的自适应梯度缩放混在一起,调参更直观。

34. dropout 的作用是什么?过大的 dropout 会带来什么问题?

dropout 在训练时随机屏蔽部分激活,降低神经元共适应,起到正则化作用。 过大的 dropout 会造成有效容量不足、收敛变慢、欠拟合,尤其在小数据 LoRA 微调或训练步数较少时可能明显伤害效果。

35. label smoothing 的作用是什么?它适合解决什么类型的问题?

label smoothing 把 one-hot 标签变软,降低模型对训练标签的过度自信,有助于改善校准和泛化。 它适合分类任务、标签有噪声或模型过度自信的场景。但对需要严格拟合确定标签的任务,过强 smoothing 可能降低上限。

36. early stopping 的基本思想是什么?它有什么风险?

early stopping 在验证指标不再提升时停止训练,避免继续拟合训练集导致过拟合。 风险是验证指标有噪声时可能过早停止;如果 patience 太小或评估间隔太短,会错过后续提升。因此要设置合理 patience,并结合曲线判断。

37. 常见学习率调度策略有哪些?各自适合什么场景?

常见策略包括 constant、step decay、exponential decay、cosine decay、linear decay、one-cycle。constant 简单;step/exponential 适合传统训练;cosine 平滑,常用于深度网络;linear decay 在 NLP 微调中常见;one-cycle 常用于部分 CV 场景。 关键不是背名字,而是理解 schedule 控制训练早期探索和后期收敛。

38. warmup 的作用是什么?warmup 过长或过短分别会带来什么问题?

warmup 让学习率从小逐步升高,缓解训练初期优化器状态、梯度尺度和模型输出不稳定导致的发散风险。 warmup 过短可能前期震荡或 NaN;warmup 过长会让有效学习率长期偏低,在短训练中造成欠拟合。

39. 梯度裁剪解决什么问题?为什么它不能替代正确的学习率设置?

梯度裁剪限制梯度范数,防止偶发大梯度导致更新过大,常用于 RNN、Transformer、大模型和 RL 训练。 但如果学习率整体过大、数据异常、loss mask 错误或混合精度有问题,梯度裁剪只能缓解症状,不能从根本上修复错误优化动态。

40. mixed precision 训练中出现 NaN/Inf 时,应该检查哪些因素?

应检查学习率是否过大、梯度范数是否爆炸、loss scaling 是否频繁 overflow、输入和 label 是否非法、mask 是否正确、softmax/log 是否数值不稳定、reward 或 advantage 是否未归一化。 也可以尝试切换 bf16、降低学习率、开启梯度裁剪、禁用可疑 fused kernel 或用 fp32 跑小 batch 定位问题。

E. 欠拟合、过拟合与模型容量

41. 如何根据 train loss 和 valid loss 判断欠拟合?

如果 train loss 和 valid loss 都高,且训练指标和验证指标都不理想,通常是欠拟合。说明模型连训练集都没有学好。 处理方向包括增加训练步数、提高学习率、降低正则化、增大模型容量、提高 LoRA rank、检查输入信息和标签质量。

42. 如何根据 train loss 和 valid loss 判断过拟合?

如果 train loss 持续下降,而 valid loss 上升或验证指标下降,通常是过拟合。说明模型记住训练集细节,但泛化变差。 处理方向包括增加数据、数据增强、增大 weight decay/dropout、早停、减少训练轮数、降低可训练参数量或改进数据划分。

43. 模型容量不足时,可以从哪些方向改进?

可以使用更大模型、解冻更多层、提高 LoRA rank、增加 target_modules、增大隐藏层或特征维度、延长上下文长度,或者提供更充分的输入特征。 但容量提升会增加显存、训练成本和过拟合风险,因此要结合 train/valid 曲线判断。

44. 如果模型过拟合,调参上有哪些常见处理手段?

常见手段包括增加 weight decay、增加 dropout、使用 label smoothing、减少训练 epoch、early stopping、数据增强、减少模型容量、降低 LoRA rank、减少 target_modules、清洗重复样本。 大模型场景还要检查训练数据是否过窄、模板是否单一,以及是否导致通用能力退化。

45. 为什么增加正则化并不总是正确选择?

如果问题是欠拟合,增加正则化会进一步降低有效容量,使训练更差。即使是过拟合,正则过强也可能损害关键模式学习。 因此正则化调整必须基于 train/valid 曲线和错误分析,而不是看到验证效果不好就机械增加 dropout 或 weight decay。

46. 大模型微调中的灾难性遗忘是什么?调参时如何缓解?

灾难性遗忘是模型在新任务数据上微调后,预训练获得的通用能力、安全能力或其他任务能力明显下降。 缓解方式包括降低学习率、减少训练步数、使用 LoRA/Adapter 等参数高效微调、混入通用数据、增加 KL/reference 约束、早停、做多任务评估和安全评估。

F. 搜索策略与实验管理

47. 网格搜索的优点和缺点是什么?

优点是简单、可复现、覆盖明确,适合参数少且取值离散的场景。缺点是维度一高组合数爆炸,而且粗网格可能错过有效区域。 例如 5 个参数每个 5 个取值就有 3125 个组合,深度学习中通常成本过高。

48. 为什么随机搜索在高维超参数空间中通常比粗网格搜索更有效?

很多任务中只有少数超参数真正敏感。随机搜索能在每个维度覆盖更多不同取值,而网格搜索可能把预算浪费在不敏感维度的笛卡尔组合上。 尤其对 learning rate、weight decay 等连续参数,log-uniform 随机采样通常比手工粗网格更高效。

49. 贝叶斯优化的基本思想是什么?它适合什么场景?

贝叶斯优化根据已有实验结果建立代理模型,估计哪些超参数区域更可能带来好结果,再用 acquisition function 选择下一组实验。 它适合单次实验较贵、搜索空间中等、目标相对稳定的场景。对高噪声、大规模并行、强非平稳目标,效果可能不如预期。

50. Hyperband 和 Successive Halving 的核心思想是什么?

核心思想是先给大量配置较小训练预算,根据早期表现淘汰差配置,再把更多资源分配给保留下来的配置。 这种方法适合早期曲线能预测最终表现的任务,可以显著节省训练成本。但如果某些配置慢热,早期表现差但后期好,可能被误杀。

51. ASHA 相比同步 Successive Halving 有什么优势?

ASHA 是异步 Successive Halving,不需要等待同一轮所有 trial 完成后再晋级或淘汰。这样可以减少慢 trial 对整体进度的拖累,提高并行集群利用率。 它适合多机多卡并行调参场景,但仍需合理设置最小资源、晋级比例和评估指标。

52. 如何设计一个合理的超参数搜索空间?

原则包括:对跨数量级参数使用 log scale;先覆盖足够宽范围;避免无效组合;设置条件依赖;优先搜索敏感参数;根据初始结果逐步收窄范围。 例如 learning rate 搜索 1e-6 到 1e-3 可用 log-uniform;optimizer=SGD 时才搜索 momentum;max_length 不能超过显存预算。

53. 如果某个超参数的最优值总在搜索边界上,应该怎么处理?

说明真实最优区域可能在当前搜索空间之外,应扩展边界继续搜索。比如最优 learning rate 总是最大候选值,就应该尝试更大学习率,并密切监控稳定性。 边界最优不能直接作为最终结论,因为它可能只是搜索空间设计太窄。

54. 为什么调参实验要记录代码版本、数据版本、随机种子和完整配置?

这些信息决定实验是否可复现。没有代码版本和数据版本,无法确认指标变化来自参数还是环境变化。没有随机种子,无法判断差异是否来自随机波动。没有完整配置,实验无法复跑。 生产环境中,可追溯性还关系到审计、回滚和线上问题排查。

55. 为什么重要结论需要多 seed 复验?

不同 seed 会影响初始化、数据 shuffle、dropout 和采样评估。单 seed 可能偶然偏高或偏低。 多 seed 复验能评估配置的平均性能和稳定性。若 A 配置单次高但方差大,B 配置均值略高且方差小,通常 B 更可靠。

56. 你会如何命名和管理大量调参实验?

我会使用结构化命名和配置管理,例如包含日期、任务、模型、关键参数、seed 和简短实验目的。同时使用 YAML/JSON 保存完整配置,使用 W&B、MLflow、TensorBoard、Optuna 或 Ray Tune 记录曲线和结果。 还应归档失败实验和结论,避免只保存最佳模型,导致团队无法理解调参路径。

G. 大模型微调调参

57. 大模型 SFT 微调中,最优先关注哪些训练超参数?

优先关注 learning rate、global batch size、gradient accumulation、max sequence length、训练步数或 epoch、warmup ratio、weight decay、gradient clipping、precision 和 LoRA 配置。 同时要确认 tokenizer、chat template、loss mask、packing 和评估脚本正确,否则调参结果没有意义。

58. LoRA 的 rank r、lora_alpha、lora_dropout 分别控制什么?

rank r 控制低秩适配矩阵的维度,影响可训练参数量和表达能力。lora_alpha 是缩放系数,影响 LoRA 更新强度,通常与 r 一起考虑。lora_dropout 对 LoRA 分支做 dropout,起正则化作用。 r 太小可能欠拟合,r 太大可能增加成本和过拟合风险。alpha 太大可能更新过猛,dropout 太大可能学习不足。

59. target_modules 的选择会如何影响 LoRA 微调效果和成本?

target_modules 决定 LoRA 注入哪些层或投影矩阵。只注入 q_proj/v_proj 成本低,但表达能力有限;注入 q/k/v/o 甚至 MLP 的 gate/up/down 投影,能力更强但训练参数、显存和过拟合风险增加。 选择时要结合任务类型。格式和轻量任务可少注入,复杂推理或风格迁移可能需要更多模块。

60. max sequence length 对显存、速度和效果分别有什么影响?

max sequence length 越长,能保留更多上下文,减少截断关键信息,但 attention 计算和激活显存通常显著增加,训练速度下降。 如果长度太短,长样本任务效果会差;如果太长,大量 padding 或无效 token 会浪费算力。应根据长度分布、截断率和任务需求选择。

61. packing 技术能提升什么?使用 packing 时必须注意什么?

packing 把多个短样本拼接到一个序列中,减少 padding,提高 token 利用率和训练吞吐。 必须正确处理 attention mask、position、样本边界和 loss mask,避免不同样本互相看见或把不该学习的 token 纳入 loss。否则可能引入训练噪声甚至数据泄漏。

62. SFT 中 loss mask 为什么很关键?常见错误是什么?

loss mask 决定哪些 token 参与损失计算。指令微调通常只希望模型学习 assistant 回复,而不是学习用户输入或系统提示。 常见错误包括把 prompt 也计入 loss、把 padding 计入 loss、assistant 区间错位、chat template 后 mask 没同步更新。这些会导致模型学错目标,loss 看似下降但生成质量变差。

63. 为什么训练和推理的 chat template 必须一致?

大模型会学习模板中的角色标记、分隔符和输出位置。如果训练和推理模板不一致,模型看到的上下文格式发生分布偏移,可能导致不回答、格式错误、角色混乱或输出质量下降。 因此调参和评估时必须固定 tokenizer 与 chat template,并把模板版本写入实验配置。

64. 大模型微调时应该如何评估模型,而不是只看 loss?

应结合自动指标、人工评估、切片评估和生成质量分析。关注指令遵循、事实性、格式正确率、安全性、长文本能力、推理能力、拒答策略和输出长度。 还要比较 baseline、不同 checkpoint 和多 seed 结果。对开放生成任务,人工偏好或 LLM-as-judge 可以辅助,但需要防止评估偏差。

H. RLHF、分布式与故障诊断

65. RLHF/PPO 调参中 KL coefficient 的作用是什么?过大或过小会怎样?

KL coefficient 用于约束当前策略不要过度偏离参考策略。过大时模型更新被强烈限制,reward 提升慢,几乎学不动。过小时模型可能偏离过快,语言质量、安全性和通用能力下降,甚至 reward hacking。 实际训练要同时看 reward、KL、response length、人工偏好和安全指标。

66. reward scale、advantage normalization 和 entropy coefficient 分别影响什么?

reward scale 影响奖励数值大小和策略更新幅度,过大容易不稳定,过小学习信号弱。advantage normalization 稳定优势分布,减少尺度变化带来的训练波动。entropy coefficient 鼓励探索,防止策略过早坍缩。 这些参数会直接影响 RL 训练稳定性,不能只看 reward 上升,还要看 KL、长度和输出质量。

67. PPO 中 clip range 的作用是什么?

clip range 限制新旧策略概率比的变化范围,避免单次策略更新过大。它是 PPO 稳定训练的核心机制之一。 clip range 太小会限制学习,太大则接近不受约束的 policy gradient,可能导致训练震荡或策略崩坏。

68. 分布式训练中 global batch 改变后,为什么要重新审视 warmup、学习率和总 step?

global batch 改变会改变每次更新使用的样本数、梯度噪声和每个 epoch 的 optimizer step 数。若不调整,总训练动态会变化。 例如 GPU 数翻倍且其他设置不变,global batch 翻倍,每个 epoch 更新次数减半;原 warmup steps 可能占比变大或变小,学习率也可能不再稳定。因此需要重新计算训练步数和 warmup,并验证学习率缩放。

69. 如果训练 loss 完全不下降,你会按什么顺序排查?

先做小数据过拟合测试。然后检查数据和 label 是否对齐、loss mask 和 attention mask 是否正确、optimizer 是否包含可训练参数、模型是否处于 train 模式、学习率是否过小或过大。 再检查梯度是否为零、参数是否更新、混合精度是否异常、输入 token 是否正确、评估的 loss 是否和训练 loss 一致。不要一开始就盲目换模型。

70. 如果训练出现 OOM、训练很慢或验证指标剧烈波动,你分别会如何处理?

OOM:减小 micro batch、缩短 max sequence length、开启 gradient checkpointing、使用 bf16/fp16、使用 ZeRO/FSDP、用梯度累积维持 global batch。 训练慢:检查 dataloader、磁盘、CPU、网络和 GPU 利用率;增大 batch 到合理范围;使用混合精度、FlashAttention、fused optimizer;减少过频评估和 checkpoint;分析分布式通信瓶颈。 验证指标剧烈波动:增加验证集规模或固定评估采样;检查学习率是否过大;增大 batch 或梯度累积;做多 seed;按切片查看是否由少数样本主导;检查生成参数是否固定。

            预览时标签不可点




































<div class="