Pytorch中標量對向量求導和向量對向量求導的詳解

1.標量對向量求導

標量可以直接對向量求導

import torch
p = torch.tensor([2.0, 3.0, 5.0], requires_grad=True)
q = p*2+1
z = torch.mean(q)
z.backward()
print(p.grad)
print(p.grad*p)

結果:

tensor([0.6667, 0.6667, 0.6667])
tensor([1.3333, 2.0000, 3.3333], grad_fn=<MulBackward0>)

解釋如下:
z=1/3(2p+1)z=1/3(2p+1)zzpp求導爲2/3,因爲pp是向量,故爲[0.6667, 0.6667, 0.6667],導數乘以pp的值爲[1.3333, 2.0000, 3.3333]。
求導過程其實就是求一個雅可比矩陣:
在這裏插入圖片描述

2.向量對向量求導

向量不能直接對向量求導,要想實現向量對向量求導就要先設置一個權重係數v,然後執行如下操作。這樣對可以對向量y中的元素逐一求導,求導後分別乘以係數就是最終的值了。

import torch
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
print(x)
y = x*2
v = torch.tensor([0.1, 1, 0.01], dtype=torch.float)
y.backward(v)
print(x.grad)

結果:

tensor([1., 2., 3.], requires_grad=True)
tensor([0.2000, 2.0000, 0.0200])

解釋如下:
y=2xy=2xyyxx求導爲2,因爲x是向量,故爲[2, 2, 2],乘上係數爲[0.2000, 2.0000, 0.0200]。
求導過程其實就是求一個雅可比向量積:
在這裏插入圖片描述

參考1
參考2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章