所以我正在编写自己的神经网络库,使用反向传播作为我的训练算法。一切似乎都很好,每次迭代时错误越来越少,但是当我打印最后一层的输出时,它绝对不是最佳的!让我进一步解释一下...
我的训练数据非常简单
Input: {0,0,1},{0,1,1},{1,0,1},{1,1,1},{1,0,0},{1,1,0}
Expected output: {0},{1},{0},{1},{0},{1}
我尝试了很多变体,甚至是一些逻辑门(AND、OR、XOR 等)!我尝试增加每一层的神经元数量或增加层数。我尝试了 ReLu 作为激活函数和常见的 sigmoid 函数,甚至一些组合!我玩过学习率值,但我仍然得到相同的结果。在上面给出的训练集示例中,我的网络使用 ReLu 的输出是
0.001585
0.999990
0.000713
0.000109
0.000000
0.000000
错误是
Error: 2.02248e-06
使用 sigmoid 函数的输出是
0.098032
0.840373
0.046706
0.036155
0.036184
0.059911
和错误
Error: 0.0289854
如您所见,第四个和第六个元素的预期输出应该是接近 1 的值,就像第二个元素一样。我面临着不同数据集的类似问题。
那么我如何反向传播网络呢?我正在计算这样的输出错误
error = 2.0 * (expected_output - actual_output)
我正在更新这样的权重
w += learning_rate * transposed_layer_output * layer_delta
我错过了什么吗?
