Функция Autograd в документации Pytorch

введите здесь описание изображения

В документации Pytorch https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autograd-tutorial-py На изображении я не могу понять, что означает y.backward(v) и почему нам нужно определить другой тензор v для выполнения обратной операции, а также как мы получили результаты x.grad Заранее спасибо


person A_the_kunal    schedule 27.01.2020    source источник


Ответы (1)


y.backward() вычисляет dy/dz, где z — все конечные узлы графа вычислений. И он хранит dy/dz в z.grad.

Например: в приведенном выше случае конечные узлы равны x.

y.backward() работает, когда y является скаляром, что характерно для большей части глубокого обучения. Когда y является вектором, вы должны передать другой вектор (v в приведенном выше случае). Вы можете видеть это как вычисление d(v^Ty)/dx.


Чтобы ответить, как мы получили x.grad, обратите внимание, что вы увеличиваете x в степени 2, если только норма не превышает 1000, поэтому x.grad будет v*k*x**(k-1), где k равно 2**i, а i - это количество раз, когда цикл был выполнен.

Чтобы иметь менее сложный пример, рассмотрите это:


x = torch.randn(3,requires_grad=True)                                         
print(x)                                                                            
Out: tensor([-0.0952, -0.4544, -0.7430], requires_grad=True)

y = x**2   
v = torch.tensor([1.0,0.1,0.01])                                                                   
y.backward(v) 

print(x.grad)                                                                        
Out[15]: tensor([-0.1903, -0.0909, -0.0149])

print(2*v*x)                                              
Out: tensor([-0.1903, -0.0909, -0.0149], grad_fn=<MulBackward0>)


person Umang Gupta    schedule 27.01.2020
comment
Спасибо за помощь... - person A_the_kunal; 27.01.2020