26

我要在使用 ReLU 的神经网络上进行反向传播。在我之前的一个项目中,我是在一个使用 Sigmoid 激活函数的网络上完成的,但现在我有点困惑,因为 ReLU 没有导数。

这是一张关于 weight5 如何影响总误差的图像。在此示例中,如果我使用 sigmoid 函数,则 out/net = a*(1 - a)。

我应该写什么而不是“a *(1 - a)”来使反向传播工作?

4

3 回答 3

29

因为 ReLU 没有导数。

不,ReLU 有导数。我假设您正在使用 ReLU 函数f(x)=max(0,x)。这意味着如果x<=0那么f(x)=0,否则f(x)=x。在第一种情况下,当x<0f(x) 对 x 的导数是这样时,结果为f'(x)=0。在第二种情况下,很明显计算f'(x)=1.

于 2017-02-05T03:53:12.563 回答
12

对于 x >= 0,Relu 导数为 1,对于 x < 0,则为 0

在此处输入图像描述

于 2019-03-23T16:45:07.353 回答
2

relu 导数可以用 np.heaviside 阶跃函数来实现,例如 np.heaviside(x, 1)。第二个参数定义了 x = 0 时的返回值,所以当 x = 0 时,1 表示 1。

于 2019-06-29T18:23:39.997 回答