我试图用这个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]
这两个函数的形状如下所示(来源:有效的反向传播):
1/(1+e^(-x))
。tanh
函数,也称为双曲正切。很容易看出它tanh
关于原点反对称。
根据 有效的 Backprop,
对称 sigmoid等
tanh
通常比标准逻辑函数收敛得更快。
也来自维基逻辑回归:
从业者警告说,当使用反向传播训练网络时,关于原点反对称的sigmoid 函数(例如双曲正切)会导致更快的收敛。
有关解释此处直觉的更多详细信息,请参阅高效的反向传播。
有关更简单计算的替代方法,请参见elliott 。tanh
它在下面显示为黑色曲线(蓝色曲线是原始曲线tanh
)。
有两件事应该从上面的图表中脱颖而出。首先,与 Elliott 相比,TANH 通常需要更少的迭代来训练。因此,对于 Encoder,Elliott 的训练精度不如 Encoder 好。但是,请注意培训时间。Elliott 完成了它的整个任务,即使它必须做额外的迭代,用 TANH 的一半时间。这是一个巨大的改进,字面意思是在这种情况下,Elliott 会将您的训练时间缩短一半,并提供相同的最终训练错误。虽然确实需要更多的训练迭代才能到达那里,但每次迭代的速度要快得多,它仍然会导致训练时间减半。