我对人工神经网络还是很陌生。虽然我玩过 TensorFlow,但我现在正试图弄清基础知识。由于我偶然发现了一门课程,该课程解释了如何在 Unity 中使用 C# 实现具有反向传播的 ANN,我就是这样做的。
在使用一个包含 2 个神经元的隐藏层来测试运行 ANN 时,我注意到它并不总是能得到正确的 XOR。无论它运行多少个 epoch 或如何设置学习率。对于某些设置,它比其他设置更频繁地发生。
通常我会得到这样的东西:
+---+---+------+
| 0 | 0 | 0.01 |
+---+---+------+
| 0 | 1 | 0.99 |
+---+---+------+
| 1 | 0 | 0.99 |
+---+---+------+
| 1 | 1 | 0.01 |
+---+---+------+
但在其他情况下,它看起来更像这样:
+---+---+------+ +---+---+------+ +---+---+------+
| 0 | 0 | 0.33 | | 0 | 0 | 0.01 | | 0 | 0 | 0.33 |
+---+---+------+ +---+---+------+ +---+---+------+
| 0 | 1 | 0.99 | | 0 | 1 | 0.99 | | 0 | 1 | 0.33 |
+---+---+------+ or +---+---+------+ or +---+---+------+
| 1 | 0 | 0.66 | | 1 | 0 | 0.50 | | 1 | 0 | 0.99 |
+---+---+------+ +---+---+------+ +---+---+------+
| 1 | 1 | 0.01 | | 1 | 1 | 0.50 | | 1 | 1 | 0.33 |
+---+---+------+ +---+---+------+ +---+---+------+
我注意到在每种情况下,输出的总和都是~2。它也不会在大多数时候发生,但仍然经常发生。根据我使用的设置,它每运行两次或三次,或者仅在运行 10 或 20 次后发生。对我来说,这似乎更像是神经网络随机性的数学怪癖。但是我的数学还不够好,无法自己解决这个问题。
问题是:假设实现尽可能简单,没有高级概念,这样的事情是否可能发生,或者它绝对是实现中的错误?如果这不是实现中的错误,那么这里发生了什么?是因为 XOR 的对称性吗?据我所知,这就是单个神经元无法处理它的原因。
我知道我也可以发布源代码,但我已经两次和三次检查了所有内容,因为我在偏差计算中出现了错误。那时,价值观一直完全关闭。现在我只是想知道这种事情是否真的可以通过正确实施的神经网络发生。