【发布时间】:2023-03-28 17:55:02
【问题描述】:
在反向传播过程中,这些情况是否会产生不同的影响:-
- 总结所有像素的损失然后反向传播。
- 所有像素的平均损失,然后反向传播
- 在所有像素上单独反向传播。
我对数值的主要怀疑,但所有这些都会产生的影响。
【问题讨论】:
标签: deep-learning computer-vision pytorch backpropagation gradient-descent
在反向传播过程中,这些情况是否会产生不同的影响:-
我对数值的主要怀疑,但所有这些都会产生的影响。
【问题讨论】:
标签: deep-learning computer-vision pytorch backpropagation gradient-descent
no 1 和 2 的区别基本上是:由于sum 会导致大于mean,所以sum 操作的梯度幅度会更大,但方向会相同。
这里有一个小演示,让我们首先声明必要的变量:
x = torch.tensor([4,1,3,7],dtype=torch.float32,requires_grad=True)
target = torch.tensor([4,2,5,4],dtype=torch.float32)
现在让我们使用L2 损失和sum 计算x 的梯度:
loss = ((x-target)**2).sum()
loss.backward()
print(x.grad)
这个输出:tensor([ 0., -2., -4., 6.])
现在使用mean:(重置xgrad后)
loss = ((x-target)**2).mean()
loss.backward()
print(x.grad)
这个输出:tensor([ 0.0000, -0.5000, -1.0000, 1.5000])
注意后面的梯度正好是sum 的 1/4,这是因为这里的张量包含 4 个元素。
关于第三个选项,如果我理解正确,那是不可能的。在使用 sum、mean 或其他任何东西将单个像素错误聚合到标量之前,您不能进行反向传播。
【讨论】: