深度学习入门(7)误差反向传播计算方式及简单计算层的实现

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

目录

1 误差的反向传播

1.1加法节点的反向传播

1.2乘法节点的反向传播

1.3 苹果的例子

2 简单层的实现

2.1乘法层的实现

2.2加法层的实现

2.3总结


1 误差的反向传播

1.1加法节点的反向传播

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第1张图片

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第2张图片 

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第3张图片

1.2乘法节点的反向传播

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

 

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

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第4张图片

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第5张图片 

1.3 苹果的例子

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

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第6张图片

 

练习:

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

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第7张图片

答案:

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第8张图片 

2 简单层的实现

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

2.1乘法层的实现

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

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第9张图片

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

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

举例:

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

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第10张图片

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第11张图片 

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

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第12张图片

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

2.2加法层的实现

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第13张图片

 

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

举例:

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

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第14张图片

深度学习入门(7)误差反向传播计算方式及简单计算层的实现_第15张图片 

2.3总结

计算的大致步骤:

1,生成必要的层,

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

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

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

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

你可能感兴趣的:(深度学习入门,python,深度学习,计算图,误差的反向传播)