举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔知了社区有害的内容
×
不规范转载
×
举报说明
慧聪安防网讯 在2016年11月发表的一篇论文中,微软和剑桥建立了一个能够编写并解决简单数学问题的代码的算法,该论文在被今年最大的人工智能会议认可之后,获得了极高知名度。该算法被命名为DeepCoder,它能够通过查看潜在的代码组合来解决问题,从而增强自身的能力(这有点复杂,我们会在下文详细解释它)。然而,这并不意味着它如一些报告声称的那样,只是偷走代码、或从现有的软件复制和粘贴,亦或只是搜索互联网的解决方案。
该论文的共同作者,同时也就职于MicrosoftResearch的MarcBrockschmidt说,“我们的目标受众是那些不能或不想编码,但本身是可以描述清楚自己想要解决的问题是什么的人。”他认为该系统可以在不需要给出数学方程的情况下,像使用Excel中的公式般采用简单的命令来求解答案。
这套系统可以分为两个不同的部分:代码编写算法,以及搜索潜在代码的机制。
自动编程
代码编写算法是一项难度不低的工作,但这里我们用简单的术语来了解它。
数学问题有输入和输出两种——或者理解为你手头掌握的数字和你需要计算的数字。研究人员用非常基本的代码简单的解决了问题,并展示了算法的输入、输出和用于解决它们的具体代码。
想象它像一座塔楼。研究人员展示了构建砖块的算法,然后描绘了塔的最终外观。但算法需要知道如何排列每个砖块的边缘,使它们彼此契合。虽然对于人类来说这些很简单,但对于机器来说这却是一个困难的问题,它们不知道重力以及结构之间应该如何排布、相互支撑。
但是,如果向机器展示如何将砖块堆叠和装配在一起,最终完成类似塔的结构,通过看到成千上万的塔建成,那么机器将能够建立具有类似形状的塔。对于DeepCoder,这些砖块便是小段的代码。
当被要求解决一个新的问题,该算法会根据它已经见过的类似的问题来预测以什么顺序用什么代码将解决问题,而不使用以前用过的代码。
整个编程语言对于这些算法来说太复杂了,因此Microsoft和Cambridge团队制作了一种更小的语言,称为域特定语言,就像一个蹒跚学步的砖块集合。该系统能够在线解决范围大约为3-6行代码的简单编程难题。在这过程中需要解决的问题是数学情况的描述、及其输入。
一个充满可能性的世界
为了增强其编写代码的能力,DeepCoder还有挖掘潜在的代码以获得具有可行性的解决方案的能力。它并不扫描如StackOverflow或GitHub等流行的代码存储库——虽然作者希望这将在未来发生。
“我们可以用固定长度的语句来编写并使用这种语言,进而审视所有可能的程序。计算机非常善于搜索这些东西。”Brockschmidt说。
他把任务比作试图撰写“狐狸狗”这种只用几个字甚至没有使用语言知识的语句。
你可以从“狐狸狐狸狐狸狐狸狐狸”开始,然后继续“狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狐狸狗”直到句子里出现“狗”并呈现该句子的完整性为止。考虑这一点的另一种方法是“无限猴子定理”,根据SalesforceAI研究员StephenMerity所说,无限数量的猴子在无限的时间内打字,最终会产生莎士比亚著作。在这里也是一样的,只不过猴子的键盘键是代码块而不是字母。
不过搜索所有变体并找到正确的那一个,这个能力才是该团队的真正贡献:该算法预测哪些代码最可能用于解决问题,然后首先查看这些解决方案。如果算法找到一个,那么问题则被视为解决,这样它可以学习到比代码本身更多的内容。
搜索代码听起来像人类做的事情——在网上找到解决他们的问题的几行代码——但它很可能只是一些最接近的语句或仅仅是描述该算法的生成和排序代码的过程。如果一个人要做AI所做的,那么他需要尝试编程他可以想到的代码的每一个组合,然后复制和粘贴他刚刚写入的代码到一个新的文件,挨个实验看看是否可行。
未来,Microsoft和Cambridge团队表示他们希望该系统能够理解完整编码语言的细微差别,并能够在线识别出良好的代码。
(0)
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
暂无评论