学习吴恩达机器学习第九章反向传播编程练习,有这样一个公式:

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播算法

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播_02

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播算法_03

它的证明在博客反向传播算法(过程及公式推导)中可以找到 

原博客证明内容过多,这里节选关键部分:

首先,将第

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播算法_04

层第

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播算法_05

个神经元中产生的错误(即实际值与预测值之间的误差)定义为:

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__机器学习_06

(由后往前,计算每一层神经网络产生的误差):


AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__机器学习_07

 

        推导过程:

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__机器学习_08

公式中通过求和号 

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播算法_09

 把偏导数的分量相加,是以求多元复合函数偏导链式法则为依据的。

 

在极坐标中,x = x(u, v), y = (u, v),退化成直角坐标后f = f(x, y),如何求f的全微分?这与之前不同,将x,y代入f后仍有两个变量,这需要连续使用链式法则:

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播_10

  x和y的微小改变导致了f的改变,而u和v的微小改变有导致了x和y的改变,这样传递的结果就变成了u和v的微小改变有导致了f的改变。

  需要注意的是最终结果中的偏导:

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播_11

其中

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播_12


AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播算法_13


AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播算法_14


AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播_15


AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__机器学习_16


AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播_17

不是函数,是偏导的数值。把它们理解成系数,就能理解其中系数的交换和重新结合,最终凑成全微分公式的形式,从中得到偏导数链式法则。

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播算法_18

其实偏导数链式法则,就是全微分链式法则的延续,df可以分解为dx+dy,dx可以再分解为du+dv,dy可以再分解为du+dv,......,如果u或者v还是其他变量的函数,那么du或者dv还可以再分解。(我为了方便书写和理解没有带系数,比如dx+dy其实是dx与dy分别乘以系数的代数和,8dx+7dy,8和7分别是系数,如果我用另一个字母表示系数,那么看着更混乱)

 

以下链接可以帮助理解偏导数的求解过程,它利用的原理还是偏导数链式法则。

 

另外,关于

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播_19

 = 

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__机器学习_20

,是这样得来的:因为,

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__机器学习_21

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播_22

通过导数运算得到:

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播_23

 

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__反向传播算法_24

但是少了一项

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__机器学习_25

,也就是sigmoid的导数,不应该忽略这一项。也许是因为这里的C是方差,而实际的C(J)是:

AOTAutograd是如何将正向传播和反向传播计算图整合为一个调用 fw_compiler 和 bw__机器学习_26