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