APP下载

浅谈人工智能编程技术的发展

2018-06-02张煦昕

电脑知识与技术 2018年10期
关键词:人工智能

张煦昕

摘要:随着人工智能的出现,人们越来越迫切脱离手写代码的束缚。本文将从前几年提出的自动代码生成技术发展现状出发,随后主要介绍近两年刚刚兴起的机器自动编程,讨论机器学习的原理,并举例说明该方法的应用,最后提出待解决的问题和未来预测。

关键词:人工智能;自动代码生成技术;机器自动编程

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)10-0192-02

1 引言

可以说编程是人工智能的核心,是人工智能时代的一项基本素养,是人工智能时代跨地域存在的语言。而程序员编程的工作量也在空前迅速地增加着,在科技高速发展的人工智能时代,人们脑洞大开,甚至已经琢磨着把制造人工智能的程序员从编程工作中解放出来,利用人工智能自己产生代码,实现人们想要的功能。用制造出的产品完全替代制造者再去生成同样复杂或更复杂的功能,如果放在上个世纪,似乎是永动机一样的理论,而依照目前的发展趋势,将来要实现这件事情绝非天方夜谭。

2 自动代码生成技术

在大约2010年之后到现在,汽车行业中手写代码的情况已经非常少见了,取代手写代码的正是自动生成代码工具。

这种自动生成代码的方法通常是由模型化图形输入来实现的,Matlab软件的Simulink扩展包提供了一些按功能分类的基本的系统模块,用户只需要知道这些模块的输入输出及模块的功能,而不必考察模块内部是如何实现的,不需要编写大量程序,通过对这些基本模块的调用,再将它们连接起来就可以构成所需要的系统模型,进而进行仿真分析。Simulink对比手写代码,就好像Windows系统对比DOS系统,一个是图形化的控制,一个是指令行的控制,孰强孰弱显然易见。

自动生成代码的优势特别在复杂和非常复杂的系统中更有意义,例如航空航天领域和汽车行业。

自动代码生成技术虽然已经应用在了一些领域,但想要完全脱离手写代码,仅靠建模生成代码做出的产品恐怕不能达到你所期许的性能,因为模块毕竟是有限的,但是对产品的需求可能是无限的。写过程序的人大概都知道也许只是更改一两行语句就能使得软件功能大变,特别是代码模块化之后每行语句更会行行皆有分量,如何应对用户输入的细微差别,如何完善并更改系统性能?只有将模块细化,或大量增加模块的种类,但无论是哪种方式都会大大增加初始建模的复杂度和操作系统的内存负荷,而即使如此也不能保证自动生成代码的准确性。

自动生成代码技术的灵活性不足主要是因为生成代码的过程还需要大量的人为参与,需要人为将代码模块拼凑组装,如果机器能像人一样有逻辑思考能力,或者能够通过学习大量例程学会自动编码呢?

3机器自动编程技术

机器自动编程一直是人工智能渴望攻克的重要应用领域之一,随着深度强化学习技术的迅速进展,就在最近几年,人工智能已在自动编程方向获得了广泛应用并取得了很大进展。

在刚有人工智能这一概念时,机器自动编程技术应用于某些领域就已开始有所尝试了。通过对人工神经网络的发现,一种机器自动学习程序的方式引起了人们的关注:神经程序生成。其中神经网络基于输入/输出(I/O)的范例进行学习,并生成程序。人工神经网络反映了人脑功能的若干基本特性,但并非完全等同于生物系统,只是一定程度的模仿和抽象。与数字计算机比较,人工神经网络在构成原理和功能特点等方面显然更接近人脑,它不是按给定的程序一步一步地执行运算,而是能够自身适应环境、总结规律、完成某种运算、识别或过程控制。人工神经网络首先要以一定的学习准则进行学习,然后才能工作。

深度强化学习应用到机器自动编程只是近两年的事情,现阶段的人工智能自动编程只是一个在给定时间搜索最优解的优化问题,目前自动编程能够完成的算法还比较简单,需要使用者给出程序的输入和输出,可能还要给出评估方法,但随着深度强化学习在自动编码领域的进一步深入应用,极有可能在未来几年有突破性的技术进展。

在最近一项研究中,微软发布了自己人工智能自动编程技术的研究。在该项研究中,神经网络能够按照用户的意愿生成应用程序。这种方式用户只需要提供一些简单的输入/输出(I/O)范例以表示自己希望获得的程序模式,系统就可以根据这些信息生成相应的代码,这段代码能够正确地将这些给定的输入转换为给定的输出。

目前常用的编程语言有很多,比如C,JAVA,Python等,对于机器来说各种语言也有优劣之分,如果能够决定用哪种语言产生代码必将会有助提高机器学习效率。不同的自动编码系统通常会参考域特定语言(domain specific language,DSL)来定义一种编程语言,并非直接采用某种现有的编程语言,这是因为DSL定义的语言更加简练,不包含控制逻辑,只有一些基本语句,如数值加一减一、移动指针位置、读取某存储器内数据、将数据写入存储器某位置等基本操作原语。所有代码片段都采用自定义的域特定语言能够大大简化机器自学习的难度。系统通过DSL生成用于执行任务的程序,用户不需要理解 DSL 的所有细节。使用过程中,编程过程不会被用户看到。

和微软类似的,谷歌也从人工智能神经网络发现的初期就开始进行机器自动编程技术的研究了。前不久谷歌AutoML系统创造了一系列机器学习代码,这段代码的学习效率甚至高于开发这些代码的研究人员。一般情况机器学习需要大量训练数据,再由工程师分析这些数据,设计算法形成训练模型。使用AutoML我们只需将训练数据传入就会自动生成参数和算法,形成训练模型,这样即使不具备机器学习方面专业知识的人员使用机器学习进行工作也不会有太多障碍。在 AutoML 架构中,有一个名为“the controller”的控制器循环神经网络,它可以设计出一种被称为“child”的“子”模型架构,然后这个“子”模型针对特定任务进行训练与质量评估。随后,反馈的结果返回到控制器中,以此来帮助提升下一轮循环中的训练参数。这一过程(如左图所示)从生成新的架构开始,到测试、把反馈结果传送到控制器以获得经验结束,将会重复几千次。最终,控制器会倾向于生成那些在数据集上具有更高准确性的架构。

4 结语

从最初的人工手写代码到自动代码生成技术的发现,再到现在的利用机器自学习产生代码,人类尽管取得了非常卓越的技术进展,但是这个研发領域也遇到了一系列有待克服的困难。这些困难中,首先最严重的当属60多年前动态规划之父贝尔曼提出的“维数灾难”,机器学习面对的是各种未知情况,它的本质其实是一种不断试错的过程,这个过程需要大量的数据做支持,很有可能在得出最佳策略前就已导致机器劳损甚至报废;其次,机器自动产生的代码很难验证其逻辑的正确性,因为我们不知道这些代码具体是什么,我们很难保证后续更多的输入能够都能得出准确无误的输出。

虽然如此,人工智能的蓬勃发展给很多应用领域都带来了革命性的性能提升,未来也是空前光明,也许明天的机器将不再仅仅是自我学习,它们能够自我更新,能够自己产生程序来解决无法预料的问题。到那个时候,所有类似编程这样耗时耗力的工作都将由人工智能接管,人类就可以做机器无法做到的事情——更好地享受生活,充分实现人生价值。

参考文献:

[1]麻省理工科技评论.科技之巅2[M].北京:人民邮电出版社,2017.

[2] 张俊林.人工智能[J].程序员,2016(6).

猜你喜欢

人工智能
我校新增“人工智能”本科专业
用“小AI”解决人工智能的“大”烦恼
当人工智能遇见再制造
AI人工智能解疑答问
人工智能与就业
基于人工智能的电力系统自动化控制
人工智能,来了
人工智能来了