游客

不做搬运工 微软AI学习自行编写代码

游客 2017-03-03 14:42:09    201390 次浏览

据国外媒体 Quartz 报道,要是计算机能够理解人们想要解决的问题,并编写代码将其解决,而不像微软 Excel 那样要在程序内的菜单人工找寻合适的公式,会怎么样?这是一个非常未来主义的想法,但在这方面微软研究院和剑桥大学最近已经取得了进展。在 2016 年 11 月的论文中,微软和剑桥大学称它们开发了一种能够自行编写代码解决简单的数学问题的算法。

不做搬运工 微软AI学习自行编写代码

该算法名为 DeepCoder,能够通过研究有哪些潜在的代码组合可以解决问题,来强化自己的能力。(它有点复杂想,下文将会详谈。)然而,这并不意味着该算法从现有软件那里窃取、复制或者粘贴代码,也不意味着它是通过搜索互联网来找到解决方案。

该论文的共同作者、微软研究院研究者马克·布洛克施密特(Marc Brockschmidt)表示,“我们在瞄准那些不懂得或者不想编程,但能够鉴别问题的人。”他称该项技术就像是 Excel 公式,后者接收简单的指令就能够得出答案,无需获得数学方程式。

该系统分成两个组成部分:代码编写算法,以及搜索潜在代码的机制。

不做搬运工 微软AI学习自行编写代码

自动化代码

代码编写算法的运行并不简单,下面先用尽可能简单的话来说明一下。

一个数学问题有输入和输出——或者说你有的数字和你需要计算的数字。研究人员以用非常基础的代码就能解决的问题为例,给算法展示输入、输出以及用来解决它们的代码。

不妨拿它来跟用积木堆砌塔楼的过程进行类比。研究人员给算法展示了积木,然后再展示塔楼最终完工后的模样的图片。但算法需要知道如何对齐每个积木的边缘,使得它们能够堆砌在其它积木上面。虽然这对于人类来说很简单,但对于机器来说这并非易事,因为机器不知道重力,也不知道为什么大的积木要放在小积木下面来提供支撑。

但如果给机器展示积木堆叠拼凑成最终的塔楼的整个过程,让它观看数百乃至数千座塔楼的构建过程,那它们就将能够用类似形状的积木来构建塔楼。而对于 DeepCoder 而言,积木就是一个个的代码。

当被要求解决新问题,而不是使用之前行得通的代码的时候,该算法会预测什么代码会被用来解决它之前见过的类似问题,以及这些代码会以怎样的顺序排列。

学习整套的编程语言对于这些算法而言过于复杂,因此微软和剑桥团队打造了一种小型语言。它被称作领域特定语言,就像是幼儿的积木玩具。该系统能够在线上解决简单的编程问题,这些问题一般需要使用 3 到 6 行的代码。

不做搬运工 微软AI学习自行编写代码

无限的可能性

DeepCoder 还能够搜寻可带来可行解决方案的潜在代码,这可强化它自身编写代码的能力。它并不是像 StackOverflow 或者 GitHub 那样通过扫描热门代码库来获得解决方案,尽管研究人员很希望这一点未来可以实现。

“我们会研究你能在特定的长度下用这种语言编写出的所有潜在项目。”布洛克施密特说道,“计算机非常善于搜索这些东西。”

他将该项任务比作是在毫无语言知识的情况下仅用一些单词来造一个关于狐狸越过小狗的句子。

一开始你可能会得到“狐狸狐狸狐狸狐狸狐狸狐狸”,然后是“狐狸狐狸狐狸狐狸狐狸小狗”……直至恰当的句子出现。思考该项任务的另一种方式是 Salesforce 人工智能研究者史蒂芬·梅里蒂(Stephen Merity)的“无限猴子理论”。该理论说,让无限数量的猴子完全无限时地在键盘上任意敲字,最终会写出像莎士比亚那样的作品。这里说的是同样的事情,不同的就只是猴子的键盘不是打字,而是敲代码。

不做搬运工 微软AI学习自行编写代码

但算法搜遍程序所有的变异版本,找出正确的那个的能力,是该团队的真正贡献:该算法可预测哪些代码最有可能被用来解决问题,然后先关注那些解决方案。如果算法找到合适的激发,那问题就被视作已经解决,它对于什么才是合适的代码的理解也随之增进。

搜寻代码听上去像是人类的做法——上网去寻找一些代码行来解决他们的问题——但这只是最接近于恰当描述该算法生成和整理代码过程的说法。如果人类要做该人工智能那样的技术,那就等于是输入他们能够想到的所有代码组合,然后复制粘贴刚记入新文件的代码,再看看是否行得通。

微软和剑桥团队表示,他们希望该系统未来能够理解完整编程语言的细微差别,能够识别网络上的优质代码。

来源:《DeepCoder: Learning to Write Programs(PDF)》,via

内容加载中