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

线性回归训练异常:权重优化正常但偏置参数始终为0求助

问题原因与解决方法

你的偏置参数b始终无法收敛到目标值7,核心问题出在数据未做缩放以及学习率、迭代次数设置不合理,具体分析和修复方案如下:

问题分析

  • X的数值范围过大:你的X是1到999的整数,数值跨度极大。这会导致权重W的梯度(和X相乘)远大于偏置b的梯度,为了避免W更新震荡你设置的极小学习率0.000001,对b的更新来说完全不够——每次b的增量微乎其微,80次迭代根本无法让b接近7。
  • 迭代次数不足:仅80次迭代对于未缩放的数据来说,远远达不到收敛要求。
  • 梯度量级不匹配:W的梯度计算涉及和X的点积,X数值大导致梯度值大;而b的梯度是(Y-y)的求和平均,两者不在同一数量级,用相同的学习率无法兼顾两者的更新效率。

修复方案

最有效的解决方式是对X做标准化处理,将X缩放到均值为0、标准差为1的范围,让W和b的梯度量级一致,再配合合理的学习率和迭代次数:

修改后的代码

import numpy as np

# 生成数据并标准化X
X = np.array(range(1, 1000))
# 标准化X:减去均值,除以标准差,将X缩放到[-1,1]附近
X = (X - np.mean(X)) / np.std(X)
Y = 5 * X + 7  # 对应标准化后的X,目标方程保持形式一致

def forward(W, X, b):
    return W * X + b

def getcost(Y, y):
    # 用len(X)代替硬编码的1000,增强代码通用性
    return np.sum((Y - y) ** 2) / len(X)

def backward(W, b, X, Y, y, lr):
    dW = -2 * np.dot((Y - y).T, X) / len(X)
    db = -2 * np.sum(Y - y) / len(X)
    W -= lr * dW
    b -= lr * db
    return W, b

W = 0.0
b = 0.0

# 调整学习率为0.01,迭代200次
for i in range(200):
    y = forward(W, X, b)
    cost = getcost(Y, y)
    W, b = backward(W, b, X, Y, y, lr=0.01)
    # 每20次迭代打印一次结果
    if i % 20 == 0:
        print(f"迭代次数 {i} | 损失值: {cost:.2f} | W: {W:.2f} | b: {b:.2f}")

其他可选方案

如果不想标准化X,可以:

  • 增大学习率到0.00001,同时将迭代次数增加到10000次以上,但这种方式效率低,且W容易出现更新震荡。
  • 对W和b使用不同的学习率,但实现起来不如标准化简洁。

验证效果

运行修改后的代码,你会看到b快速收敛到7左右,W也会稳定趋近于5,损失值持续下降并趋于平稳。

内容的提问来源于stack exchange,提问作者Chaitanya Thombare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:01:04