反向传播将局部导数向反方向传递,传递的原理基于链式法则。反向传播时将信号乘以节点的局部导数然后传递给下一个节点。
![图片[1]-4.2 链式法则-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-244.png)
![图片[2]-4.2 链式法则-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-245.png)
4.3 反向传播
利用计算图的反向传播,可以很容易地计算出输出关于输入的偏导数。
4.3.1 加法节点的反向传播
![图片[3]-4.2 链式法则-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-246.png)
4.3.2 乘法节点的反向传播
![图片[4]-4.2 链式法则-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-247.png)
4.4 激活层的反向传播和实现
现在将计算图应用到神经网络中。神经网络中一步重要的计算操作就是激活函数,下面就来讨论各种激活函数的反向传播,基于这些我们就可以用代码实现激活层的完整功能了。
4.4.1 ReLU的反向传播
![图片[5]-4.2 链式法则-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-248.png)
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
4.4.2 Sigmoid的反向传播
![图片[6]-4.2 链式法则-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-249.png)
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
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END















请登录后查看评论内容