共计 2611 个字符,预计需要花费 7 分钟才能阅读完成。
据新智元报道,
让人工智能能够自主进行编程一直是计算机科学领域的一个理想追求。然而,目前在这一领域的成就仍显得相对有限,例如,AI 能完成简单的编程语言补全或执行基本的加法运算。今日,我们将讨论一项声称能够完全自动生成完整软件程序的机器学习系统——“AI Programmer”。
研究团队指出,他们利用这一系统验证了一个长期以来的理论,即功能完善的程序可以通过自动化方式生成。具体而言,AI Programmer 通过遗传算法在机器学习中模拟复杂指令。尽管目前生成的程序复杂性与初学者编写的代码相似,研究者们相信,AI Programmer 所创建的程序有潜力超越传统开发的限制,不再受制于人类的时间与智力。
AI 所编写的程序在测试复杂性和计算资源之间寻求最佳的平衡点。换句话说,可能性几乎是无穷无尽的。
研究人员进一步强调,未来我们需要重新审视并设计新的编程语言,这些语言应当面向机器,而非人类。因为现有的编程语言并不适合基于机器学习的编程方式。“在思考由机器学习驱动的程序生成未来时,我们需要打破传统的编程语言设计思路。”
他们表示,唯有如此,我们才能展望一个由 AI 驱动、结合人类创意与设计的新计算机软件开发未来。
AI Programmer 的软件架构如图所示。可以看出,人类的参与极为有限,只需在开始时输入指令,最后接收特定任务的结果函数,其余则完全由机器完成。
AI Programmer 通过遗传算法实现程序的自动生成,理论上能够处理各种类型的任务。
根据相关论文,研究者们选择了一种无类型的编程语言,利用 8 种指令驱动 AI Programmer 进行软件生成。
AI Programmer 所使用的编程语言具备图灵完备性,如表 1 所示。在时间和内存不受限制的情况下,图灵完备的编程语言理论上可以解决任何编程问题。实际上,任何符合这一特性的编程语言都有能力应对大量编程挑战。因此,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 所示。
如图 13 所示,AI Programmer 生成了反转字符串的程序。
AI Programmer 在 92,400 代后成功生成加法程序,而在 177,900 代后生成减法程序,如图 15 所示。
全新机器学习系统:AI Programmer 自动生成软件程序的探索

如图 16 所示,该生成程序能够基于两个初始输入生成斐波纳契序列。
相关论文:AI Programmer,运用遗传算法来自动化软件开发

摘要
本文首次展示了一种能够在极少人类参与下,自动生成完整软件程序的机器学习(ML)系统。该系统名为“AI Programmer”,其核心架构基于遗传算法(GA),并结合严格限制的编程语言,从而显著降低了其 ML 搜索空间的开销。AI Programmer 的创新之处包括(i)独特的系统架构,其中融入了为提高效率和安全性而设计的嵌入式手工解释器,以及(ii)遗传算法的改进,加入了指令基因(instruction-gene)随机化绑定和特定编程语言的基因组构建与消除技术。我们将深入探讨 AI Programmer 的系统架构、其运作机制,以及通过常见 CPU 进行的软件生成功能和性能的实验结果。
论文链接:https://arxiv.org/pdf/1709.05703.pdf
点击查看原文,了解更多职位信息,期待你的加入!


AI Programmer的出现让我想起了未来的工作模式,程序员会不会变得越来越少?