新智元报道
让人工智能自动化编程一直以来都是计算机科学领域的美好愿景。然而,目前在这一领域的成就依旧相对有限,诸如让AI完成编程语言的自动补全或执行基础的加法运算等任务。今天,我们将介绍一项被誉为首个能够全自动生成完整软件程序的机器学习系统——“AI Programmer”。
研究团队指出,他们通过此系统证明了一个长期存在的理论,即功能完备的软件确实可以实现自动生成。具体来说,AI Programmer运用了机器学习中的遗传算法,模拟了复杂的指令集。尽管目前生成的程序复杂性与初学者所编写的代码相似,研究人员相信,这一系统未来能够超越传统的编程限制,不再受限于人类的思维和时间。
AI生成的程序在测试复杂性和计算资源之间寻找最佳平衡点,意味着其潜力是无限的。
研究者们进一步强调,我们需要重新审视并设计新的编程语言,这些语言应当更符合机器的运作逻辑。因为现行的编程语言主要是为人类设计的,难以适应基于机器学习的编程需求。“在展望机器学习驱动的程序生成未来时,必须摒弃传统的程序语言构建方式。”
他们表示,唯有如此,才能开始构想一个由人工智能系统主导,结合人类创造力与设计理念的新型软件开发时代。
AI Programmer的软件架构展现了一种高度的自动化。从图中可以看出,人类参与的环节极少,仅需在初始阶段输入指令,最终接收符合特定任务的功能,其他的步骤全由机器完成。
AI Programmer是一种基于遗传算法的自动程序生成系统,理论上可以执行各种类型的任务。
根据相关论文,研究人员选择了一种无类型的编程语言,仅包含八种指令来驱动AI Programmer进行软件生成。
AI Programmer所用的编程语言具备图灵完备性,理论上,在没有时间和内存限制的情况下,可以处理任何编程任务。任何具备该特性的编程语言都能解决大量编程问题,因此,AI Programmer生成的软件同样能够应对各种任务。
掌握了这一基础后,我们来深入了解AI Programmer的核心——遗传算法。
在利用遗传算法生成软件程序之前,首先需要构建一个基因组。基因组是一组作为单个单元组合的基因。AI Programmer的基因组通过浮点数组编码,每个指令的唯一值范围在0到1之间,如表1所示。
基因组创建完成后,AI Programmer便将其转化为相应的程序进行执行,并依据程序的输出为结果程序评估适应度。生成的程序越接近预期任务,适应度就越高,进而有更大可能性进行下一代的演化。在每一代中,AI Programmer通过随机选择、交叉和变异等方式生成子程序,其中包含轻微的随机扰动,这些子程序可能拥有比其父代更优的基因组,以便更好地解决目标任务。
图3展示了从浮点数组构建基因组的实例。每个值范围对应编程语言中的特定指令。初始值为随机生成,导致生成的程序可能无法正常运行,但其中总会存在一两个能够执行有效指令的程序。程序的执行成功率越高,就越有可能继续使用该代码,以实现更优秀的后代。
为了生成后代,父母程序会将其基因的一部分传递给下一代,如图4所示。除了传承父母的编程指令外,每个孩子还可能经历突变,即对特定基因施加控制但随机的扰动,从而导致基因值的变化,进而影响整个程序。
可执行程序根据其运行效果进行排名,如图5所示。特定程序会被立即排除出基因组池,而成功的方案则会被选中以生成新的后代。
AI Programmer的输出结果包括“Hello World”、字符串反转、加减乘运算、斐波那契数列等。
AI Programmer的设计基于C#.NET的模块化框架,包含运行遗传算法的引擎、基因组编码器和解码器、用于执行模拟程序的沙箱解读器,以及将代码转换为二进制可执行文件的编译器。尽管在最初设计时采用了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所示。
经过92,400代后,AI Programmer成功生成了加法程序;在177,900代后则生成了减法程序,如图15所示。
突破性机器学习系统:AI Programmer能够自动生成软件程序
如图16所示,该生成程序能够基于两个初始输入值,输出斐波那契序列。
研究论文:AI Programmer,利用遗传算法实现软件程序的自动创建
摘要
本文将介绍一款开创性的机器学习(ML)系统,它能够在几乎无需人类干预的情况下,自动生成完整的软件程序。该系统被称为“AI Programmer”,其核心采用遗传算法(GA)并结合严格的编程语言,显著降低了ML搜索空间的开销。AI Programmer的创新之处在于(i)其独特的系统架构,包含了一个为提高效率和安全性而设计的嵌入式手工解释器,以及(ii)对遗传算法的改进,加入了指令基因的随机化绑定和特定于编程语言的基因组构建与消除技术。我们将深入探讨AI Programmer的系统架构、工作原理,并展示基于主流CPU进行的软件生成性能实验数据。
论文链接:https://arxiv.org/pdf/1709.05703.pdf
点击原文以获取职位详情,期待你的加入!
Please specify source if reproduced「AI系统首创自主编程:遗传算法助力超越初级程序员」 | AI工具导航

