4

我试图用xor函数训练简单的反向传播神经网络。当我使用tanh(x)作为激活函数时,使用衍生1-tanh(x)^2,我在约1000次迭代后得到正确的结果。但是,当我使用g(x) = 1/(1+e^(-x))作为激活函数,并使用衍生g(x)*(1-g(x))时,我需要大约50000次迭代才能获得正确的结果。可能是什么原因?多层感知器的激活函数

谢谢。

+1

太小的学习率可能?:p您如何编码XOR数据集? '1 0 = 1'或'-1 1 = 1'? –

+0

但是为什么学习常数对于tanh是好的,但对逻辑函数来说还不够好?我认为“1”输出为真,“0”为假。 – user1767774

+0

“结果”是什么意思?两个激活函数500次后的预测有多好? – alfa

回答

9

是的,你观察到的是真的。在使用反向传播训练神经网络时,我也有类似的观察结果。对于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):

activation funcs

  • 左侧是标准的逻辑功能:1/(1+e^(-x))
  • 右侧是tanh函数,也称为双曲正切。

很容易看出tanh是关于原点的反对称。

根据efficient Backprop

对称S形作为tanh这样经常收敛比标准逻辑函数更快。

同样来自维基Logistic regression

从业告诫说S形函数与反向传播训练网络时其是反对称关于原点(例如,双曲正切)导致更快收敛。

请参阅efficient Backprop了解更多详情,在此解释直觉。

查看elliott替代tanh更容易计算。它在下面显示为黑色曲线(蓝色是原始的tanh)。

enter image description here

enter image description here

两件事情应该从上面的图表中脱颖而出。首先,TANH通常比Elliott需要更少的迭代训练。因此,对于编码器来说,Elliott的训练精度并不高。但是,请注意培训时间。 Elliott在TANH的一半时间内完成了它的整个任务,即使需要进行额外的迭代。这是一个巨大的改进,字面意思是在这种情况下,Elliott会将你的训练时间缩短一半,并提供相同的最终训练错误。虽然它需要更多的训练迭代才能达到目标,但每次迭代的速度要快得多,但仍然会导致训练时间缩短一半。