结论先行:loss不下降按学习率、数据、初始化、梯度四个方向排查。90%的问题出在学习率不对或数据没加载对。
一、学习率问题
学习率太大loss震荡不收敛,学习率太小loss下降极慢。先用小batch跑前100步看loss曲线,找对学习率再放大batch。
二、数据问题
数据没shuffle、标签错位、归一化错了,都会导致loss不下降。先过拟合单batch验证模型能学到东西,再放开数据。
三、梯度问题
梯度爆炸用梯度裁剪,梯度消失换ReLU或残差连接。混合精度下检查loss scaling是否合理。
四、调试心法
先过拟合单batch:把dataset缩短到10个样本,看loss能不能降到接近0。能降说明模型和代码没问题,问题在数据量或学习率。不能降说明模型或代码有bug。
五、常见错误
标签和输入对齐错了,loss怎么都降不下来。学习率用了默认的1e-3但batch变了,没相应调整。
跑通训练的GPU实例可在GPU算力平台选择。




