反向传播中的 ReLU 导数

Posted

技术标签:

【中文标题】反向传播中的 ReLU 导数【英文标题】:ReLU derivative in backpropagation 【发布时间】:2017-06-21 21:44:29 【问题描述】:

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

这里是image,关于 weight5 对总误差的影响。 在本例中,如果我使用 sigmoid 函数,则 out/net = a*(1 - a)。

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

【问题讨论】:

取决于实际的 ReLU 表达式。有几种 ReLU 可以使用。然而,它只是 ReLU 函数对其参数的导数。您可以手动或使用例如计算。沃尔夫阿尔法。或者只是谷歌它。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

因为 ReLU 没有导数。

不,ReLU 有导数。我假设您正在使用 ReLU 函数f(x)=max(0,x)。这意味着如果x<=0 然后f(x)=0,否则f(x)=x。在第一种情况下,当x<0 所以 f(x) 对 x 的导数给出结果f'(x)=0。第二种情况,很明显计算f'(x)=1

【讨论】:

我感觉这将成为解决方案,但我不确定,尤其是关于 f'(x)=0。谢谢你的回答:) 我只想说,从纯数学的角度来看,OP 是正确的,即“ReLU 没有导数”。这是正确的,因为其域中的一个点使导数未定义。如果我们只是将函数可视化,这很容易看出。但是我们只是采用了一个约定(即导数在 x=0 时为 0)并假设函数是可微的,但这并不严格。 嗨,我有一个问题。 ReLU 在 x

以上是关于反向传播中的 ReLU 导数的主要内容,如果未能解决你的问题,请参考以下文章

.误差反向传播法—ReLU/Sigmoid/Affine/Softmax-with-Loss层的实现

python: 深度学习-误差反向传播法

反向传播 - 误差导数

反向传播 - 神经网络 - 导数

深度学习梯度下降和反向传播原理

反向传播算法之要点(Backpropagation)