动手学习深度学习-《自动求导》

向量链式求导法则

标量链式法则
在这里插入图片描述


扩展到向量

  • y y y是关于标量 u u u的一个标量, x \bf{x} x是一个向量
    动手学习深度学习-《自动求导》_第1张图片

  • y y y是关于向量 u \bf{u} u的一个标量, x \bf{x} x是一个向量
    动手学习深度学习-《自动求导》_第2张图片

  • y \bf{y} y是关于向量 u \bf{u} u的一个向量, x \bf{x} x是一个向量
    动手学习深度学习-《自动求导》_第3张图片

动手学习深度学习-《自动求导》_第4张图片


实例1
动手学习深度学习-《自动求导》_第5张图片

实例2
动手学习深度学习-《自动求导》_第6张图片


计算图

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

如: z = ( ⟨ x , w ⟩ − y ) 2 z = (⟨x, w⟩ − y)^2 z=(⟨x,wy)2表示成下面的无环图:
动手学习深度学习-《自动求导》_第7张图片
该图就是一个计算图


计算图由两种构造方式:

  • 显示构造:(tensorflow/Theano/MXNet)
    先将公式构造出来,最后再赋值
    动手学习深度学习-《自动求导》_第8张图片

  • 隐式构造:(PyTorch/MXNet)
    先赋值,再构造公式
    动手学习深度学习-《自动求导》_第9张图片


自动求导的两种模式

对于链式求导:
在这里插入图片描述
可以从前往后计算,也可以从后往前计算,如下所示:

动手学习深度学习-《自动求导》_第10张图片

反向积累:正是模型训练过程反向传播,上面的 y y y相当于 l o s s loss loss,从后面向前传播梯度。


在实际中,会先正向计算并存储中间变量的值。
如下图,在正向中会计算 w 、 x 、 y 、 a 、 b 、 z w、x、y、a、b、z wxyabz的值

动手学习深度学习-《自动求导》_第11张图片

在反向积累计算导数的时候,就会用到正向传播过程中存储的中间变量:
动手学习深度学习-《自动求导》_第12张图片

反向累计求导复杂度:
计算复杂度为 O ( n ) O(n) O(n) n n n为操作子的个数;内存代价也为 O ( n ) O(n) O(n),因为需要存储 n n n各操作子的值。

你可能感兴趣的:(动手学习深度学习-李沐老师,深度学习,学习,人工智能)