1、反向传播链断裂
即其中有部分的变量可能被转换为 numpy 数组,虽然仍然能够参与计算,但却失去了梯度传播的能力,导致无法向后面的变量传播梯度
2、学习率设置不合理
如果学习率设置得太大,则容易造成 loss 变成 nan,导致模型不收敛,设置得太小,则会导致模型学习得很慢
3、神经网络层参数没有进行好的参数初始化
因为参数初始化会影响到模型的训练速度
补充几个实际开发中常见的模型不收敛原因:
3)数据未归一化。输入特征量纲差异大时,loss landscape变得狭长,梯度震荡无法收敛。图像数据除以255、表格数据做StandardScaler是基本操作。
4)梯度消失/爆炸。深网络用sigmoid容易梯度消失,改用ReLU或残差连接能缓解。梯度爆炸时加梯度裁剪(gradient clipping)。
5)初始化不当。全零初始化导致所有神经元学到相同特征,用He初始化(ReLU)或Xavier初始化(tanh/sigmoid)。
6)损失函数选错。回归用了分类的loss,或者多分类用了MSE而不是CrossEntropy,模型根本在优化错误目标。
7)Dead ReLU。学习率过大导致神经元永久输出0,梯度不再流过。用Leaky ReLU或降低学习率。
调试顺序建议:先看loss曲线走势(nan=数值溢出,平线=没在学,震荡=学习率太大),再逐层打印梯度norm定位问题层。