我试图用xor
函数训练简单的反向传播神经网络。当我使用tanh(x)
作为激活函数时,使用衍生1-tanh(x)^2
,我在约1000次迭代后得到正确的结果。但是,当我使用g(x) = 1/(1+e^(-x))
作为激活函数,并使用衍生g(x)*(1-g(x))
时,我需要大约50000次迭代才能获得正确的结果。可能是什么原因?多层感知器的激活函数
谢谢。
我试图用xor
函数训练简单的反向传播神经网络。当我使用tanh(x)
作为激活函数时,使用衍生1-tanh(x)^2
,我在约1000次迭代后得到正确的结果。但是,当我使用g(x) = 1/(1+e^(-x))
作为激活函数,并使用衍生g(x)*(1-g(x))
时,我需要大约50000次迭代才能获得正确的结果。可能是什么原因?多层感知器的激活函数
谢谢。
是的,你观察到的是真的。在使用反向传播训练神经网络时,我也有类似的观察结果。对于XOR
问题,我用建立2x20x2
网络,物流功能需要3000+发作得到如下结果:
[0, 0] -> [0.049170633762142486]
[0, 1] -> [0.947292007836417]
[1, 0] -> [0.9451808598939389]
[1, 1] -> [0.060643862846171494]
在使用tanh
为激活功能,这里是后800分集的结果。 tanh
一致收敛速度快于logistic
。
[0, 0] -> [-0.0862215901296476]
[0, 1] -> [0.9777578145233919]
[1, 0] -> [0.9777632805205176]
[1, 1] -> [0.12637838259658932]
两个函数形状看起来像下面(来源:efficient backprop):
1/(1+e^(-x))
。tanh
函数,也称为双曲正切。很容易看出tanh
是关于原点的反对称。
对称S形作为
tanh
这样经常收敛比标准逻辑函数更快。
同样来自维基Logistic regression:
从业告诫说S形函数与反向传播训练网络时其是反对称关于原点(例如,双曲正切)导致更快收敛。
请参阅efficient Backprop了解更多详情,在此解释直觉。
查看elliott替代tanh
更容易计算。它在下面显示为黑色曲线(蓝色是原始的tanh
)。
两件事情应该从上面的图表中脱颖而出。首先,TANH通常比Elliott需要更少的迭代训练。因此,对于编码器来说,Elliott的训练精度并不高。但是,请注意培训时间。 Elliott在TANH的一半时间内完成了它的整个任务,即使需要进行额外的迭代。这是一个巨大的改进,字面意思是在这种情况下,Elliott会将你的训练时间缩短一半,并提供相同的最终训练错误。虽然它需要更多的训练迭代才能达到目标,但每次迭代的速度要快得多,但仍然会导致训练时间缩短一半。
太小的学习率可能?:p您如何编码XOR数据集? '1 0 = 1'或'-1 1 = 1'? –
但是为什么学习常数对于tanh是好的,但对逻辑函数来说还不够好?我认为“1”输出为真,“0”为假。 – user1767774
“结果”是什么意思?两个激活函数500次后的预测有多好? – alfa