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