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<0
f(x)相对于x的导数给出结果时f'(x)=0
.在第二种情况下,计算清楚f'(x)=1
.
虽然 ReLU 很常见,但导数可能会令人困惑,部分原因是理论上它没有在 处定义x=0
,实际上,我们只是使用f'(x=0)=0
。
这是假设由 ReLU(修正线性单元)表示的意思y=max(0,x)
。这个函数看起来像这样:
x>0
对于很容易看出导数是什么的部分。对于每一个1
增加x
,y
增加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,您计算的是误差项(在输出层)的导数...