微软和剑桥大学的研究员近日发布了一篇论文,文中阐述了其科研成果——一个会编程的机器学习系统。
该系统叫DeepCoder,能够解决编程比赛所涉及到的基础编程题目,为不会编程的人提供了制作简易程序的可能。
论文地址:https://openreview.net/pdf?id=ByldLrqlx
DeepCoder的创造者之一,在剑桥大学参与微软研究项目的 Marc Brockschmidt 表示:“该程序最终可以让非编程人员通过向计算机描述自己的程序构想来获得想要的程序,系统会自动写就。”
DeepCoder所用的技术叫程序合成( program synthesis),通过截取已有软件的代码行来组成新的程序,不得不承认,当下很多程序员也是这样做的。通过学习一系列代码片(code fragment)的输入(inputs)和输出(outputs)数据,DeepCoder能自动摘取出对目标任务有用的代码片。
在Copy代码这件事情上,AI可能比你牛
机器的检索速度、广度、及深度强于人类程序员,这很好理解。更重要的是,机器能够以其出其不意的方式组合代码片,换句话说,该系统或许正以其“机器视角”革新编程这件事。
基于以上原因,该系统编写代码的速度远快于人类。旧有的编程AI需要不断地尝试代码片组合以使程序成功运行,一般来说这一过程需要几分钟。但DeepCoder可以在一秒钟之内写出能够跑通的程序。随着DeepCoder的编程经验增加,其分辨有用及无用的代码片的能力增加,其生成程序的速度将会越来越快。
不过麻省理工大学研究员 Solar-Lezama表示,程序员并不会因此而失业,“在程序员为DeepCoder搭建起程序框架之后,就能够将精力放在更复杂、更需要经验驱动的事情上”。
目前DeepCoder只能生成五行左右代码的程序。但对于某些编程语言来说,五行代码就足够了,不是吗?
不能一口吃个胖子
目前让机器自动生成一个大规模的程序还不现实,但大程序也是由小的代码片堆成的。
在知名评论网站Hacker News上,有网友就此事评论道:
“论文里的方法很特别,旧有的GPs、GA技术耗时长,错误率大。”
另有网友做出了挑战生成模型根本性的疑问:
“和监督学习不同,这些能够生成人脸、画作、代码的生成模型,并没有客观的测试集来验证它们是否真的‘生成’了东西。你怎么知道这些被生成的东西不是从训练数据集里简单提取拼凑的呢?”