因此,我一直在为深度神经网络(任意数量的隐藏层,每层中的任意数量的节点)开发自己的小型动态架构,并让它有效地解决 XOR 问题。我继续尝试看看我是否可以训练我的网络如何将一个数字分类为可被另一个数字整除,同时尝试不同的网络结构并注意到一些奇怪的事情。我知道尝试训练神经网络是一件很奇怪的事情,但我只是认为这可能很容易,因为我可以简单地以编程方式生成训练数据集和测试数据集。
从我的测试来看,我的网络似乎只擅长识别一个数字是否可以被一个 2 的幂的数字整除。如果你测试一个 2 的幂的整除性,它会收敛到一个非常很好的解决方案很快。并且它很好地概括了训练集之外的数字——我想这是有道理的,因为我将数字以二进制表示形式输入到网络中,所以网络必须学习的是数字 n 只能被整除如果二进制输入向量中的最后 m 个数字为 0,则增加 2^m(即,如果输入层上的最后 m 个神经元不触发,则触发输出神经元,否则不触发)。然而,当通过非二的幂检查可分性时,似乎没有那么多的“位置”(也许就是这个词,也许不是)输入位与数字是否可整之间的关系。不过我想,如果我在这个问题上投入更多的神经元和层,它可能能够解决用其他数字对整除性进行分类的问题——但事实并非如此。当除以不是 2 的幂的数字时,网络似乎收敛于成本函数(我使用均方误差)上不太理想的局部最小值。我也尝试了不同的学习率徒劳无功。
你知道什么会导致这样的事情或如何去尝试解决它吗?还是普通的深度神经网络可能不擅长解决这些类型的问题?
注意:我还应该补充一点,我已经尝试对不同的层使用不同的激活函数(比如对你的第一个隐藏层进行leaky-relu 激活,然后对你的输出层进行 sigmoid 激活等),这似乎也没有不同
这是我的代码,如果您愿意看的话:https ://github.com/bigstronkcodeman/Deep-Neural-Network/blob/master/Neural.py
(注意:这一切都是我为了学习而从头开始写的,所以有些部分(即反向传播)不是很漂亮——我对整个神经网络的东西真的很陌生)