You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么TensorFlow/Keras简单模型训练时损失函数随epoch持续指数上升?

损失指数级爆炸问题原因及解决方案

核心原因

你遇到的是梯度爆炸问题,本质是优化器参数、特征尺度和样本量三者不匹配导致的参数更新正反馈:

  • 模型使用的Keras默认参数SGD优化器默认学习率为0.01,对于无归一化输入的当前场景来说数值过高
  • 输入特征xs没有做归一化,最大取值达到20,MSE损失对权重的梯度和输入x的数值正相关,x越大梯度绝对值越高
  • 当样本量增加时,梯度计算的累加值进一步变大,单次更新就会让权重w偏离合理区间,误差越来越大,损失就会指数级上涨,最终溢出为inf、NaN

小样本训练正常的原因

当你把样本量缩减到10个时,梯度计算的平均绝对值刚好落在0.01学习率可以适配的范围内,每次更新都能让权重向最优解靠近,所以损失可以正常下降。当样本量增加到18以上时,梯度绝对值超过阈值,每次更新反而让误差放大,进入正反馈循环。

修复方案

你可以任选以下一种方法解决问题:

  • 调低SGD优化器的学习率,将编译代码改为:
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.001), loss="mean_squared_error")
  • 对输入特征做归一化处理,把xs缩放到0~1区间:
xs = xs / 20.0
  • 换用自适应学习率优化器,比如Adam,默认参数即可适配当前场景:
model.compile(optimizer="adam", loss="mean_squared_error")

内容的提问来源于stack exchange,提问作者Adith Raghav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:24:04