介绍
步骤1
我编写了一个标准的反向传播神经网络,为了对其进行测试,我决定将其映射为XOR。
这是一个2-2-1网络(具有tanh激活功能)
X1 M1
O1
X2 M2
B1 B2
为了进行测试,我手动将顶部中层神经元(M1)设置为AND门,将下层神经元(M2)设置为OR门(如果为true,则输出1;如果为false,则输出-1)。
现在,我还手动将连接M1-O1设置为-.5,将M2-O1设置为1,将B2设置为-.75
因此,如果M1 = 1且M2 = 1,则总和为(-0.5 +1 -0.75 = -.25)tanh(0.25)= -0.24
如果M1 = -1和M2 = 1,则总和为((-0.5)*(-1)+1 -0.75 = .75)tanh(0.75)= 0.63
如果M1 = -1和M2 = -1,则总和为((-0.5)*(-1)-1 -0.75 = -1.25)tanh(1.25)= -0.8
对于“第一次迭代”来说,这是一个相对较好的结果。
第二步
然后,我对这些权重进行了一些修改,然后使用误差传播算法(基于梯度下降)对它们进行训练。在此阶段,我保持输入神经元和中间神经元之间的权重不变,只是修改中间(和偏差)与输出之间的权重。
为了进行测试,我将权重设置为和.5 .4 .3(分别针对M1,M2和偏差)
但是,在这里,我开始遇到问题。
我的问题
我将学习率设置为0.2,然后让程序遍历训练数据(ABA ^ B)进行10000次以上的迭代。
大多数时候,权重收敛到一个好的结果。但是,有时这些权重会收敛到(例如)1.5、5.7和.9,这会导致输入{1,1}的+1输出(偶数)(当结果应为-1时)。
相对简单的ANN是否有可能根本无法收敛的解决方案,还是我的实现存在错误?