PyTorch `optimizer.step()` 影响 BatchNorm2d 权重的梯度

我发现 optimizer.step() 这一步会改变 torch.nn.BatchNorm2d 层的 weight 和 bias 的梯度(看上去是每个元素按照相同的比例进行了缩放)。如果想要比较梯度,应该在 optimizer.step() 之前来对比,想要对比更新后的权重,要在 optimizer.step() 之后对比。

这很不应该啊?

版本 2.4.1 + CUDA 11.7(自行构建)上和版本 2.2.2 + CUDA 11.8 上都验证过会出现这种情况。