我正在玩一个我自己实现的神经网络:它是一个简单的前向网络,使用RPROP作为学习算法,作为唯一的" plus"与基本设计相比。
当我针对MNIST进行测试时或者当我尝试图像压缩时,网络得分得体,但是当我尝试模拟像XOR函数一样简单的东西时,有时在学习过程中它会陷入局部最小值,并输出以下内容真相表:
0 XOR 0 = 1.4598413968251171e-171
1 XOR 0 = 0.9999999999999998
0 XOR 1 = 0.9999999999999998
1 XOR 1 = 0.5
训练后的结果通常是正确的,但有时1 XOR 1输出0.5而不是1。它并不总是在XOR(1,1)中发生,但也与其他输入一起发生。作为XOR函数a" classic"在反向传播的文献中,我想知道这里发生了什么,特别是考虑到我的网络看起来更复杂(但可能不那么非线性)的任务就好了。
我的猜测是,这种偏见是错误的。
任何提示?
注1:上面的网络布局是2 | 3 | 1,但是当我使用更多的隐藏单元时没有太大变化,某些学习尝试仍然出错。
注2:我将实施放入要点:https://gist.github.com/antirez/e45939b918868b91ec6fea1d1938db0d
答案 0 :(得分:2)
问题是由于我的实现中存在错误:NN的偏置单元在输出单元未正确计算之前。修复代码后,XOR函数总是正确计算。