本文转自雷锋网,如需转载请至雷锋网官网申请授权。
数据显示,全球78亿人中,只有2700万人会编写代码,占比不到1%。不过,机器编程想让另外99%的人也能编写代码。这听起来很科幻,但英特尔在机器编程领域的进展让我们相信让100%的人都能写代码并非触不可及。
英特尔的ControlFlag系统是全球首个自我监控系统,不需要标记数据就能学习,通过学习超过十亿行代码,可以自主检测代码中的错误,发现了许多过去被开发人员忽略的违规和异常。
机器编程到底要做什么?为什么全员都能编程后程序员不会失业?
什么是机器编程?
机器编程并非近来提出的全新概念,在20世纪50年代时它被称为“程序合成”,程序合成是一种使用数学证明的非常形式化的方法,它采用某种形式的输入,然后生成一个软件。
实际上,机器编程是构建系统,然后由系统自动构建软件系统,硬件系统也随之构建起来。显然,自动生成软件是机器编程的核心重点,其核心原则是,人类向机器表达他(她)的意图,机器会自动创建完成该意图所需的所有软件。
研究机器编程是为了替代程序员吗?答案当然是否定的。英特尔高级院士、副总裁、英特尔研究院院长Rich Uhlig在2020英特尔研究院开放日上表示:“关于编程,我们看到了两种对立的趋势。一方面,计算资源变得越来越异构,需要了解硬件以及如何最大限度使用硬件的专家级程序员。另一方面,软件开发人员越来越青睐于使用更抽象的语言,以提高工作效率,但这会导致硬件难以发挥出它本身的性能。”
“研究当前的软件是如何开发的,考虑异构硬件的未来,可以得出一个强有力的结论,那就是当前开发软件的方式不会可维持地继续向前发展。”英特尔首席科学家、英特尔研究院机器编程研究主任及创始人Justin Gottschlich认为,“我们对程序员的要求过高。”
用一个非常形象的比喻来解释软件开发需要的准备工作,想象你是一位技艺高超的画家,但在画画之前,需要制作画笔、画布、画框、画架、颜料。“有多少画家能做到这些?我认为这样的画家很少,甚至没有,编程的门槛过高导致许多天才被埋没。“Justin认为。
他举了个例子,一名房地产行业的权威,对市场的理解敏锐又细致,但现有的工具不能帮助她制定房地产决策,于是只能分开使用每一种工具,慢慢收集数据。但只要在她决策之前市场发生变化,之前的工作就需要重新开始,时间也被浪费。
不仅仅是需要精细度、精确性的地产行业,农业、生物、建筑、医疗、金融领域的专家也希望能够向机器表达他们的意图,机器能够构建相应的软件实现他们的意图。
这也是机器编程的概念以及人们为什么需要机器编程。
如何实现机器编程?
英特尔研究院和麻省理工学院的教授团队合作撰写的题为《机器编程的三大支柱》的论文指出,意图(Intention)、创造(Invention)和适应(Adaption)是机器编程的三大支柱。
简而言之,“意图”是人类向机器表达自己想法的能力,表达出来后机器就可以“创造”,之后继续根据用户指定的意图,构造更高级的程序表达。在构造了更高级的表达后,“适应系统”会对这个更高阶的程序进行转换,化解异构硬件挑战。
要实现这个长期的愿景,需要先迈出关键一步。Justin说:“要让机器编程同时从两个方向为开发人员提供帮助。首先是提高编码员和非编码员的工作效率。其次是确保机器编程系统生成的是高质量、快速、安全的代码。”
基于两个核心价值,机器编程关键的第一步是改进软件调试(Debug)。软件Debug本质上是识别、分析和纠正软件缺陷的过程,让软件变得更强大和可靠。根据2017 年剑桥大学开展的一项调查,美国程序员Debug的时间平均花费占到整个开发周期的一半。
这明确了两个问题,程序员的开发的软件质量不合格,同时Debug严重影响了程序员的工作效率。据悉,英特尔研究院开发的机器编程系统可以将程序员的工作效率提高2倍。
利用《诊断软件性能回归的零正学习方法》提出的一种在高性能计算代码中,自动进行回归测试(由新代码签入引起的错误)的方法AutoPerf,在运行代码时只利用名义训练数据和硬件性能计数器,英特尔的系统证明AutoPerf可以检测到并行编程中一些最复杂的性能bug。更重要的是,这个系统可以自动将测试应用于不同的硬件架构上,解决了硬件异构带来的软件编程复杂性大幅提升的挑战。这个系统的研究成果已经在去年的机器学习顶级研究会议NeurIPS上发布。
英特尔的另一个机器编程系统就是文章开篇提到的ControlFlag系统,可以在无人监督的情况下查找不限于性能的漏洞。
“ControlFlag可以在没有任何人类生成的数据标签下学习,非常让我兴奋的是,这个系统最近突破了从超过10亿行代码中学习的极限。”Justin说:“它能够发现一些高度复杂的细微漏洞,其中有些漏洞十多年来一直被开发人员所忽略。每次我们添加更多数据,它似乎都能学到以前没有观察到的新事物。”
雷锋网了解到,ControlFlag更多研究成果将会在今年的NeurIPS上展示。
Jestin介绍,机器编程主要有两种方法,一种是形式化方法,一种是随机方法,目前业界更重视随机的方法。英特尔的不同在于融合了两种算法,并且在许多案例中实现了超过千倍的成绩。比如在改进软件开发时序质量(Temporal qualities),也就是开发软件的时间减少到千分之一,这就有可能让现在需要花三年开发的软件,借助机器编程只需要花费一天就可以完成同样的软件。
“在某些例子中,可以说是近乎无限的改进。因为构建某些东西需要一定的时间,然后我们把这个数字降为零。”Justin进一步指出。
机器编程会替代程序员吗?
程序能够自动化的高效构建,意味着程序员要失业了吗?Justin的观点是,如果机器编程成功,其真正过人之处是创造数千万到数亿个就业机会,为全新类型的程序员有非常大的创造平台,专业程序员也不会被替代。
原因很简单,首先,现存在的大多数机器编程系统都需要大量数据,这些数据通常是代码的形式存在,而代码是由专业程序员编写,自动化将会对高技能程序员的需求将会增加,因为专业程序员写的代码越多,构建的机器编程系统就越先进。
更重要的是,如果意图系统成功,将降低编程的准入门槛。这样一来,只要他们有批判性思考的能力,就可以表达其想法,软件就能帮助他实现,就像前面提到的房产权威的例子。
接下来的问题就是机器编程何时会被大量应用。Justin认为得益于算法、算力和数据的提升,机器编程正处于拐点。
据悉,许多机器编程的研究成果都出自英特尔2017年成立的机器编程中心卡帕研究中心(Kappa Research Center)。并且,英特尔发布了开源技术和出版物,推动机器编程的进一步发展以及与合伙伙伴的合作。英特尔还创立了叫做“机器编程研讨会”,也称MAPS,参会人数已经从四年前的20人增加到了去年差不多400人。
Justin透露,2021年英特尔还将建立一个新的机器编程中心,英特尔也会建立更广泛的合作。
不过,无论是在硬件还是软件领域,想要实现1000倍的提升仅靠单一技术是不够的。Rich说:“英特尔的目标是让每个人都能获得百亿亿次级计算,英特尔研究院正在实现这一目标。为了实现目标,必须改变思考方式,将各领域专家聚集在一起,合作探索科学和技术知识的交叉领域。我们选择了集成光电、神经拟态计算、量子计算、保密计算、机器编程这五个领域。我们认为这五个领域能够真正大规模释放数据价值,并且变革人们与数据互动的方式。”
比如机器编程和神经拟态的交叉研究,Justin认为,“机器编程可以帮助神经拟态计算,以非传统的编程角度进入该架构。今天使用的机器编程的很多技术,是基于各种机器学习类型的系统。我特别感兴趣的是,我们是否可以运用神经拟态计算,探索机器编程的创造性和适应性系统,目前我们还没有探索到。”
最后,引用Justin的一句话:“对于颠覆性的技术,需要‘理性的自由’,要花时间深入挖掘把事情做好,如果做事急躁,在设计和方法上妥协,可能会获得短期收益,但系统长期的生命力会下降。”