目录
摘要
本篇文章继续学习尚硅谷深度学习教程,学习内容是反向传播相关内容
1.反向传播
利用计算图的反向传播,可以很容易地计算出输出关于输入的偏导数
加法节点的反向传播
对于z=x+y,,
。因此加法的反向传播会将上游传来的值原样向下游传递。

乘法节点的反向传播
对于z=xy,,
。因此乘法的反向传播会将上游传来的值乘以输入的翻转向下游传递。

2.激活层的反向传播和实现
将计算图应用到神经网络中。神经网络中一步重要的计算操作就是激活函数,下面就来讨论各种激活函数的反向传播,基于这些我们就可以用代码实现激活层的完整功能了。
ReLU的反向传播
对于ReLU函数:

其导数为:

分为和
两种情况分别讨论,反向传播的计算图如下:

ReLU层可以在代码中实现为一个类 Relu:
python
class Relu:
def __init__(self):
self.mask = None
def forward(self, x):
self.mask = (x <= 0)
out = x.copy()
out[self.mask] = 0
return out
def backward(self, dout):
dout[self.mask] = 0
dx = dout
return dx
Sigmoid的反向传播
对于Sigmoid函数:

其导数为:

利用计算图的反向传播,也可以得到相同的结果:

简化得:

Sigmoid层可以在代码中实现为一个类 Sigmoid:
python
class Sigmoid:
def __init__(self):
self.out = None
def forward(self, x):
out = sigmoid(x)
self.out = out
return out
def backward(self, dout):
dx = dout * (1.0 - self.out) * self.out
return dx