ReLU衍生物在反向传播中

Ger*_*app 7 backpropagation neural-network sigmoid

:)

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

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

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

谢谢.

mal*_*oro 10

因为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.

  • 我只是想从纯粹的数学观点来说OP是正确的,说"ReLU没有衍生物".这是正确的,因为其域中的一个点使得导数未定义.如果我们只是想象这个功能,这很容易看出来.但我们只是采用一种约定(即导数在x = 0时为0)并假装函数是可微的,但这并非严格正确. (10认同)

Bas*_*ast 6

虽然 ReLU 很常见,但导数可能会令人困惑,部分原因是理论上它没有在 处定义x=0,实际上,我们只是使用f'(x=0)=0

这是假设由 ReLU(修正线性单元)表示的意思y=max(0,x)。这个函数看起来像这样:

ReLU

x>0对于很容易看出导数是什么的部分。对于每一个1增加xy增加1(当然我们也可以从函数定义中看到),这里的导数就是f'(x>0)=1

x<0对于很容易看出线是水平的部分,即斜率是平的或0。这里我们就有了f'(x<0)=0

棘手的(但在实践中并不是非常重要)部分出现在x=0。这里导数的左侧(LHS)和右侧(RHS)不相等,理论上它是不确定的。

在实践中我们通常只使用f'(x=0)=0。但你也可以使用f'(x=0)=1,尝试一下。

为什么我们只能这么做?请记住,我们使用这些导数来缩放权重更新。通常,权重更新以各种其他方式(学习率等)进行缩放。当然,按 0 缩放确实意味着不进行更新,这也会发生,例如 Hinton 的 dropout。还要记住,如果误差项为 0,您计算的是误差项(在输出层)的导数...


Aqi*_*taz 5

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

在此处输入图片说明