我问这个问题是因为我知道这里有很多博览群书的CS类型,他们可以给出明确的答案。
我想知道这样的人工智能是否存在(或正在研究/开发),它通过自己生成和编译代码来编写程序,然后通过从以前的迭代中学习来进步。我说的是努力让我们,程序员,过时。我正在想象一些东西,它可以通过反复试验来学习编程语言中什么是有效的,什么是无效的。
我知道这听起来像是空中楼阁,所以我想知道到底做了些什么。
当然,即使是人类程序员也需要输入和规范,因此这样的实验必须仔细定义参数。例如,如果AI要探索不同的计时功能,则必须明确定义这一方面。
但是有了一个复杂的学习AI,我很好奇它会产生什么。
我知道有很多人类的品质是计算机无法复制的,比如我们的判断力、品味和偏见。但是我的想象力喜欢这样的想法:一个程序,经过一天的思考,吐出一个网站,让我看到它想出了什么,甚至我仍然经常认为它是垃圾;但也许一天一次,我可能会给它反馈,帮助它学习。
这种想法的另一种方式是,如果能给出一个像"menued website“或"image tools”这样的高级描述,那就更好了,它会生成足够深度的代码,作为代码完成模块,对我来说很有用,然后在细节中编码。但我认为这可以被设想为一种非智能的静态分层代码完成方案。
怎么样?
发布于 2009-04-02 18:03:45
这样的工具是存在的。它们是一门名为Genetic Programming的学科的主题。如何评估它们的成功取决于它们的应用范围。
他们已经非常成功(效率比人类高出几个数量级),为工业过程管理、自动化医疗诊断或集成电路设计设计了最佳程序。这些过程受到很好的约束,具有明确和不可变的成功度量标准,以及大量的“宇宙知识”,即关于什么是有效的、有效的程序以及什么不是的大量规则集。
在试图构建需要用户交互的主流程序时,它们完全没有用,因为系统学习所需的主要项目是显式的"fitness function",即对当前解决方案的质量进行评估。
在处理“程序学习”时可以看到的另一个领域是Inductive Logic Programming,尽管它更多地用于提供自动演示或语言/分类学习。
发布于 2009-10-16 18:17:16
免责声明:我既不是以英语为母语的人,也不是该领域的专家,我是一名 -预计以下内容中存在不准确和/或错误。因此,本着stackoverflow的精神,不要害怕纠正和改进我的散文和/或我的内容。另请注意,这是,而不是,这是对automatic programming技术的完整调查( Model-Driven Architectures (MDAs)的code generation (CG)至少值得一提)。
我想对Varkhan的回答添加更多内容(这基本上是正确的)。
Automatic Programming的Genetic Programming (GP)方法和它的fitness functions合并了两个不同的问题(“自编译”在概念上是不需要动脑筋的):
,如果需要,还可以包括合成器本身
w.r.t.self-improvement/adaptation指的是Jürgen Schmidhuber的Goedel machines:自我参照的通用问题解决者进行可证明的最优自我改进。(附注:有趣的是他在artificial curiosity上的工作。)与此讨论相关的还有Autonomic Systems。
w.r.t.,我认为可以分为三个主要分支: (概率论-类似上面提到的GP),归纳和演绎。
本质上是,因为它产生具有启发式的可能程序的空间,例如交叉、随机突变、基因复制、基因删除等。(而不是用fitness function测试程序,让适者生存和繁殖)。
归纳程序综合通常被称为Inductive Programming (IP),而Inductive Logic Programming (ILP)是其中的一个子领域。也就是说,一般来说,该技术不限于logic program合成或用逻辑编程语言编写的合成器(也不限于"..automatic演示或语言/分类学习“)。
生成通常是deterministic (但也有例外):从不完整的IP规范(如示例输入/输出对)开始,并使用它来约束满足该规范的可能程序的搜索空间,然后对其进行测试(生成和测试方法),或者直接合成检测给定示例中的递归的程序,然后对其进行泛化(数据驱动或分析方法)。整个过程本质上是 induction/inference的--也就是说,考虑将什么包括到不完整的规范中类似于随机抽样。
and §方法可以相当快,所以这两种方法都很有希望(即使到目前为止公开演示的合成程序很少),但生成和测试(如GP)是embarrassingly parallel的,然后可以预期显著的改进(扩展到现实的程序大小)。但请注意,Incremental Inductive Programming (IIP)§,这本质上是连续的,已经证明比非增量方法更有效数量级。
§这些链接直接指向PDF文件:对不起,我找不到摘要。
Programming by Demonstration (PbD)和Programming by Example (PbE)是已知的可实际利用归纳程序综合的end-user development技术。
从(假定的) complete (正式)规范(逻辑条件)开始。其中一种技术利用automated theorem provers:为了合成程序,它构造了一个满足规范的对象存在的证明;因此,通过Curry-Howard-de Bruijn isomorphism (证明与程序的对应关系和公式与类型的对应关系),它从证明中提取程序。其他变体包括使用constraint solving和deductive composition of subroutine libraries。
在我看来,实际上中的归纳和演绎综合是从两个略有不同的角度来攻击同一个问题,因为什么构成了一个完整的规范是有争议的(此外,今天的完整规范明天可能会变得不完整--世界不是静态的)。
当(如果)这些技术(自我改进/适应和程序合成)成熟时,它们承诺提高declarative programming提供的自动化程度(即这样的设置被认为是“编程”是sometimes debated):我们将更多地专注于Domain Engineering和Requirements Analysis and Engineering,而不是软件手动设计和开发、手动调试、手动系统性能调整等(与目前的手册相比,可能会有更少的accidental complexity,而不是自我改进/适应技术)。这也将提升agility的水平,目前的技术还没有证明这一点。
https://stackoverflow.com/questions/710843
复制相似问题