神经网络的反向传播算法推导 — 前期知识准备

目录

一、前向模式求导

二、反向模式求导

三、小结


 

        初学神经网络的同学,碰到反向传播算法章节时通常有些困惑,这篇文章不求张本继末,但能让读者思路逐渐清晰便可。要理解反向传播算法,需要先学习一下前向模式求导 和 反向模式求导。

一、前向模式求导

首先我们用图来表示计算式 g=((a+1)+b)*(b+c) :

                                                   (图1)

若令变量a=5、b=3、c=1,则上图可表示为:

                                                   (图2)

接下来我们对上图路径上的每一个子算式求偏导:

d=a+1        \frac{\partial d }{\partial a} = \frac{\partial (a+1) }{\partial a} = 1

e=d+b       \frac{\partial e}{\partial d} = \frac{\partial (d+b)}{\partial d} = 1                  \frac{\partial e}{\partial b} = \frac{\partial (d+b)}{\partial b} = 1   

f=b+c        \frac{\partial f}{\partial b} = \frac{\partial (b+c)}{\partial b} = 1                  \frac{\partial f}{\partial c} = \frac{\partial (b+c)}{\partial c} = 1

g=e*f         \frac{\partial g}{\partial e} = \frac{\partial (e*f)}{\partial e} = f = 5          \frac{\partial g}{\partial f} = \frac{\partial (e*f)}{\partial f} = e = 9        

    

                                                   (图3)

 

根据导数的定义(高等数学第二章):

可知  \frac{\partial e }{\partial d} = 1  通常可以理解为因变量随自变量的变化率,即当自变量 d 变化1个单位,因变量 e 随之变化1个单位,同理  \frac{\partial g }{\partial e} = 5则表示自变量 e 变化1个单位,因变量 g 随之变化5个单位

那么,按照图中的关联关系,是否    \frac{\partial g }{\partial b} = \frac{\partial e }{\partial b} \cdot \frac{\partial g }{\partial e}= 1*5 = 5   呢?         \large {\color{Red} \times}

                                                   (图4)

由图可见,从 b 节点到 e 节点有两条路径 ① b->e->g 和 ② b->f->g,所以 g 的变化除了由b、e决定,还有f, 我们需要将所有的路径都考虑进去:

\frac{\partial g }{\partial b} = \frac{\partial e }{\partial b} \cdot \frac{\partial g }{\partial e} + \frac{\partial f }{\partial b} \cdot \frac{\partial g }{\partial f} = 1*5 + 1*9= 14    

即:路径上所有的边相乘,所有的路径相加。

若从 x 到 y 有n=9条路径, 求 \frac{\partial z }{\partial x}   ,如下图所示:

                                                   (图5)

则 \frac{\partial z }{\partial x} = ih + im + in + jh + jm + jn + kh + km + kn     ----------------------- (1)

相当于是集合 {i, j, k} 和集合 {h, m, n}的笛卡尔积,于是(1)式又可以写成:

\frac{\partial z }{\partial x} = (i + j + k)*(h + m + n)                                               ----------------------- (2)

上面(2)式可理解为 先求 x 对 y 的总影响 (i+j+k) ,再求 y 对 z 的总影响(h + m +n) ,最后综合在一起,这便是前向模式求导,(图5)可显示成如下形式:

                                                   (图6)

(图3)用前向模式求导以(图6)的方式表示如下:

                                                   (图7)

二、反向模式求导

        反向模式求导是从后向前,先求 y 对 z 的影响(h + m +n) ,再求 x 对 y 的影响(i+j+k) ,然后相乘(h + m +n)*(i+j+k):

                                                   (图8)

        前向模式求导追踪一个输入如何影响每一个节点,对每一个节点进行  \frac{\partial }{\partial x} 操作;反向求导模式追踪每一个节点如何影响一个输出,对每一个节点进行 \frac{\partial z}{\partial } 操作。

        (图2)用反向模式求导以(图8)的方式表示如下:

                                                   (图9)

无论是前向还是反向模式求导,计算时记得将同一可达路径相乘(上图黄色方框内),不同可达路径相加即可。

三、小结

        图7 和 图9 一个是前向模式求导,一个是反向模式求导,两者区别如下:

1)图7 和 图9 中椭圆形框内,图7每一个椭圆形框内求得的只是对 b 的偏导,而 图9 椭圆形框内求得的是 g 对输入a、b、c的偏导;

2)从计算时间复杂度来讲,图7 计算g 对所有输入a、b、c的偏导需计算三次 \frac{\partial g}{\partial a}\frac{\partial g}{\partial b}\frac{\partial g}{\partial c}   (图7只计算了 \frac{\partial g}{\partial b} ),图9 反向求导只计算了一次/遍,就得到三个输入的偏导  \frac{\partial g}{\partial a}\frac{\partial g}{\partial b}\frac{\partial g}{\partial c} ;

        由此可见,反向模式求导可以极大减少计算次数,加速机器学习效率,当我们训练神经网络时,神经网络的权重参数可以是百万甚至过亿级别,因此反向求导模式可以极大的加速学习。

  • 34
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值