use*_*774 4 machine-learning perceptron backpropagation neural-network
我试图用这个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]
Run Code Online (Sandbox Code Playgroud)
使用tanh激活功能时,这是800集之后的结果.tanh收敛速度始终快于logistic.
[0, 0] -> [-0.0862215901296476]
[0, 1] -> [0.9777578145233919]
[1, 0] -> [0.9777632805205176]
[1, 1] -> [0.12637838259658932]
Run Code Online (Sandbox Code Playgroud)
这两个函数的形状如下所示(信用:高效的backprop):

1/(1+e^(-x)).tanh函数,也称为双曲正切.很容易看出它tanh与原点是反对称的.
根据 有效的Backprop,
对称S形如
tanh经常收敛比标准的逻辑函数更快.
同样来自wiki Logistic回归:
从业者警告说,在训练具有反向传播的网络时,关于原点反对称的 S形函数(例如双曲正切)会导致更快的收敛.
有关详细解释直觉的更多详细信息,请参阅高效的Backprop.
有关更容易计算的替代方法,请参阅elliotttanh.它在下面显示为黑色曲线(蓝色曲线是原始曲线tanh).


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