import torch
x = torch.arange(4.0)
x.requires_grad_(True)#等价于x = torch.arange(4.0,requires_grad=True)
x.grad #默认值是None
#现在计算y
y = 2*torch.dot(x,x)
目录
函数不可微时怎么办?——(将导数拓展到不可微的函数) 亚导数
矩阵求导
函数不可微时怎么办?——(将导数拓展到不可微的函数) 亚导数
将导数拓展到向量(要搞清“形状”)
梯度——梯度指向值变化最大的方向,梯度向量与等高线正交(表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。假设一个函数值y由多个参数x确定,那么在每一个参数维度下,都有y随着这个x的变化而变化,这个变化率就是y关于x的偏导,这个变化率也成为一个函数,我们能找到一些参数使得这个函数找到最优解,同理对于其他的x也一样。假设这个变化率函数用向量来表示,那么所有向量之和得到的,就是函数y关于所有变量的梯度,我们要找到所有参数使得这个梯度最优。
(y是标量,x是标量,导数也是标量;
y是标量,x是向量/y是向量,x是标量,导数是向量;
y是向量,x也是向量,导数是一个矩阵。)
矩阵求导有两种布局,分子布局(numerator layout)和分母布局(denominator layout)。
为了阐明这两种布局的区别,我们先来看最简单的求导规则。
首先是向量 y对标量 x求导,我们假定所有的向量都是列向量,
y是标量,x是向量
函数举例: