autograd是Pytorch的重要部分,位于vector-Jacobian product更是其中重点
以三维向量值函数为例。
用Tensor,Element-Wise机制进行运算,实际上表示:
y相对于x的导数不是2X,而是Jacobian矩阵。 (因为x,y是向量,不是一维实数) ) :
其中,不仅是关于x1,还有关于的函数。 这里的特殊性源于Element-Wise运算机制。 同样是y2、y3
另外一方面,对d(y )各成分的导数(变化率)是各成分函数、y=1、2、3对的偏导数
v沿一个方向的累积,一般来说,v的缺省方向为。
也可以向各个方向传达。 这是官方文档主张的easy feed external gradient。
这里,给出的偏导数是3358www.Sina.com/v方向上的向量;
也可以理解为,每个分量函数都是用于偏导数的投影。
v确定后,权重的每个也确定了,同上。
权重
一---简单的隐式Jacobianx=Torch.randn(3,requires_grad=True ) xtens or ([-0.9238,0.4353,-1.3626], requires _ grad=true (y=x * * 2y.backward (torch.ones (3) ) x.grad tensor ([-1.8476,0.8706, -2.7252] ) xradtensor () ) ) requires_grad=True----Jacobian验证x1=torch.tensor(1,requires_grad=true ) dtype=torch.float ) x2=type=torch.float (x3=torch.tensor ) 3、requires_grad=True, type=torch.float (y=torch.randn (3) # producearandomvectorforvectorfunctiondefiney (0)=x1 * *2* x2x3# define 3y.backward(torch.ones )3) ) x1.gradtensor(5)5.gradtensor ) ) x2.gradtensord
各成分函数分别为:
投影方向:
代码的结果和分析相互印证
三---不同方向投影先分析:
重新编码验证:
x1=torch.tensor(1,requires_grad=True,dtype=torch.float ) x2=torch.tensor(2) 2,requires_grad=True dtype=torch.float (y=torch.randn )3) y )0)=x1**2*x2x3y )1)=x1x2* *3* * dype=torch.float (y.bat )