Нужна помощь в понимании функции градиента в pytorch - PullRequest
2 голосов
/ 30 мая 2020

Следующий код


w = np.array([[2., 2.],[2., 2.]])
x = np.array([[3., 3.],[3., 3.]])
b = np.array([[4., 4.],[4., 4.]])
w = torch.tensor(w, requires_grad=True)
x = torch.tensor(x, requires_grad=True)
b = torch.tensor(b, requires_grad=True)


y = w*x + b 
print(y)
# tensor([[10., 10.],
#         [10., 10.]], dtype=torch.float64, grad_fn=<AddBackward0>)

y.backward(torch.FloatTensor([[1, 1],[ 1, 1]]))

print(w.grad)
# tensor([[3., 3.],
#         [3., 3.]], dtype=torch.float64)

print(x.grad)
# tensor([[2., 2.],
#         [2., 2.]], dtype=torch.float64)

print(b.grad)
# tensor([[1., 1.],
#         [1., 1.]], dtype=torch.float64)

Поскольку аргумент тензора внутри функции gradient является тензором всех единиц в форме входного тензора, я понимаю, что

  1. w.grad означает производную от y по w и дает b,

  2. x.grad означает производную от y по x, и производит b и

  3. b.grad означает производную от y wrt b и производит все единицы.

Out of это только пункт 3 ответа соответствует моему ожидаемому результату. Может ли кто-нибудь помочь мне понять первые два ответа. Думаю, я понимаю часть накопления, но не думаю, что здесь происходит.

1 Ответ

5 голосов
/ 30 мая 2020

Чтобы найти правильные производные в этом примере, нам нужно принять во внимание правило суммы и произведения.

Правило суммы:

Sum Rule

Правило продукта:

Product Rule

Это означает, что производные вашего уравнения рассчитываются следующим образом.

По отношению к x :

Derivative with respect to x

По отношению к w :

Derivative with respect to w

По отношению к b :

Derivative with respect to b

Градиенты отражают именно это:

torch.equal(w.grad, x) # => True

torch.equal(x.grad, w) # => True

torch.equal(b.grad, torch.tensor([[1, 1], [1, 1]], dtype=torch.float64)) # => True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...