通俗易懂的反向传播法(python 代码实现)

目录

 

1. 计算图

1.1 计算图的优点

2. 链式法则

2.1 计算图的反向传播

2.2 什么是链式法则

2.3 链式法则和计算图

2.3 反向传播

2.3.1 加法节点的反向传播

2.3.2 乘法节点的反向传播

2.2.4 苹果例子

3.简单层的实现

3.1 乘法层的实现

3.2 加法层的实现

4 激活函数层的实现

4.1 ReLU层

4.2 Sigmoid层

5 Affine/Softmax层的实现

5.1 Affine层

5.2 批版本的Affine

5.3 Softmax-with-Loss层

6 误差反向传播的实现


1. 计算图

计算图将计算过程用图形表示出来。这里说的图形是数据结构图,通过多个节点和边表示(连接节点的直线称为“边”)。
用计算图求解几个常见的问题:

问题1: 太郎在超市买了2个100日元一个的苹果,消费税是10%,请计算支付金额。

问题2: 太郎在超市买了2个苹果、 3个橘子。其中,苹果每个100日元,橘子每个150日元。消费税是10%,请计算支付金额。

综上,用计算图解题的情况下,需要按如下流程进行。
1.构建计算图。
2.在计算图上,从左向右进行计算。
这里的第2歩“从左向右进行计算”是一种正方向上的传播,简称为正向传播(forward propagation)。正向传播是从计算图出发点到结束点的传播。既然有正向传播这个名称,当然也可以考虑反向(从图上看的话,就是从右向左)的传播。实际上,这种传播称为反向传播(backward propagation)。反向传播将在接下来的导数计算中发挥重要作用。

1.1 计算图的优点

优点1:局部计算使各个节点致力于简单的计算,从而简化问题,如下图所示

优点2:利用计算图可以将中间的计算结果全部保存起来(比如,计算进行到2个苹果时的金额是200日元、加上消费税之前的金额650日元等)。

优点3:可以通过反向传播高效计算导数

2. 链式法则

反向传播将局部导数向正方向的反方向(从右到左)传递,传递这个局部导数的原理,是基于链式法则(chain rule)

2.1 计算图的反向传播

假设存在y = f(x)的计算,这个计算的反向传播如下图所示:

反向传播的计算顺序是,将信号E乘以节点的局部导数,然后将结果传递给下一个节点。这里所说的局部导数是指正向传播中y = f(x)的导数,也就是y关于x的导数。比如,假设y = f(x) = x^2,
则局部导数为 = 2x。把这个局部导数乘以上游传过来的值(本例中为E),然后传递给前面的节点。

2.2 什么是链式法则

深度学习-链式求导:https://blog.csdn.net/weixin_40476348/article/details/94434483 (这位博主介绍的很详细)

2.3 链式法则和计算图

“**2”节点表示平方运算
根据链式法则,成立,对应“z关于x的导数”。也就是说,反向传播是基于链式法则的。

的结果为2(x + y)

 

2.3 反向传播

2.3.1 加法节点的反向传播

首先来考虑加法节点的反向传播。这里以z = x + y为对象,观察它的反向传播。 z = x + y的导数可由下式(解析性地)计算出来。

由图可知加法节点的反向传播只是将输入信号输出到下一个节点
 

2.3.2 乘法节点的反向传播

我们考虑z = xy,这个式子的导数用下式表示。

由图乘法的反向传播需要正向传播时的输入信号值,案列如下图所示:

因为乘法的反向传播会乘以输入信号的翻转值,所以各自可按1.3 × 5 =6.5、 1.3 × 10 = 13计算。
 

  • 12
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值