据国外媒体Quartz报道,要是计算机能够理解人们想要解决的问题,并编写代码将其解决,而不像微软Excel那样要在程序内的菜单人工找寻合适的公式,会怎么样?这是一个非常未来主义的想法,但在这方面微软研究院和剑桥大学最近已经取得了进展。在2016年11月的论文中,微软和剑桥大学称它们开发了一种能够自行编写代码解决简单的数学问题的算法。
该算法名为DeepCoder,能够通过研究有哪些潜在的代码组合可以解决问题,来强化自己的能力。(它有点复杂想,下文将会详谈。)然而,这并不意味着该算法从现有软件那里窃取、复制或者粘贴代码,也不意味着它是通过搜索互联网来找到解决方案。
该论文的共同作者、微软研究院研究者马克·布洛克施密特(Marc Brockschmidt)表示,“我们在瞄准那些不懂得或者不想编程,但能够鉴别问题的人。”他称该项技术就像是Excel公式,后者接收简单的指令就能够得出答案,无需获得数学方程式。
该系统分成两个组成部分:
代码编写算法,以及搜索潜在代码的机制。
自动化代码
代码编写算法的运行并不简单,下面先用尽可能简单的话来说明一下。
一个数学问题有输入和输出——或者说你有的数字和你需要计算的数字。研究人员以用非常基础的代码就能解决的问题为例,给算法展示输入、输出以及用来解决它们的代码。
不妨拿它来跟用积木堆砌塔楼的过程进行类比。研究人员给算法展示了积木,然后再展示塔楼最终完工后的模样的图片。但算法需要知道如何对齐每个积木的边缘,使得它们能够堆砌在其它积木上面。虽然这对于人类来说很简单,但对于机器来说这并非易事,因为机器不知道重力,也不知道为什么大的积木要放在小积木下面来提供支撑。
但如果给机器展示积木堆叠拼凑成最终的塔楼的整个过程,让它观看数百乃至数千座塔楼的构建过程,那它们就将能够用类似形状的积木来构建塔楼。而对于DeepCoder而言,积木就是一个个的代码。
当被要求解决新问题,而不是使用之前行得通的代码的时候,该算法会预测什么代码会被用来解决它之前见过的类似问题,以及这些代码会以怎样的顺序排列。
学习整套的编程语言对于这些算法而言过于复杂,因此微软和剑桥团队打造了一种小型语言。它被称作领域特定语言,就像是幼儿的积木玩具。该系统能够在线上解决简单的编程问题,这些问题一般需要使用3到6行的代码。