谈一谈自动编程

这里所说的自动编程,是运用人工智能技术来自动生成程序,尽可能免除人类劳动。编程

在自动产生程序以前,先要知道需求是什么吧?要能把需求准确地描述给机器,这就须要一种需求描述语言。假如咱们制造了这种需求描述语言,它进一步发展,愈加规范,成为了一种DSL(领域特定语言)。嗯,这就变成了DSL编程。框架

假如要生成一个应用程序,要选择一些开发框架、中间件和技术方案吧?人类开发时要考虑开发成本和效益的权衡,可是机器既然已懂得多种技术方案,对它来讲开发成本为0,那么选择最好的那一个技术方案就好了。这就至关于存在一套最好(也可能最复杂)的框架,用DSL在框架之上编程。机器学习

闹了半天就是DSL和框架啊?智能到哪去了?学习

要想真正发挥人工智能的做用,我有两个思路:编码

  1. 自动提问
    就算有了需求描述语言,人类就能准确描述需求吗?若是描述得很差,机器可否经过一些分析,针对不足之处,向人类提问,用答案来完善需求描述呢?
  2. 自主学习
    人工智能的精髓是自主学习。若是机器能学习世界上现有的代码,不须要人类特地为它提供需求描述语言和技术方案,就方便多了。最好是人类直接说需求,机器本身思考,有问题就提问。

有一个有趣的事——最初的自动编程是什么呢?当编译器技术刚发明时,它就是自动编程:自动把高级语言代码转化成汇编码或机器码。人工智能

我我的认为,凡是能给人类省事的技术,哪怕是if-else,也能够算是某种人工智能。中间件

如今要求高了,编译器是硬编码的智能,而咱们还要可扩展、甚至自动扩展的智能。如今的自动编程主要有两个流派:基于规则推理的、基于机器学习的(包括统计学习、深度学习等)。学术界对自动编程有一个更特别的说法——程序合成(Program Synthesis)。递归

因为机器学习的火爆,比较流行的彷佛是基于机器学习(+深度学习)的自动编程,其中一种是经过学习输入输出数据的样本,自动“猜”出一个能处理这些数据的程序。开发

对此,摘录马毅教授的一条微博:数学告诉咱们,不管overfit了多大的样本数据,经验事实如何震撼,也取代不了逻辑严格的推理证实——这是惟一能将结论从有限样本扩展到无限的方法。编译器

例如一个递归程序,只有数学概括法能准确生成它,任何有限样本都没法准确生成它(只能近似猜想)。对于有一点小bug就能出大事的程序,不能松懈啊。

所以我不是很同意基于机器学习的自动编程,即便要用,也只是辅助手段吧。啊哈哈~

相关文章
相关标签/搜索