【动手学深度学习】00-矩阵求导和自动求导

1.矩阵求导

1.1 标量导数(高中知识)

都是高中的知识
在这里插入图片描述

1.2 亚导数

将导数拓展到不可导的情况

在这里插入图片描述

1.3 梯度

将导数扩展到向量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7XBLTEhV-1646918599686)(00-autograd.assets/image-20220308195139662.png)]

1.3.1 ∂ y / ∂ x \partial y/\partial\mathbf{x} y/x 底部是向量,上部是标量

由于向量在底部,所以求导之后结果的向量会反过来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VzRWJXvM-1646918599687)(00-autograd.assets/image-20220308201452411.png)]

样例为下:

特别的就是,两个向量的内积为矩阵,sum一个向量,其导数为向量1的转置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NhAncMdu-1646918599688)(00-autograd.assets/image-20220308200744624.png)]

注意,对于 ∂ < w , x > ∂ w = x T \frac{\partial<\bold{w,x}>}{\partial\bold{w}} = \bold{x^T} w<w,x>=xT

1.3.2 ∂ y / ∂ x \partial \bold{y}/\partial x y/x 底部是标量,上部是向量

上部是向量的时候,求导不会反置了,这个叫做分子布局符号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bQFugCFh-1646918599689)(00-autograd.assets/image-20220308201537854.png)]

向量和向量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CbD1NYZN-1646918599690)(00-autograd.assets/image-20220308202334947.png)]

样例:

注意第一行最后两列,a和A分别为和向量x无关的向量和矩阵

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQCbAXxL-1646918599692)(00-autograd.assets/image-20220308202524987.png)]

1.3.3 拓展到矩阵(拓展内容)

同样,和向量一样,如果矩阵在下面,那么他的行和列的个数就会转一下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B8EFwx8Z-1646918599693)(00-autograd.assets/image-20220308202956028.png)]

2.自动求导

2.1 向量链式法则

类比标量的链式法则,重点就是维度要弄对

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tUSPo36c-1646918599694)(00-autograd.assets/image-20220308203214739.png)]

例子1:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fk3WgvRK-1646918599695)(00-autograd.assets/image-20220308204406709.png)]

例子2 :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hw9GnycC-1646918599696)(00-autograd.assets/image-20220308204635140.png)]

2.2 自动求导

对于神经网络几百层的神经,手动求导几乎不可能,所以使用自动求导计算。

自动求导计算一个函数在指定值上的导数,有别于:

  • 符号求导:给出表达式,求出导数表达式
  • 数值求导:不需要知道f(x)的样子,通过一些数值去拟合这个函数
2.2.1 计算图

pytorch中不需要使用,但是tansflow和mxnet中可以显示构造

有点类似于刚才的链式求导过程

  • 将代码分解为操作子
  • 将计算表示成一个无环的图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N3bCkZEg-1646918599697)(00-autograd.assets/image-20220308205501563.png)]

  • 显示构造,TensorFlow MXNet
  • 隐式构造 MXNet PyTorch
2.2.2 自动求导的两种方式
  • 正向累积,从内往外
  • 反向累积、又称反向传递(大名鼎鼎)
    - [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3u9y1oAN-1646918599699)(00-autograd.assets/image-20220308210325668.png)]
2.2.3反向累积

例子:

先计算z关于b的导数为2b,由于之前计算过了b的结果,所以读取之前存的b的结果即可。

同理往下继续算,需要的结果就从之前计算存的结果中读取即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XG3ZOOpt-1646918599700)(00-autograd.assets/image-20220308211010870.png)]

总结:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ap5RhWIu-1646918599701)(00-autograd.assets/image-20220308211135067.png)]

复杂度

内存复杂度:O(n),因为需要存储正向的所有中间结果(这也是耗费GPU资源的原因)

在这里插入图片描述

对于正向传播,如果计算一个变量的梯度,还需要再扫描一遍,复杂度太高。所以来说一般的神经网络几乎不会去用正向传播

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值