李沐-动手学深度学习(五)自动求导

2022-06-16  本文已影响0人  minlover

1、向量链式法则

内积<x,w>=x^T*w=[x1*w1,x2*w2,...xn*wn]是个标量,标量对向量求导,是向量的转置维度

2、自动求导

(1)神经网络动不动几百层,很难手动计算

符号求导指把导数公式求出来。数值求导指不需要知道具体的f(x)形式。

(2)自动求导怎么做的:计算图——本质上等价于用链式法则求导的过程。

计算图是一个无环的图

(3)显示构造:Tensorflow、Theano、MXNet

(4)隐式构造:PyTorch、MXNet

(4)有了计算图后,两种自动求导的方式

前向需要把所有中间值存下来,反向时(那俩灰的导数如果不需要就可以不算了),需要把中间结果拿过来用

反向累积前,需要先正着来一遍计算复杂度0(n),然后反向累积的计算复杂度O(n)。

反向累积内存复杂度高O(n),因为需要把正向的中间结果储存下。所以深度神经网络很耗GPU资源。

下图中,上面的正向只反向的第一步,下面的正向指正向累积。

正向累积的好处是,内存复杂度O(1),不管多深,不用存储中间结果,但是缺点是,每计算一个变量的梯度需要扫一遍O(n)。所以神经网络中不太用,因为神经网络需要对每一层算梯度,正向累积计算复杂度太高。

chapter_preliminaries/autograd.ipynb

x是tensor([0., 1., 2., 3.])。y是一个向量,但是机器学习中很少对一个向量函数来求导,所以大部分情况都是对标量求导,绝大部分情况,会对y进行一个求和sum再求导。

这是因为机器学习的loss经常是一个标量。

上一篇下一篇

猜你喜欢

热点阅读