均方误差偏导计算:权重与偏置梯度sum使用差异原因
均方误差偏导实现差异说明
问题涉及的均方误差偏导实现代码如下:
w_grad = -(2 / n_samples)*(X.T.dot(y_true - y_pred)) b_grad = -(2 / n_samples)*np.sum(y_true - y_pred)
代码涉及参数定义:
n_samples:样本总数ny_true:样本真实观测值y_pred:模型预测值
梯度计算存在差异的核心原因
这个差异没有特殊设计,完全是两个参数的求导逻辑、以及矩阵运算的固有特性决定的:
权重w的梯度不需要额外求和的原因
线性模型的预测公式为y_pred = Xw + b,其中X是形状为(n_samples, n_features)的特征矩阵,w是长度为n_features的权重向量。
对w求均方误差的偏导时,每个样本的误差y_true - y_pred需要先乘上对应样本的各维度特征值,再跨样本按特征维度累加得到每个权重对应的梯度值。X.T.dot(y_true - y_pred)这个矩阵点积操作本身就一次性完成了上述两步计算:
- 逐样本将误差值和对应样本的各维度特征值相乘
- 按特征维度对所有样本的乘积结果做累加
最终输出的结果是长度为n_features的向量,和w的形状完全匹配,不需要额外调用求和函数。
偏置b的梯度需要手动求和的原因
偏置b是单个标量参数,对所有样本的预测值贡献恒为常数1,因此对b求偏导时,每个样本的误差项系数都是1,不存在和特征值相乘的步骤。
此时y_true - y_pred是长度为n_samples的误差向量,如果直接计算不做聚合,得到的结果是和样本数等长的向量,既不符合b的标量形状,也不符合求导规则——b的梯度需要把所有样本的误差项累加为单个标量值,因此必须手动调用np.sum完成跨样本求和。
可以用极简样例验证:假设有2个样本、2个特征,误差向量为
[e1, e2],转置后的特征矩阵为[[x11, x21], [x12, x22]]。点积计算结果为[x11*e1 + x21*e2, x12*e1 + x22*e2],已经自带按特征维度求和的效果;而b对应的梯度分子是1*e1 + 1*e2,没有矩阵运算帮你自动完成这个累加,必须手动调用sum计算。
内容的提问来源于stack exchange,提问作者Imane
相关产品推荐
相关产品推荐

