标量、向量、矩阵微分与自动求导

标量、向量、矩阵微分与自动求导,第1张

一图以蔽之(本文内容均为分子布局):

标量向量矩阵
x (1,)x (n, 1)X (n, k)
标量y (1,) (1,) (1, n)  (k, n)
向量y (m, 1) (m, 1) (m, n) (m, k, n)
矩阵Y (m, l) (m, l) (m, l, n) (m, l, k, n)

几个重要公式:

1.自动求导
  • 自动求导计算一个函数在指定值上的导数
  • 它有别于

                (1)符号求导(显式计算) 

                 (2)数值求导(无需知道f(x)具体内容)

                        通过数值拟合,用一个很小很小的h

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

            每个圈表示一个输入或计算             

  • 显式构造
from mxnet import sym

a = sym.var()
b = sym.var()
c = 2 * a + b
# bind data into a and b later

        如Tensorflow/Theano/MXNet

  • 隐式构造
from mxnet import autograde, nd

with autograde.record()
    a = nd.ones((2, 1))
    b = nd.ones((2, 1))
    c = 2 * a + b

        如PyTorch/MXNet

3.自动求导的两种模式
  • 链式法则:

  • 正向累积:

  • 反向累积(反向传递):

        即backpropogation

         最后一行纠正一下,书对x求偏导,不是w

4.反向累积总结

构造计算图

前向:执行图,存储中间结果

反向:从相反方向执行图(去除不需要的枝)(需要的时候把之前中间结果拿过来用

 5.反向累积复杂度
  • 计算复杂度:O(n),n是 *** 作子个数(即神经网络层数)
    • 通常正向和反向的代价类似
  • 内存复杂度:O(n),因为需要存储正向的所有中间结果

                                    此即为深度神经网络大量占用GPU资源的原因

  • 跟正向累积对比:
    • O(n)计算复杂度用来计算一个变量的梯度
    • O(1)内存复杂度

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/589827.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-13
下一篇 2022-04-13

发表评论

登录后才能评论

评论列表(0条)

保存