共计 2686 个字符,预计需要花费 7 分钟才能阅读完成。

新智元报道

让人工智能自动进行编程,一直以来都是计算机科学领域的理想追求。然而,迄今为止,在这一领域的成就仍较为有限,例如,让 AI 自动补充代码或执行简单的加法运算等。今天,我们将介绍一项名为“AI Programmer”的新研究成果,它被认为是首个能够完全自动生成完整软件程序的机器学习系统。
研究人员指出,他们通过这一系统验证了一个长期以来的理论,即功能完备的程序确实能够实现自动生成。在具体应用中,AI Programmer 利用机器学习中的遗传算法来模拟复杂指令。尽管目前 AI Programmer 生成的程序复杂性与新手程序员的水平相当,研究团队相信,未来该系统能够超越传统编程的界限,不再受制于人类的时间和智力。
AI 生成的程序正是在复杂度与计算资源之间找到最佳平衡点。换句话说,其潜力几乎是无限的。
研究团队还强调,我们需要重新审视并设计新的编程语言,尤其是应针对机器进行设计,因为现有的编程语言主要是为人类开发的,显然不适合基于机器学习的编程方式。“在展望机器学习驱动的程序生成未来时,我们必须抛弃传统程序语言的构建方式,重新思考。”
他们进一步指出,只有这样,我们才能开始设想一个由人工智能驱动、以人类的创造力和设计为导向的全新计算机软件开发未来。

从 AI Programmer 的软件架构可以看出,系统中人类参与的部分极少,用户只需在起始阶段输入指令,最后接收完成特定任务的函数,其余部分均由机器自动完成。
AI Programmer:借助遗传算法实现程序的自动生成,理论上能完成各种类型的任务。
根据研究报告,研究人员选择了一种无类型编程语言,仅包含 8 种指令,以驱动 AI Programmer 生成软件。

AI Programmer 使用的编程语言具有图灵完备性,如表 1 所示。在理论上,若时间和内存不受限制,图灵完备的编程语言能够处理任何类型的编程任务。实际上,任何具备这种特性的编程语言都能够解决大量编程问题。因此,AI Programmer 生成的软件也能够完成所有任务。
在这个基础上,我们再来关注 AI Programmer 的核心——遗传算法。
使用遗传算法生成程序的第一步是构建基因组(genome)。基因组由一组基因组合而成,作为一个单独的单元。AI Programmer 的基因组以浮点数组的形式编码,其中每个独特指令的值范围固定在 0 和 1 之间,如表 1 所示的基因范围所示。
一旦基因组构建完成,AI Programmer 便会将其转换为相应的程序进行执行,并根据程序的输出赋予生成结果适应度。生成的程序越接近解决所提供的任务,其适应度就越高,进而更有可能进行下一轮的进化。在每一代,AI Programmer 通过随机选择、交叉和变异生成子程序,其中包含轻微的随机扰动,并且其基因组可能比父代更优,以解决目标任务。

图 3 展示了如何从浮点数组构建基因组的实例。每个值范围映射到特定编程语言中的指令。起初,这些值是随机生成的,导致生成的程序无法正常运行。然而,最终总会出现一两个能够成功执行的指令。一个程序的成功执行越多,它在后续进化中被使用的可能性就越大。

为了创造后代,父母会将其基因的一部分传递给子代,如图 4 所示。除了继承父母的编程指令外,每个子代可能还会遭遇突变,即对特定基因进行受控但随机的扰动。这会导致某些基因值发生变化,从而改变最终生成的编程指令,进而影响整个程序。

可执行程序根据其执行效果进行排名,如图 5 所示。其中,某些程序会被立即从基因组池中剔除,而成功的方案则会被选中以生成新的后代。
AI Programmer 的输出结果包括“Hello World”字符串的打印、字符串反转、加减乘法运算及输出斐波那契数列等。
AI Programmer 的设计基于 C#.NET 的模块化框架,涵盖了运行遗传算法的引擎、基因组编码器与解码器、模拟程序执行的沙箱解读器以及将代码转换为二进制可执行文件的编译器。尽管 AI Programmer 最初是用 C# 构建的,但需要指出的是,设计原则并不限于此。
研究人员表示,AI Programmer 的适应性测试框架具有扩展性,已经实现了开发,用户可以设计无数个定制化的软件,最终引导系统的遗传算法生成和演变软件程序。

如果目标程序旨在生成一个字符串,例如“Hello World”,测试分数可能是字符串中的字符数量。然而,由于 AI Programmer 是在字节级别生成代码,测试分数应该考虑输出字符的增量差异。
研究人员表示,他们能够利用 AI Programmer 生成多种软件程序。表 2 列出了所生成程序的清单。

起初,研究人员让 AI Programmer 生成一个非常简单的程序来输出“hi”。经过 5700 代后,测试成功,生成代码如图 9 所示。

经过 580,900 代后,AI Programmer 成功生成了“hello world”,如图 10 所示。

最终,经过 6,057,200 代,AI Programmer 成功生成了“I love all humans”,如图 11 所示。

AI Programmer 生成的字符串反转程序。生成代码如图 13 所示。

AI Programmer 在经过 92,400 代后成功生成了加法程序;在 177,900 代后生成了减法程序,如图 15 所示。
全新自动化软件生成系统“AI Programmer”的深度探讨

如图 16 所示,该程序能够通过两个初始输入值生成斐波那契数列。
论文题目:AI Programmer,基于遗传算法的自动软件程序创建

摘要
本文将介绍一款首创的机器学习(ML)系统,具备自动生成完整软件程序的能力,其所需的人类干预几乎可以忽略不计。这款系统被称为“AI Programmer”,其核心采用遗传算法(GA),并结合了严格的编程语言约束,大幅降低了 ML 搜索空间的计算成本。AI Programmer 的创新之处在于:(i)独特的系统架构,内嵌了用于提升效率和安全性的手工解释器,以及(ii)对遗传算法的优化,融入了指令基因的随机化绑定技术,以及特定于编程语言的基因组构建和消除方法。我们将详细探讨 AI Programmer 的系统架构,解析其工作原理,并通过主流 CPU 展示其软件生成的功能与性能实验数据。
论文链接:点击这里查看
欢迎点击原文了解更多职位信息,期待你的加入!


如果机器生成的程序也能优化,那人类程序员的角色会不会变得更像审计者?