深度模型训练出现NaN的原因及对策
一、模型问题
1.梯度爆炸( Gradient Explosion )
⭕原因:反向传播时梯度指数级增长,导致权重更新后输出溢出。表现为 Loss 骤增后突变为 NaN ,梯度
值远超正常范围(如>1e5)。
✅解决:
1️⃣梯度裁剪:限制梯度范数(如 PyTorch 的 clip _ grad _ norm _( max _ norm =1.0))。
2️⃣降低学习率:初始学习率设为较小值(如1e-4),或使用自适应优化器( Adam )。
2.权重初始化不当
⭕原因:初始权重过大(如方差过大)或过小,引发激活值指数级变化。
✅解决:
1️⃣使用 Xavier ( Tanh / Sigmoid )或 He 初始化( ReLU )。
2️⃣避免全零初始化导致对称性破坏。
二、数据问题
1.输入数据含异常值
⭕原因:数据中存在 NaN 、 Inf 或极端值(如全零、极大/极小值),导致前向传播计算溢出。
✅解决:
1️⃣使用 numpy . isnan ()或 torch . isnan ()检查输入和标签数据。
2️⃣确保数据预处理正确(如归一化、标准化),避免未处理的离群值。
2.数据预处理缺陷
⭕原因:未归一化的数据(如图像未除以255)或缺失值处理不当,引发激活值过大。
✅解决:
1️⃣对输入数据执行归一化(如缩放到[0,1]或[-1,1])。
2️⃣对缺失值填充合理数值(如均值)或剔除异常样本。
三、训练策略问题
1.混合精度训练问题
⭕原因:FP16精度下数值范围小,易出现上/下溢出。
✅方案:
1️⃣启用梯度缩放( GradScaler in PyTorch )。
2️⃣关键计算(如 Softmax )转为FP32。
2.学习率过高
⭕原因:过大学习率使权重更新剧烈,输出超出浮点范围。
✅调整:使用学习率调度器(如余弦退火、 Warmup 等学习率调整策略)。
📳对于想求职算法岗的同学,如果想参加高质量项目辅导,提升面试能力,欢迎后台联系。
1.梯度爆炸( Gradient Explosion )
⭕原因:反向传播时梯度指数级增长,导致权重更新后输出溢出。表现为 Loss 骤增后突变为 NaN ,梯度
值远超正常范围(如>1e5)。
✅解决:
1️⃣梯度裁剪:限制梯度范数(如 PyTorch 的 clip _ grad _ norm _( max _ norm =1.0))。
2️⃣降低学习率:初始学习率设为较小值(如1e-4),或使用自适应优化器( Adam )。
2.权重初始化不当
⭕原因:初始权重过大(如方差过大)或过小,引发激活值指数级变化。
✅解决:
1️⃣使用 Xavier ( Tanh / Sigmoid )或 He 初始化( ReLU )。
2️⃣避免全零初始化导致对称性破坏。
二、数据问题
1.输入数据含异常值
⭕原因:数据中存在 NaN 、 Inf 或极端值(如全零、极大/极小值),导致前向传播计算溢出。
✅解决:
1️⃣使用 numpy . isnan ()或 torch . isnan ()检查输入和标签数据。
2️⃣确保数据预处理正确(如归一化、标准化),避免未处理的离群值。
2.数据预处理缺陷
⭕原因:未归一化的数据(如图像未除以255)或缺失值处理不当,引发激活值过大。
✅解决:
1️⃣对输入数据执行归一化(如缩放到[0,1]或[-1,1])。
2️⃣对缺失值填充合理数值(如均值)或剔除异常样本。
三、训练策略问题
1.混合精度训练问题
⭕原因:FP16精度下数值范围小,易出现上/下溢出。
✅方案:
1️⃣启用梯度缩放( GradScaler in PyTorch )。
2️⃣关键计算(如 Softmax )转为FP32。
2.学习率过高
⭕原因:过大学习率使权重更新剧烈,输出超出浮点范围。
✅调整:使用学习率调度器(如余弦退火、 Warmup 等学习率调整策略)。
📳对于想求职算法岗的同学,如果想参加高质量项目辅导,提升面试能力,欢迎后台联系。
全部评论
相关推荐
点赞 评论 收藏
分享
11-02 23:28
National University of Singapore 风控 点赞 评论 收藏
分享
点赞 评论 收藏
分享