前言
基于前两篇文章《深度学习入门(6)误差反向传播基础---计算图与链式法则》《深度学习入门(7)误差反向传播计算方式及简单计算层的实现》计算图基础及其简单层的实现,本文主要介绍如何将计算图运用到神经网络中,通过定义一个类的方式用计算图实现激活函数的 ReLU层和 Sigmoid层,让其成为构成神经网络的一个基础层。
一、ReLU层计算图及其代码实现
如果正向传播时的输入x大于0,则反向传播会将上游的值原封不动地传给下游。反过来,如果正向传播时的x小于等于0,则反向传播中传给下游的信号将停在此处。
如果正向传播时的输入值小于等于0,则反向传播的值为0。因此,反向传播中会使用正向传播时保存的 mask,将从上游传来的 dout的mask中的元素为 True的地方设为0。、
注:ReLU 层的作用就像电路中的开关一样。正向传播时,有电流通过的话,就将开关设为ON;没有电流通过的话,就将开关设为OFF。反向传播时,开关为ON的话,电流会直接通过;开关为OFF的话,则不会有电流通过。
二、Sigmoid层计算图及其代码实现
计算图:
图中,除了“ ×”和“ +”节点外,还出现了新的“ exp”和“ /”节点。“ exp”节点会进行y = exp(x)的计算,“ /”节点会进行y=1/x的计算。
计算图可以画成下图的集约化的“ sigmoid”节点。
通过对节点进行集约化,可以不用在意Sigmoid层中琐碎的细节,而只需要专注它的输入和输出。
这个实现中,正向传播时将输出保存在了实例变量 out中。然后,反向传播时,使用该变量 out进行计算。
总结
本文主要介绍了激活函数的 ReLU层和 Sigmoid层计算图的表示方式,以及代码实现。