【问题标题】:how to learn operation like "add" via machine learning如何通过机器学习学习“加法”之类的操作
【发布时间】:2018-12-03 06:28:06
【问题描述】:

有什么想法吗?

问题状态:

Giving futures:
0+1=1, 1+1=2, 1+2=3, 1+3=4, 1+4=5,
1+5=6, 1+6=7, 1+7=8, 1+8=9, 1+9=10
How to build a machine learning algorithm to learn "+" operation in decimal?

例如学习后123+321应该得到444; 12345678901234567890+12 应该得到 12345678901234567902

数据集的大小是无限的,这个问题很难解决;传统的神经网络方法擅长分类,但需要足够的训练集,不适合无限集。

虽然有很多方法可以尝试解决问题;但它不能在非常大的数字上得到好的结果。这意味着像 LSTM 这样的算法会记住操作数和结果之间的映射,但是它还没有学会如何进行加法。

另外,我的意思是在“神经网络”中使用不受限制的“机器学习”。

(请在回答之前阅读参考文献;纯 LSTM 和类似算法的功能不够强大,也不是预期的。)

参考:https://machinelearningmastery.com/learn-add-numbers-seq2seq-recurrent-neural-networks/

【问题讨论】:

    标签: machine-learning


    【解决方案1】:

    最简单的神经网络就可以了。架构:

    • 输入:等于您要添加的位数。在这种情况下2
    • 输出:带有bias=0weight=1 的单个神经元用于所有输入。
    • 激活函数:线性。

    一般:

    鉴于我们的架构,您的输出将归结为sum(input),这正是解决方案。您可以让系统学习它们,而不是固定偏差和权重,它会非常快 - 只需记住使用线性激活

    如果你想玩花哨,你可以使用 RNN。诀窍就是像计算机一样做到这一点:使用二进制表示。 RNN 应该能够学习如何进行程序。为什么要伤害自己呢?

    【讨论】:

    • 感谢您的回答。您的方法将添加操作转换为分类操作。换句话说,该算法实际上会读取 2 个数字的输入并将该对分类为输出。但是,如果数字集的大小是无限的,您的方法将失败。您无法训练具有无限集的分类器。
    • 这不是分类,而是回归——你可以自己看公式。也许这就是为什么你觉得“无限集”会失败。为什么输入是任意数字的 sum(input) 会失败?此外,要训练它,您不需要“无限集”,实际上少量的训练示例就可以了。该算法只需要学习两个权重和偏差,总共三个数字。为什么要使用“无限集”进行训练?严格来说,计算机不能容纳任意大的数字。
    • 实际上在我的参考文献中,它提供了一种训练模型进行加法的解决方案(将数字作为数字序列)。您的方法无论分类或回归都只能记住 ([a, b] => c),例如,给出 [23, 32] 然后得到 55。当数据集是无限的时,一个新数字可能是 [12345678901234567890, 12345678901234567891 ] 将使您的模型失败。并且计算机可以在字符串中保存任意大数。
    • 再一次,为什么它会因大量数字而失败?检查公式,对于给定的示例, sum(input) 将完全一样,你扔给它的任何整数集。你能提供一个它会失败的证据,而不仅仅是说出来吗?数学(给出的公式)说它会起作用。另外,“任意大”意味着我可以想到一个超出任何计算机内存的字符串。
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 2020-05-04
    • 2012-03-14
    • 2011-08-01
    • 1970-01-01
    • 2019-10-15
    • 2014-12-01
    • 2021-06-17
    相关资源
    最近更新 更多