深度学习入门(7)误差反向传播计算方式及简单计算层的实现
创始人
2024-02-24 23:21:30
0

在上一节中《深度学习入门(6)误差反向传播基础---计算图与链式法则》,我们介绍了误差反向传播的计算图与导数计算的链式法则,这一节主要介绍计算图中各计算节点的误差反向传播计算方式,以及加法与乘法层的实现。

目录

1 误差的反向传播

1.1加法节点的反向传播

1.2乘法节点的反向传播

1.3 苹果的例子

2 简单层的实现

2.1乘法层的实现

2.2加法层的实现

2.3总结


1 误差的反向传播

1.1加法节点的反向传播

 

1.2乘法节点的反向传播

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

 

乘法的反向传播会将上游的值乘以正向传播时的输入信号的“翻转值”后传递给下游。翻转值表示一种翻转关系,如图5-12所示,正向传播时信号是x的话,反向传播时则是y;正向传播时信号是y的话,反向传播时则是x。

 

1.3 苹果的例子

再来思考一下本章最开始举的购买苹果的例子( 2个苹果和消费税)。这里要解的问题是苹果的价格、苹果的个数、消费税这3个变量各自如何影响最终支付的金额。这个问题相当于求“支付金额关于苹果的价格的导数”“支付金额关于苹果的个数的导数”“支付金额关于消费税的导数”。用计算图的反向传播来解的话,求解过程如图所示。

 

练习:

在图中的方块中填入数字,求各个变量的导数?

答案:

 

2 简单层的实现

我们把要实现的计算图的乘法节点称为“乘法层”( MulLayer),加法节点称为“加法层” AddLayer)。

2.1乘法层的实现

层的实现中有两个共通的方法(接口)forward()backward()。 forward()对应正向传播, backward()对应反向传播。

注:backward()将从上游传来的导数( dout)乘以正向传播的翻转值,然后传给下游。

dout表示从上游传过来的导数。

举例:

现在我们使用 MulLayer实现前面的购买苹果的例子( 2个苹果和消费税)

 

 此外,关于各个变量的导数可由 backward()求出。

 这里,调用 backward()的顺序与调用 forward()的顺序相反。此外,要注意 backward()的参数中需要输入“关于正向传播时的输出变量的导数”。比如,mul_apple_layer乘法层在正向传播时会输出 apple_price,在反向传播时,则会将 apple_price的导数 dapple_price设为参数。

2.2加法层的实现

 

backward()将上游传来的导数( dout)原封不动地传递给下游。

举例:

购买2个苹果和3个橘子的例子。

 

2.3总结

计算的大致步骤:

1,生成必要的层,

2,以合适的顺序调用正向传播的 forward()方法。

3,用与正向传播相反的顺序调用反向传播的 backward()方法,就可以求出想要的导数。

如果内容对你有帮助,感谢点赞+关注哦!

更多干货内容持续更新中…

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...