【问题标题】:Artificial Neural Network Used to Compile Source Code用于编译源代码的人工神经网络
【发布时间】:2011-07-14 15:47:48
【问题描述】:

有一个人工神经网络,当对数百万个源代码示例和编译结果进行训练时,它可以将源代码编译成正确的输出,这是否合理?例如,一个在 Python 源代码和生成的 Python 字节码上训练的 ANN,当给定一个 Python 程序时,可以正确地将其编译为字节码。

【问题讨论】:

  • 理论上可以。这是你的问题吗?
  • 我知道这在理论上是可能的,但这是否合理?它需要的样本数量是否合理?
  • 我不是 NN 方面的专家,但考虑到当今的神经网络水平,我认为这在很大程度上是不合理的。你也许可以训练它来检测语法上有效的 Python 代码,但即使这样也很重要。
  • 怎么样更简单的语言或语言之间的翻译,即。 BF 和 OK。

标签: compiler-construction artificial-intelligence neural-network


【解决方案1】:

虽然这可能是一个非常有趣的认识论问题,但在我看来,从技术角度来看并不是很有趣:如果您考虑 AI 编程是如何发展的,您会发现第一种方法是面向处理纯 逻辑规则人类在思考时操作。例如,Simon、Shaw 和 Newell 在 1957 年 (!) 编写的 General Problem Solver 试图按照一般逻辑原则在非常高的抽象级别上运行。

驱动力是相信每个问题都可以形式化为一个逻辑问题,并通过使用具有相应推理规则的知识库来解决。显然,这不适用于模式识别或(视觉、听觉等)感知“微不足道”的东西。只有遇到此类问题后,Soft Computing(包括人工神经网络)的想法才得到宣传,并指出对于某些问题,形式化的方法并不合适

长话短说:对于将一种形式(!)语言编译成另一种语言的问题,形式(逻辑)方法是最合适的。换句话说:虽然它可能甚至可以用石头打开罐子,但我宁愿使用开罐器...;)

【讨论】:

    【解决方案2】:

    如果您允许任意长的程序,则不会。

    如果你的神经网络是有限的,那么它只能产生有限数量的编译程序。但是,如果我们允许任意长的 python 程序,那么我们就有无限数量的编译程序。因此,有限 NN 不可能对所有这些进行分类。

    即使使用有限长度的 python 程序,我认为这也不太可能起作用。 NN 是很好的分类任务,例如“这张照片里有人物吗?”。编译是一个程序问题。两个非常相似的 python 程序可以有非常不同的功能(你有没有弄错 Python 缩进?)。

    【讨论】:

    • 严格来说,没有编译器允许任意长的程序。这不是一个有意义的限制。
    • 有限编译器可以编译无数不同的程序。有限的NN不能。无论现实世界的编译器实际做什么,这都是正确的。
    • 有限编译器可以编译大量不同的程序。我会毫不犹豫地说有无限多。所有编译器对递归深度、函数或变量的数量、源文件大小等都有限制。这些限制非常大,但不是无限的。
    【解决方案3】:

    根据 Kolmogorov 的叠加定理,神经网络可以再现任何连续函数,而编译器可以看作是一个非常非常复杂的函数。但这根本不实用。

    【讨论】:

    • 这个编译器函数的维度是多少?您如何将 python 源代码映射到这些 n 值? (将源代码限制为 n 字节?)我不明白如何将编译视为 n 维连续函数...
    【解决方案4】:

    实际上,如果您一次输入一个有限大小的代码段,您可以用有限的 NN 编译任意长的程序。我认为有一种方法可以证明这一点:

    • 编译程序是一个可判定的问题(即它可以通过图灵机来解决)
    • 您可以从与非门构建任何逻辑门
    • 您可以使用逻辑门构建图灵完备机
    • NN 的神经元使用函数 f
      (其中 f(x) = 1 if x <= 0, f(x) = 0 if x > 0
      并且只有两个相同权重的输入作为传递函数,基本上是一个与非门

    所以你可以构建一个图灵完备的神经网络 => 有一个神经网络可以编译任何程序

    【讨论】:

      猜你喜欢
      • 2017-09-01
      • 2011-11-19
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2011-01-22
      • 2011-07-13
      • 2017-10-10
      相关资源
      最近更新 更多