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

PyTorch中随机初始化的w和b的损失梯度取值相同的原因是什么

这个现象和参数初始化没有任何关系,完全是输入全1的特性导致的,原理推导如下:

  • 首先明确前向计算逻辑:你的输入x是长度为5的全1向量,和形状为(5,3)的权重w做矩阵乘法时,输出z的第j个元素就是w第j列所有元素的和,再加上对应位置的偏置b[j],即 z_j = sum_{i=0}^4 w[i][j] + b[j]
  • 接下来推导梯度计算规则:你使用的binary_cross_entropy_with_logits损失,对logit值z_j的梯度可以简化为 sigmoid(z_j) - y_j,这里标签y_j全为0,所以上游梯度直接等于sigmoid(z_j),我们记为g_j:
    • 偏置b的梯度就是上游梯度本身:因为z对b[j]的偏导数为1,所以b.grad[j] = g_j,和你输出的结果完全匹配
    • 权重w[i][j]的梯度等于上游梯度乘z对w[i][j]的偏导,而后者就是输入x的第i个值。由于你输入x的所有元素都为1,所以不管i取什么值,w[i][j]的梯度都是g_j,最终就表现为w的所有行取值完全相同,且和b的梯度一致。

你可以做简单验证:修改x的任意元素为非1值,比如设置x[0] = 2,再运行代码就会发现w第一行的梯度是其他行的2倍,符合常规的梯度计算逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:24:02