模型优化与训练技巧面试:正则化、学习率调度、梯度问题、数据增强
知识结构:训练优化常用技术对比
| 问题 | 现象 | 常用解决方法 | 注意事项 |
|---|---|---|---|
| 过拟合 | 训练损失低,验证损失高 | L2正则化、Dropout、数据增强、早停 | 正则化强度需调参,Dropout与BN不宜同时使用 |
| 收敛慢 | 损失下降缓慢,无明显震荡 | Warmup + Cosine衰减、AdamW代替Adam | Warmup步数通常为总步数5%~10% |
| 梯度消失/爆炸 | 深层网络训练失败,损失NaN或不变 | 梯度裁剪、残差连接、权重初始化(Xavier/He) | 梯度裁剪阈值通常设1.0或5.0 |
| 数据不足 | 泛化差,易过拟合 | Mixup、CutMix、随机旋转/翻转/颜色抖动 | 需保持标签一致性,不要破坏语义 |
1. 如何防止过拟合?请谈谈常用正则化技术及其原理。
面试官考察点:是否理解正则化的本质;能否区分L1、L2、Dropout的适用场景;是否了解如何组合使用。
回答框架:
① 指出现象:过拟合是模型复杂度高于数据量,导致记忆噪声。
② 分点阐述:
- L2正则化:在损失函数中加入权重平方和,迫使权重趋于零,等价于高斯先验。
- Dropout:训练时随机丢弃神经元,相当于集成学习,增强鲁棒性。
- 数据增强:通过变换增加样本多样性,是最自然的正则化。
③ 强调组合使用,如L2 + Dropout,同时通过交叉验证调整强度。
可能追问:
- L1和L2的本质区别?什么时候用L1?
- Dropout在卷积层和全连接层的使用差异?
- Batch Normalization是否具有正则化效果?为什么?
2. 你如何设计学习率调度策略?有哪些常见方法及其适用场景?
面试官考察点:是否掌握学习率对收敛和泛化的影响;能否根据任务选择调度策略;是否了解Warmup背后的原理。
回答框架:
① 先点明学习率是训练中最关键的超参,过大震荡、过小收敛慢。
② 常见策略:
- Step Decay:每N个epoch乘0.1,适合SGD + 标准化任务(如ImageNet)。
- Cosine Annealing:余弦退火热重启,适合Transformer、ViT。
- Warmup:训练初期线性增加学习率(例如从0到base_lr),避免大初始梯度引起模型崩溃。
③ 推荐组合:Warmup + Cosine Decay,并在最后几个epoch保持小学习率微调。
可能追问:
- Warmup步长如何设定?多长是合理的?
- Cosine衰减与Step衰减哪个更好?为什么?
- 如果使用Adam,还需要Warmup吗?
3. 训练中遇到梯度消失或梯度爆炸怎么办?如何解决?
面试官考察点:是否理解梯度问题的成因;能否给出可落地的解决方案;是否了解梯度裁剪与初始化之间的关系。
回答框架:
① 分析原因:深层网络中,累乘导致梯度指数级缩小或放大;激活函数(如sigmoid/tanh)尾部导数趋近0;初始化不当。
② 解决方案:
- 梯度裁剪:设定阈值(如max_grad_norm=1.0),超过则等比缩放。
- 权重初始化:Xavier(tanh)或He(ReLU)根据输入输出维度方差适配。
- 残差连接(ResNet)或层归一化(LayerNorm)缓解深层传播。
③ 实践中先检查loss曲线和梯度统计,再针对性地选方案。
可能追问:
- 梯度裁剪的阈值如何选择?太大或太小的影响?
- 为什么LayerNorm比BN更适合Transformer防止梯度消失?
- 有没有遇到过梯度消失但梯度裁剪无效的情况?怎么排查?