2016-09-22 94 views
5

我正在玩一个我自己实现的神经网络:它是一个简单的前向网络,与基本设计相比,它使用RPROP作为学习算法的唯一“加号”。神经网络和异或函数

当我对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函数是后向传播文献中的“经典”,我想知道这里发生了什么,尤其是考虑到我的网络似乎学得更复杂(但也许更少的非线性)任务就好了。

我疯狂的猜测是,这是错误的偏见。

任何提示?注意1:上面的网络布局是2 | 3 | 1,但是当我使用更多的隐藏单元时,变化不大,某些学习尝试仍然出错。

注2:我把落实到一个要点:https://gist.github.com/antirez/e45939b918868b91ec6fea1d1938db0d

+0

你使用了什么功能?你可以分享吗? – ACV

+0

我只是在这里完整的实现:https://gist.github.com/antirez/e45939b918868b91ec6fea1d1938db0d这是非常基本的东西。 编辑:只是添加头文件以及。 – antirez

+0

实际上测试更多我发现它不仅仅是异或(1,1)失败,而且其他人可能会输出0.5。 – antirez

回答

2

的问题是由于我在执行中的错误:在NN的偏置单元之前没有正确计算的输出单元。修复代码后,XOR函数总是正确计算。