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

批量梯度下降Python实现时代价函数发散问题排查求助

问题定位与修复方案

1. 核心问题:学习率alpha设置过大

你当前设置的alpha=0.1对该数据集来说步长过大,每次参数更新会直接越过代价函数的最小值点,导致代价函数越来越大,最终发散。

  • 临时修复方案:将alpha下调到0.01或更小(比如0.005),即可正常收敛。
  • 后续优化方案:如果后续要导入400+数据点,建议先对x做特征标准化处理,将特征缩放到均值为0、方差为1的区间,这样可以使用更大的学习率加快收敛,避免发散。

2. 次要问题:初始代价函数J的表达式逻辑错误

你计算初始J的代码写为:

J = sum([(theta_0 - theta_1 * x[i] - y[i])**2 for i in range(m)])

这里theta0和theta1*x[i]之间的符号错误写成了减号,和后续预测逻辑theta0 + theta1*x[i]不一致。虽然当前初始theta都为0时计算结果不受影响,但如果后续修改初始参数值会直接导致收敛判断逻辑出错,需要改成:

J = sum([(theta_0 + theta_1 * x[i] - y[i])**2 for i in range(m)])

3. 优化建议

可以用numpy的向量化运算替代循环求和,大幅提升运行速度,尤其是后续处理400+数据点时效果更明显,比如:

  • 梯度计算可以直接写为:
    grad_0 = np.mean(theta_0 + theta_1 * x - y)
    grad_1 = np.mean((theta_0 + theta_1 * x - y) * x)
    
  • 代价函数计算可以直接写为:
    J_new = np.sum((theta_0 + theta_1 * x - y) ** 2)
    

修复后的运行效果

把alpha改成0.01后,代码迭代约1500次就可以收敛,得到的参数结果theta0≈3.31、theta1≈0.25,和最小二乘法解析解一致。

内容的提问来源于stack exchange,提问作者Anthony Knighton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:45:02