neural-network - 使用 ReLU 进行反向传播 - 理解计算
问题描述
我已经开始使用神经网络,并尝试使用 ReLU 激活函数实现前向和后向传递。但是,当涉及到向后传球时,我觉得我在这里误解了一些相对基本的东西。
import numpy as np
class ReLU:
def __init__(self):
self.input_tensor = None
def forward(self, input_tensor):
self.input_tensor = input_tensor
return np.maximum(0, input_tensor)
def backward(self, error_tensor):
deriv = np.greater(error_tensor, 0).astype(int)
return self.input_tensor - deriv
我的问题很简单:backward 方法的输出甚至应该看起来如何?我的困惑源于 ReLU 的导数足够简单这一事实,但我不确定如何将其考虑到传递到下一节课的输出中。我绝对知道我不能简单地从旧输入中减去导数,但我无法看到它们是如何结合在一起的。
解决方案
对于 x > 0,relu 就像 x 乘以 1。否则,它就像 x 乘以 0。然后导数是 1 (x>0) 或 0 (x<=0)。
所以根据输出是什么,你必须乘以error_tensor
1 或 0。
如果不清楚,这意味着您必须保存前向传递的输出以帮助计算梯度。
推荐阅读
- botframework - 在 Web 应用程序中集成 Azure Bot
- php - 错误迁移:无法声明类 X,因为该名称已在使用中
- python - 如何使用 Scrapy Crawler 和 Splash 来抓取 Javascript 页面
- android - 自定义视图不遵守约束布局中的约束
- java - H2中的Spring @Transactional用于插入语句
- android - 错误:Andriod 中表达式 save = canvas.save(@Saveflags save) 的非法开始
- amazon-web-services - DynamoDB put_item 的预签名 URL
- symfony - Symfony 约束验证不起作用,组被忽略
- javascript - IE11 对象不支持属性或方法“indexOf”(但它不是对象,在其他浏览器中也可以使用)
- angular - 使用 HttpClient 和 HttpClient 的 Angular Http 完整响应