一、自动求导:计算一个函数在指定值上的导数
二、计算图、操作子、无环图
1、显示构造(就像数学一样):Tensorflow/Theano/MXNet
2、隐式构造:PyTorch/MXNet(听不懂emmmm)
3、自动求导两种模式
4、前向计算为一个符号求解的的过程,反向计算其实是一个数值求解,正向是递推,反向是递归。
5、一般对于输入数据会先正向计算结果,再反向计算梯度,正向计算时会保存所有的中间变量,计算梯度的时候已经有了abz的具体值了,直接带入就能得到导数,比如dz/db=2b
三、求导->计算梯度
1.存储y关于x的梯度(求导后的分量值)x.requires_grad_(True),也可在定义tensor时给定。
Eg:x->tensor([0,1,2,3]);y=2*torch.dot(x,x)#内积
2.反向传播y.backward()
3.下次操作时需要x.grad.zero_()清零操作
4.一般调用反向传播计算梯度都是标量,若遇到向量*向量的情况(即y也为向量)可以先求sum转化为标量再调用反向传播求梯度,如下图x.grad==2*x。
5.u=y.detach()此处表明,将u当作一个常数,而非关于x的函数,求导自然为常数u,如上图中z.sum().backward()
6.sum是对向量x的四个分量求和。这个求和式x1+x2+x3+x4分别对四个分量求偏导。
7.f(a)是a的分段线性函数,则d=f(a)=ka,梯度就是k,k=d/a