参考:自动求导 博客参考(英文,非常棒!):https://grzegorzgwardys.wordpress.com/2016/04/22/8/

微分算子

自动求导 - 图1

梯度

自动求导 - 图2

计算机求导方式

手动求导

先手动计算出导数的公式,然后带入变量值,具有很大的局限性;

数组导数

采用近似的方式,利用差分取代导数。
自动求导 - 图3

符号求导

先利用计算机求解导数表达式,然后利用表达式计算最终的导数值,和人计算过程类似;
没有用于深度学习求导原因:表达式冗长。(冗长在于未化简之前,并且这样看起来也相对复杂)

自动求导

前向传播

采用计算图的方式;首先表达式生成图:
自动求导 - 图4
利用图以及链式法则进行导数求值:(基础函数导数公式还是必须的)
自动求导 - 图5
从上面可以看到,只要有了计算图以及基础函数的求导公式,那么进行一次前向传播即可得到每个中间函数关于输入变量的导数;

反向传播

反向传播和前向传播不同,它是计算输出对于每一个中间变量的导数(深度学习参数更新需要用到的导数)
其和前向传播类似,需要先进行计算图的生成,然后利用链式法则,依次求取输出函数对于中间变量的导数。
对于上面的计算图,反向传播可以计算出:自动求导 - 图6
image.png
框出导数出现两次是因为,该自动求导 - 图8后面有两个节点:自动求导 - 图9

BP算法中有两类导数,一类是节点导数,一类是参数导数。计算参数的导数是最终的目标,节点导数是中介。

矩阵求导

矩阵求导可参考:
矩阵求导术
计算机中,通常就是矩阵运算,函数y对多个自变量进行求导可以采用矩阵求导的公式。

CNN求导

CNN-tutotial
CNN虽然被称为卷积,但是更类似于相关运算:自动求导 - 图10其中自动求导 - 图11为卷积核大小除2取整,但是相关运算可以当做卷积来处理(将卷积核绕核中心点旋转即可)。基于此可以将CNN的卷积运算写作更简单的形式:自动求导 - 图12

  • 卷积中的下标自动求导 - 图13表示了平移的长度;注意同一个函数表示可以不同,比如自动求导 - 图14都是表示同一个函数,知识自变量形式不同(变量替换,形式替换)。有时候可能会被迷惑!
  • 还有就是自动求导 - 图15自动求导 - 图16也表示相同的函数;只是自动求导 - 图17既可以表示具体位于自动求导 - 图18的值,又可以表示整个函数!