我有传统反向传播的简单代码(使用传统的sigmoid激活函数),工作正常。
然后我将sigmoid改为整流器,即使是简单的XOR测试也无法收敛。
我添加了"泄漏"对整流器的衍生物而言,它仍然失败。
网络配置:
[输入图层,1或2个隐藏图层,输出图层]
输入图层没有权重,只是用于接受输入。
所有隐藏层和输出层都具有相同的激活功能(以前是sigmoid,现在更改为整流器)。
整流器是:
f(x)= max(0,x)
f'(x)= sign(x)
无法使网络收敛,所以我添加了泄漏,但它仍然失败。
我的背部支柱与矫正单位的最佳结果 (网络配置为[2,8,8,1]):
但经过数十次试验后,我只获得了两次正确的结果。
网络似乎无法摆脱这些本地最低标准。
代码在这里:
https://github.com/Cybernetic1/genifer5-c/blob/master/back-prop.c
请注意,有两个版本:一个带有传统的sigmoid,另一个带有_ReLU后缀。
我的问题与此类似: Neural network backpropagation with RELU 但即使在那个问题上,答案也不能令人满意和不确定。