可以想象教一台机器如何按照定义的规范进行编程吗?[关闭]


12

我的一个没有编程知识的朋友问我这个问题,我发现它很有趣。

我认为这是不可能的,因为这将需要真正先进的人工智能,该人工智能能够分析问题的文本,考虑解决方案并对其进行编程。对我而言,仅仅考虑一台能够编写简单计算器的机器就显得非常先进。

但是也许我错了,我想知道您对此有何看法,是否知道有关该主题的任何文章/研究,是否已经存在,或者是否有可能选择规格并获取机器可以对此“规范”进行自我编程?


4
定义编程。我可以构建一个可以制作其他程序的程序。但是,它真的可以学习吗?
Pieter B

是的,问题不在于代码生成,而在于我们作为开发人员所做的真实编程。
florian 2014年

这取决于程序是什么。与具有功能性和纯粹基于数学的东西相比,具有很多过程业务逻辑的程序要困难得多(可行性要差得多)。(不管怎么说,这是一种直觉,但是不幸的是,我没有任何办法支持它。)
Lunchmeat317 2014年

@florian:我们自己是机器学习了编程的机器(假设外星人/神创造了我们:-))。当然,我们还没有获得对DNA序列进行编程的功能,因此,如果您创建了一台必须学习最终编程方法的机器,则必须对其进行编程以“进化”并最终学习其本身是如何编程的。
2014年

2
@maple_shaft:通过使该问题与现有答案保持一致,我使该问题更加客观,并且想知道是否可以以当前形式重新打开它。
汤姆(Tom Au)

Answers:


15

乔尔实际上在几年前回答了这个问题。“教机器如何自行编程”的实际含义是“教机器如何获取规格并创建与该规格相对应的程序”。考虑到这一点:

这里的问题非常根本。为了机械地证明程序符合某些规范,规范本身需要非常详细。实际上,规范必须定义有关程序的所有内容,否则,任何事情都无法自动机械地得到证明。现在,如果规范确实定义了有关程序运行方式的所有内容,那么瞧瞧,它包含了生成程序所需的所有信息!现在,某些极客走到了一个非常黑暗的地方,他们开始考虑将规范自动编译到程序中,他们开始认为他们只是发明了一种无需编程即可对计算机进行编程的方法。

现在,这相当于永动机的软件工程。这是crackpots不断尝试做的事情之一,无论您告诉他们多少它永远无法工作。如果规范准确地定义了程序将执行的操作,并且具有足够的详细信息可以用来生成程序本身,那么这就引出了一个问题:您如何编写规范?这样一个完整的规范与底层计算机程序一样难以编写,因为规范编写者必须回答与程序员一样多的细节。要使用信息论中的术语:规范需要与计算机程序本身一样多的香农熵。熵的每一位都是规范编写者或程序员做出的决定。

因此,最重要的是,如果真的有一种机械方法可以证明程序的正确性,那么您所能证明的就是该程序是否与某些必须包含相同熵的程序相同。作为第一个程序,否则某些行为将是不确定的,因此未经证实。因此,现在编写规范与编写程序一样困难,并且您所做的一切只是将一个问题从这里移到了那里,并且什么也没做。

解决此问题的唯一方法是生产一台具有足够直觉的实际智能型计算机,以在生成软件时始终自动执行您和我所做的所有空白操作……在这种情况下,您最终会得到一台能够像人类开发人员一样进行自我编程的计算机。;)


7
与插入插入,快速分类或存储桶分类相比,我可以更轻松地为分类算法编写完整的规范。但是您声称将第一个转换为第二个很容易。
raptortech97 2014年

乔尔...够了!;-)我知道要做到这一点,我们需要使用给定语言的规范。但是我并不完全相信该规范应该非常详细。作为开发人员,我们能够在没有非常详细的规范的情况下开发程序。我们是否不能开发能够对程序设计做出一些“随机”决定的人工智能?
florian 2014年

6
@florian那么,您希望程序执行人类程序员执行的规范解释任务吗?然后,它变成了“强大的AI”这个古老的问题,许多聪明的人已经研究了数十年,却没有任何进展。关于人工智能是否在形而上学上是可能的,在不久的将来实际上是不可能的,这在哲学上引起了激烈的争论,而根据我的经验,只有蛇油销售人员会在不久的将来预测到强大的人工智能。

我真的不想要我在问自己(正如我的朋友问我)是否可行。我完全理解AI并不真正存在,而只是归结为一些“随机”的编程选择。
florian 2014年

2
@ raptortech97:不,你不能。在这个问题的意义上不是“完整的”。为了使您的规范如此完整以至于能够被机械地转换为可执行程序,它本质上必须以编程语言编写。否则,您的规范将具有未定义的行为,或者您只是在MSWord文档中编写代码。
whatsisname 2014年

4

当然,我们 一切 时候(对于问题的子集极其有限)。想象一下再走一两步,然后将类似Siri的东西绑定到这些代码生成器的输入中(或类似Wolfram Alpha的东西),这反过来编写代码并解决您的问题,这是微不足道的。我希望某个地方已经存在可以做最基本的事情。

为企业编写复杂软件的问题不是编写程序来编写代码,而是编写程序来满足需求。


感谢您的链接。即使Yacc和Xamarin纯粹是确定性代码生成器。他们不会从头开始创建东西。
florian 2014年

@florian-没有东西从头开始创建东西。总会有一些投入,他们比大多数人更挑剔。
Telastyn 2014年

1
@Telastyn:将解析器生成器的输入/输出与人的大脑的输入/输出进行比较,因为“更挑剔”充其量是不恰当的。
whatsisname 2014年

2

我认为@Mason Wheeler的答案掌握了关键思想。它是这样的:

井字游戏的Shannon熵非常小。因此,我们将井字游戏称为“已解决”或“确定性”游戏。一旦你读完小学,就没什么意思了。跳棋的熵较高,如果您考虑可以玩的所有可能游戏的熵。但是跳棋也是一种“解决”或“确定性”的游戏。如果您先走,则只能赢或平。国际象棋的熵要高得多,但自2006年以来,没有人能击败最好的计算机玩家。因此,从某种意义上说,计算机已经以人类无法掌握的方式掌握了国际象棋。蓝色巨人分析了维基百科,然后对人类玩家进行了危险游戏,并击败了他们。

下一步是什么?小说或莎士比亚的十四行诗的熵是什么?

同样,在编程领域,可能出现的是越来越多的能力。Prolog解决了一系列计算机问题,您在其中设置了问题,然后计算机解决了问题的答案。某人可能会发现一类计算机可以满足的简单编程问题,等等。然后有人将以此为基础在某些问题空间内生成“按需定制”。顺其自然。

我认为问题就变成了,人工智能要花多长时间才能掌握一定量的熵……以及需要多少计算资源?我认为计算机无法掌握人类最好的大脑所掌握的熵是不可想象的 -大脑没有任何魔力-但问题是,您需要多少个核,到达那里需要几个世纪?

但是...计算机能完成我的工作吗?不可思议!


我认为可以公平地说,《危险》是一个特例:归结为回顾和关联事实。即使是最好的专家,也会有他们不知道或在压力下无法回忆的甚至是公众知识的掘金。另一方面,对于能够分析百科全书的计算机(例如Wikipedia,大英百科全书或任何其他),该百科全书中没有任何事实比其他任何(或更少)具有异国情调。
2014年

1

这很难回答,因为就像人工智能一样,一旦我们完成了它,那将是因为我们将编写一个执行该程序的程序。评论家会说:“嗯,这台机器本身并不是真正的编程!它只是完全按照您给出的程序进行!”

嗯,是。无论我们用计算机完成什么工作,我们都将通过给它一些程序来执行它。如果那是反对的话,那么我们将无能为力。然而,在某些时候,人们认为象棋计算机显然是智能的。现在他们可以了,我们确切地知道怎么做,而且我们认为那不是明智的。潜水艇仍然不会游泳。

所以-考虑几个例子。

几十年来,我们有了解析器生成器。您给他们提供一种语言的描述,对其进行处理,结果是该语言的解析器的代码。我们确切地知道它是如何完成的,但是那不是计算机编程本身吗?

其次-告诉您犯了错误的编辑器(语法错误,不存在的变量等)。它本身不编程任何东西,但是可以告诉您您做错了什么。它只在表面上。

您只需单击并拖动UI控件即可使用的语言以及将使它们真正起作用的代码将自动生成。

JIT编译器。该软件可以识别当前正在运行的软件中的热点,并通过高度优化的编译代码代替其中的一些热点,从而在运行时有效地对其自身进行优化。我认为这是一个看起来像是机器编程本身的例子,直到您确切地知道它是如何发生的,然后事实证明,它只是像往常一样按照程序员的指示去做。

一般游戏。这是一个有趣的研究领域,研究人员编写的程序可以读取游戏规则的描述,然后程序可以相互对抗。因此,这些程序代替了井字游戏程序或国际象棋程序,而是读取井字游戏或国际象棋的规则或当场制作的一些新游戏的程序,然后可以玩它们。该程序本身并不是在编程,但是在没有对国际象棋规则进行硬编码的情况下,它确实可以下国际象棋。曾经有一段时间,显然可以认为这是计算机自学的东西。

我们朝着总体方向采取了许多小步骤。

但是我想不出任何可以根据早期运行结果重写自己的程序,或者可以在自己的代码中识别过时或效率低下的例程的程序。我认为有一天我们会拥有它,并且我们将认为它没有什么特别的,因为它只是最新编译器的一部分功能...


0

当前和现在都不是可以预见的,因为您需要人脑的所有复杂功能来创建程序。即便如此,也需要对这些大脑进行严格的训练才能正确地做到这一点,尽管如此,尽管可能有人争辩说,只要有足够的时间,您就可以训练任何人进行编程,但并不是所有人都能够完成任务。

我从您说出您不是在谈论简单的模拟任务这一问题的方式中得出的。

您要求提供文章,而《科学博客》上有关开发智能的文章则以多种方式回答了该问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.