gpt4 book ai didi

python - 为什么 Pytorch autograd 需要另一个向量来向后而不是计算雅可比行列式?

转载 作者:行者123 更新时间:2023-12-03 19:05:05 26 4
gpt4 key购买 nike

执行 backward在 Pytorch 中,我们可以使用可选参数 y.backward(v)计算雅可比矩阵乘以 v :

x = torch.randn(3, requires_grad=True)
y = x * 2

v = torch.tensor([0.1, 1.0, 0.0001], dtype=torch.float)
y.backward(v)

print(x.grad)
我认为计算雅可比矩阵的成本相同,因为计算雅可比矩阵所需的 AD 图中的每个节点仍在计算中。那么为什么 Pytorch 不想给我们雅可比矩阵呢?

最佳答案

当您调用向后()时,PyTorch 更新 grad每个可学习参数与一些损失函数的梯度 L w.r.t 到那个参数。它的设计考虑了梯度下降 [GD](及其变体)。计算出梯度后,您可以使用 x = x - learning_rate * x.grad 更新每个参数.实际上,在背景中必须计算雅可比行列式,但这不是应用 GD 优化时(通常)所需要的。矢量 [0.1, 1.0, 0.0001]允许您将输出减少到标量,以便 x.grad 将是一个向量(而不是矩阵,以防您不减少),因此 GD 是明确定义的。但是,您可以使用单热向量向后获得雅可比行列式。例如,在这种情况下:

x = torch.randn(3, requires_grad=True)
y = x * 2
J = torch.zeros(x.shape[0],x.shape[0])
for i in range(x.shape[0]):
v = torch.tensor([1 if j==i else 0 for j in range(x.shape[0])], dtype=torch.float)
y.backward(v, retain_graph=True)
J[:,i] = x.grad
x.grad.zero_()
print(J)

关于python - 为什么 Pytorch autograd 需要另一个向量来向后而不是计算雅可比行列式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63816321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com