反向传播中的 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 导数的主要内容,如果未能解决你的问题,请参考以下文章