可以训练深度神经网络将整数 N1 分类为可被另一个整数 N2 整除吗?

人工智能 神经网络 机器学习 分类
2021-10-29 01:32:44

因此,我一直在为深度神经网络(任意数量的隐藏层,每层中的任意数量的节点)开发自己的小型动态架构,并让它有效地解决 XOR 问题。我继续尝试看看我是否可以训练我的网络如何将一个数字分类为可被另一个数字整除,同时尝试不同的网络结构并注意到一些奇怪的事情。我知道尝试训练神经网络是一件很奇怪的事情,但我只是认为这可能很容易,因为我可以简单地以编程方式生成训练数据集和测试数据集。

从我的测试来看,我的网络似乎只擅长识别一个数字是否可以被一个 2 的幂的数字整除。如果你测试一个 2 的幂的整除性,它会收敛到一个非常很好的解决方案很快。并且它很好地概括了训练集之外的数字——我想这是有道理的,因为我将数字以二进制表示形式输入到网络中,所以网络必须学习的是数字 n 只能被整除如果二进制输入向量中的最后 m 个数字为 0,则增加 2^m(即,如果输入层上的最后 m 个神经元不触发,则触发输出神经元,否则不触发)。然而,当通过非二的幂检查可分性时,似乎没有那么多的“位置”(也许就是这个词,也许不是)输入位与数字是否可整之间的关系。不过我想,如果我在这个问题上投入更多的神经元和层,它可能能够解决用其他数字对整除性进行分类的问题——但事实并非如此。当除以不是 2 的幂的数字时,网络似乎收敛于成本函数(我使用均方误差)上不太理想的局部最小值。我也尝试了不同的学习率徒劳无功。

你知道什么会导致这样的事情或如何去尝试解决它吗?还是普通的深度神经网络可能不擅长解决这些类型的问题?

注意:我还应该补充一点,我已经尝试对不同的层使用不同的激活函数(比如对你的第一个隐藏层进行leaky-relu 激活,然后对你的输出层进行 sigmoid 激活等),这似乎也没有不同

这是我的代码,如果您愿意看的话:https ://github.com/bigstronkcodeman/Deep-Neural-Network/blob/master/Neural.py

(注意:这一切都是我为了学习而从头开始写的,所以有些部分(即反向传播)不是很漂亮——我对整个神经网络的东西真的很陌生)

2个回答

最近有一项研究正在研究神经网络在算术方面的有效性。有趣的是,具有各种激活函数的前馈神经网络 (MLP) 以及 LSTM(图灵完备的 RNN)无法对简单的算术运算(例如加法/乘法)进行建模,他们设计了一个新的逻辑单元来解决所有简单的算术问题。

请参阅:神经算术逻辑单元

最近,深度学习可以解决符号数学:符号数学的深度学习

当您以 2(二进制)表示一个数字时,您已经将该数字除以 2 多次。如果最后没有余数,这个数字显然可以被 2 整除。这暗示你的 AI 可以通过除法来测试可除性。嗯——那里收获不多!

不幸的是,这个问题不适合通过 AI 解决。这就是为什么大数分解是硬加密方案的良好基础。我建议找到一种不同类型的问题来测试你的人工智能。