给定的线性回归梯度下降代码是顺序还是同时更新参数?
梯度下降参数更新方式:你的代码是同时更新,不是顺序更新
先明确两种更新模式的核心区别:
- 同时更新:先基于当前参数的原始值,计算所有待更新参数的梯度;计算完成后,再统一用这些梯度更新所有参数,整个过程中梯度计算不会用到任何更新后的参数值。
- 顺序更新:更新某一个参数后,后续参数的梯度计算会依赖已经更新过的参数值。
看你给出的代码:
dj_dw=((w*x[i]+b-y[i])*x[i])/m dj_db=(w*x[i]+b-y[i])/m w=w-a*dj_dw b=b-a*dj_db
dj_dw和dj_db的计算完全基于更新前的w和b,两个梯度计算完成后才执行w和b的更新操作。更新b时,使用的依然是原始的w值(因为w的更新在梯度计算之后,且dj_db的计算没有用到更新后的w),这完全符合同时更新的定义。
那些AI工具判断错误,大概率是混淆了更新逻辑的细节。如果是顺序更新,代码会是这样的:
dj_dw=((w*x[i]+b-y[i])*x[i])/m w=w-a*dj_dw dj_db=(w*x[i]+b-y[i])/m # 此处使用了已经更新后的w来计算梯度 b=b-a*dj_db
这种情况下,dj_db的计算依赖更新后的w,才属于顺序更新。
在线性回归的梯度下降实现中,同时更新是标准且正确的方式——因为均方误差代价函数的梯度是基于当前参数的整体状态计算的,顺序更新会引入不必要的偏差,影响收敛效果。
内容的提问来源于stack exchange,提问作者Mayank Gupta
相关产品推荐
相关产品推荐

