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

训练时nn.Parameter未参与前向计算的元素非预期变更问题

问题原因解答

根本原因

你观察到的未参与训练的参数发生变更,是优化器配置的weight_decay(权重衰减)导致的,和参数是否参与前向/反向传播无关。

具体原理

你在初始化Adam优化器时设置了weight_decay=1e-5,这个参数会对所有传入优化器的模型参数生效:

  • 权重衰减的本质是L2正则化,在每一步参数更新时,无论该参数对应的梯度是否为0,都会对参数本身施加向0收缩的惩罚,更新规则可简化为:
    param = param * (1 - learning_rate * weight_decay) - learning_rate * gradient
    
  • 你代码里只用到了all_calibration_params[0],其余参数在前向传播中没有被引用,反向传播后对应的梯度为0,因此这些参数的更新仅由权重衰减项主导,从初始值1不断向0收缩,所有未使用的参数收缩规则完全一致,因此最终会变成相同的0.8455值。

验证方法

将configure_optimizers方法中的weight_decay修改为0,重新运行代码即可观测到未使用的参数会保持初始的[1,1,1,1]不变。

解决方案

如果你需要保留权重衰减、同时避免未使用的参数被修改,可选择以下任一方案:

  • 优化器只传入当前需要更新的参数,而非全部模型参数
  • 对参数进行分组配置,给all_calibration_params单独设置weight_decay=0
  • 每次训练步后手动将未使用参数的梯度置为None,配合支持稀疏梯度更新的优化器使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:57:02