2

我正在学习(从今天开始)神经网络,并且可以完成一个 2x2x1 网络(前向数据馈送和后向错误传播),该网络可以学习一组输入的 AND 操作。它还使用随机参数避开任何局部最小值。我的第一个来源是: http: //www.codeproject.com/Articles/14342/Designing-And-Implementing-A-Neural-Network-Librar

问题是:它使用输入 (0,0) 学习 0 和 0,但是当我给出 (0,1) 时,它忘记了 0 和 0,然后学习 0 和 1。这是一个普通的新手错误吗?

我尝试了什么:

loop for 10000 times
learn 0 and 0
end loop

loop for 10000 times
learn 0 and 1 (forgets 0 and 0)
end loop

loop for 10000 times
learn 1 and 0 (forgets 0 and 1)
end loop

loop for 10000 times
learn 1 and 1 (forgets 1 and 0)
end loop 

only one set is learned 

fail

试验二:

loop for 10000 times
learn 0 and 0
learn 0 and 1
learn 1 and 0
learn 1 and 1
end loop

gives same result for all input combinations.

fail.

每个神经元的激活函数:双曲正切

2x2 结构:全对

2x1 结构:全对

随机学习率:是的,小到足以远离爆炸性迭代(每次迭代)

每个神经元的随机偏差:是的,在 -0.5 和 +0.5 之间(刚开始)

随机权重:是的,介于 -0.5 和 +0.5 之间(刚开始)

编辑:对所有隐藏层和输出层对进行偏差和权重更新。

编辑:所有神经元(隐藏+输出)使用相同的激活函数。

4

1 回答 1

3

如果没有特定的代码,很难确定,但我认为问题在于你一次只给它一个案例来学习。您应该给它一个包含不同学习示例的矩阵,并带有预期的结果向量。然后,当您更新权重和偏差时,您会找到使所有案例的网络输出与所有案例的预期输出之间的误差最小化的值。

对于AND门,您的输入将是(在 MATLAB 代码中,不确定您使用的是什么语言,但该语法很容易理解):

input = [0, 0;
         0, 1;
         1, 0;
         1, 1];

您的预期输出将是:

output = [0;
          0;
          0;
          1];

我认为您现在所做的基本上是找到使网络输出与仅一种输入情况的预期输出之间的误差最小化的权重和偏差,然后重新训练这些权重和偏差以最小化第二种情况的误差,然后是第三个,然后是第四个。如果你把它们放在这样的数组中,它应该最小化所有情况下的整体错误。这只是我最好的猜测,虽然没有任何代码可以继续。

于 2013-08-29T21:33:21.453 回答