我试图用myslef在Java中实现一个神经网络作为XOR门,它有点工作。当我尝试训练它时,大约约20%的时间,权重收敛以产生足够好的输出(RMS <0.05),但是其他80%的时间它没有。
神经网络(可以看到here)由2个输入(+ 1个偏置),2个隐藏(+ 1个偏置)和1个输出单元组成。我使用的激活函数是sigmoid函数
e / ( 1 + e^-x)
将输入值映射到0和1之间。使用的学习算法是使用RMS作为成本函数的随机梯度下降。偏置神经元的输出值恒定为1.我尝试将学习率改为0.1到0.01之间,似乎无法解决问题。
我让网络跟踪网络的权重和有效值,并在图表上绘制。权重基本上有三种不同的行为。我只能发布三个中的一个。
two (or more) value diverges in different directions
另外两个中的一个只是权重收敛到一个好的值,第二个是一个权重的随机摆动。
我不知道这是否只是发生的事情,或者是否有某种方法可以修复它,所以请告诉我你是否知道任何事情。