摘要: 去年年初,微软公司推出了一款名为DeepCoder的机器学习系统,同时宣称该系统具有自我编码的能力,这一举动又将人工智能的发展向前推进了一步。 正如人工智能是建立在众多机器学习或深度学习方法之上一样,DeepCoder创建的代码也是基于大量现有代码示例,研究人员通常会用这些代码进行系统的训练。
去年年初,微软公司推出了一款名为DeepCoder的机器学习系统,同时宣称该系统具有自我编码的能力,这一举动又将人工智能的发展向前推进了一步。
正如人工智能是建立在众多机器学习或深度学习方法之上一样,DeepCoder创建的代码也是基于大量现有代码示例,研究人员通常会用这些代码进行系统的训练。
其结果是:DeepCoder编写的软件汇集了部分其它人工编写的程序,著名的杂志《连线》将这称之为“掠取其它软件”。
当然,尽管DeepCoder存在不尽如人意的地方,但该让软件自己进行应用程序编写这项研究仍旧是一项具有非凡的工作,也有着令整个数字世界为之振奋的前景。
基于意图的编程
当我们希望一款软件能够为我们编写应用程序时,我们真正想要的是什么呢?答案就是:我们希望软件所编写出的应用程序,能够较好地表达出我们的意图。
术语“基于意图”源自于近期兴起的“基于意图的网络”,这是一种基于人工智能对网络进行配置的方法,它可以对管理者的业务意图进行预测。
基于意图的网络能够帮助管理者制定级别较高的业务策略,紧接着,它会对自己是否能够执行该策略进行验证,并且检查自己能否使配置的网络资源达到理想状态,以及是否能对网络状态进行有效监管以保证所有策略能够持续执行,并在必要的时候对其进行纠正。
例如,您可以要求Alexa为您编写一款应用程序,该程序能够对您的相册收藏进行追踪。此时,Alexa会自动为您编写代码,在完成后向您展示,以供使用。
原理是什么呢?
刚刚以Alexa为例进行了简单的说明,其实不难发现,AI采用的方法就是去找到一个与您要求相似的应用程序,然后根据您的需求对代码进行调整,或者挑选出一些代码片段对其进行程序组合。
换言之,Alexa采用的方法与DeepCoder类似,也就是从其他地方“借用”代码,并将这些代码进行组合以满足当前客户的需求。
但是将人工编写的代码进行汇集并不是我们真正想得到的AI编写软件,不是么?我们真正寻求的是有能力对应用进行创新的编写软件。
换言之,AI在编写程序的时候能具有创造力么?它能写出真正具有创新性的应用程序么?这些应用程序是人们未曾设想过的。
第五代语言
几十年来,对于计算机科学的研究学者们来说,他们一直盼望着有一款根据用户意图生成所需应用程序的软件能够问世。但事实上,根据来自维基百科的资料,上世纪80年代掀起的第五代语言浪潮曾试图“让计算机在没有程序员的情况下解决给定的问题”。
第五代语言是一种期望计算机能对问题自动求解的意图,基于所给定的某些约束,交由程序来处理而不需要程序员再投入人力。这个想法看上去很有前景,但实验结果证明它仍然具有很大的局限性。
仅仅指定约束就可以解决问题过于理想化了:大多数数学优化问题都在寻求一组数学表达式,这些表达式能够很好的描述约束条件。
在创造应用程序时所面临的一个巨大挑战是第五代语言并不能很好的表达算法——程序员在编写代码时都有他们特定的步骤。
因此,第五代语言的发展并不乐观,尽管它促进了声明式以及为特定应用而设计的语言(如SQL和HTML)的快速发展——这些语言将用户意图和底层软件区分开来。
但毫无疑问:用声明式的语言表达您的意图与能够自己编写应用程序的软件大有不同。编写“SELECT * FROM ALBUMLIST”与“Alexa,为我编写一个追踪我相册的应用程序”相去甚远。第五代语言中缺失的部分是AI。
算法
在20世纪80年代,我们还没有办法让软件自己编写应用程序,但随着人工智能的快速发展,这个想法不再遥不可及。第五代语言处理简单优化任务的能力促进了计算机代数系统的发展,使其在自动优化方面日趋成熟,这也被称为计算机生成算法。当然,发展并不局限于此。
还有一些研究项目,例如谷歌的AutoML,它能够构建基于机器学习的神经网络架构。您可以将神经网络架构视为一种应用程序,尽管它使用了人工智能技术。在这种情况下,我们拥有足够聪颖的人工智能软件,它能够对应用程序进行编写。
AutoML以及与其类似的项目都具有广阔的发展空间。尽管如此,我们仍旧没有更接近天网,就连这些努力,也不够企及我们前面所描述的那些基于意图的编程目标。
人类意图
从本质上来看,AutoML和基于意图的编程正朝着不同的方向发展,因为对于用户会如何表达各自的意图,两者有着不同的处理方式。如上述示例,Alexa是以人为中心,利用Alexa的自然语言处理能力结合其它上下文技巧,能够提供以消费者为导向的用户体验。
在AutoML(或者任何机器学习或深度学习工作)中,工程师们必须以对约束条件(例如用户意图)进行正确的描述。
举个例子,如果你想教会人工智能识别猫的图片,那么就应有如下约束条件:在一个包含一百万张图片的数据集中,其中至少有十万张图片包含猫。软件也许能正确的将它们进行区分,也有可能区分错误,但它会在每一次尝试中进行学习。
那么,“我想要的相册追踪应用程序”的有效约束又是什么呢?目前,这个问题仍在我们所能解决的范围之外。
目前发展
目前,人工智能虽然还不能创造出一种能够满足用户意图的应用程序,但是它在一些简单的应用场景中已经得到了较好的应用。我们现在所达到的,是能从大型数据集中进行模式分析的人工智能。
如果我们可以把算法成熟的运用到数据集中,或许能够取得一些进展。例如,如果基于AI的应用程序可以访问大量人工创建的工作流程,那么它可以很好的预测出您目前所处工作流程的下一步。
换句话说,我们将现在所拥有的算法的功能称之为“下一步最佳行动”。我们可能仍然需要更多的努力,使得软件了解我们对应用程序的要求,目前,我们能够借助AI探寻到达此目标的步骤。
对于找到“下一步最佳行动”,AI能够提供一些建议,但是不能够系统的构建出整个算法,这看上去更像增强型智能而非人工智能。
我们在试图创建一类软件,它们能够表达出人类意图,而并不仅仅是自动解决问题。当然,我们仍需要在构建应用程序时伸出援手,但尽可能的让这个过程变得简单。
基于此,新兴的低代码或无代码平台市场在这个方向快速创新发展也就显得不那么奇怪了。
如今的低代码或无代码平台能够支持复杂的,特定领域的声明式语言,使人们能够以类似英语的表达式(或其他人类语言)表达他们的意图。
他们还具有将应用程序和应用程序组件用模板表示的能力,使用户能够以“拖放”这种简单的方式对应用程序进行组装。
现在,许多低代码或无代码平台供应商正想办法将AI应用其中,这将会增加应用程序创建者的能力,并有助于他们指定他们想要应用程序遵循的算法。
或许有那么一天,我们可以直接告诉这些平台我们的需求是什么,然后它们就会自动为我们编写出来。虽然现在我们的技术还没有发展到这个程度,但是今天,我们已经比低代码或无代码平台更加接近目标,加上创新正以惊人的速度发展着。我相信这种等待不会太久。