编程终将被淘汰? - ACM


我是在20世纪80年代长大的,在家里为Commodore VIC-20和Apple等个人电脑编程。在大学里学习计算机科学(CS),并最终在伯克利获得博士学位,我的大部分专业培训都扎根于我所说的 "经典 "CS:编程、算法、数据结构、系统、编程语言。在经典计算机科学中,最终的目标是将一个想法还原成一个由人类用Java或C++或Python等语言编写的程序。经典CS中的每一个想法--无论多么复杂或精密,从数据库连接算法到令人费解的Paxos共识协议--都可以表达为人类可读、可理解的程序。

20世纪90年代初我上大学的时候,我们还处在人工智能冬天的深处,人工智能作为一个领域也同样被经典算法所主导。我在康奈尔大学的第一份研究工作是与计算机视觉领域的领导者丹-胡腾洛赫(Dan Huttenlocher)一起工作(现在是麻省理工学院施瓦兹曼计算机学院院长)。1995年左右,在Huttenlocher的博士级计算机视觉课程中,我们从未讨论过任何类似于深度学习或神经网络的东西--都是经典的算法,如Canny边缘检测、光流和Hausdorff距离。深度学习当时正处于起步阶段,还没有被视为主流的人工智能,更不用说主流的CS了。

当然,这是30年前的事了,从那时起,很多事情都发生了变化,但有一点没有真正改变的是,CS是作为一门以数据结构、算法和编程为核心的学科来教授的。如果30年后,甚至10年后,我们仍然以这种方式对待CS,我将感到惊讶。事实上,我认为CS作为一个领域正处于一个相当大的动荡期,我们中很少有人真正准备好了。

编程将被淘汰
我相信 "编写程序 "的传统观念正在走向消亡,事实上,除了非常专业的应用,我们所知的大多数软件都将被人工智能系统所取代,这些系统是经过训练而不是编程的。在需要 "简单 "程序的情况下(毕竟,不是所有东西都需要在GPU集群上运行数千亿个参数的模型),这些程序本身将由人工智能生成,而不是手工编码。

我不认为这个想法是疯狂的。毫无疑问,计算机科学最早的先驱者,从电子工程的(相对)原始洞穴中走出来,坚定地认为所有未来的计算机科学家都需要掌握对半导体、二进制算术和微处理器设计的深刻理解来理解软件。快进到今天,我愿意打赌,99%的编写软件的人几乎不知道CPU是如何工作的,更不用说晶体管设计的基础物理学。推而广之,我相信未来的计算机科学家将与 "软件 "的经典定义相去甚远,以至于他们很难逆转一个链接列表或实现Quicksort。(我不确定我自己是否还记得如何实现Quicksort)。

像CoPilot这样的人工智能编码助手只是在我所描述的表面上做文章。在我看来,很明显,未来的所有程序最终都将由人工智能编写,而人类最多只能扮演监督的角色。
任何怀疑这一预测的人只需要看看在人工智能内容生成的其他方面正在取得的非常迅速的进展,例如图像生成。DALL-E v1和DALL-E v2(仅在15个月后宣布)在质量和复杂性方面的差异是惊人的。
如果说我在过去几年的人工智能工作中学到了什么,那就是很容易低估越来越大的人工智能模型的力量。几个月前看似科幻的事情正在迅速变成现实。

所以我说的不仅仅是像Github的CoPilot取代程序员这样的事情,我说的是用训练模型取代整个写程序的概念
在未来,CS学生不需要学习诸如如何在二进制树上添加一个节点或用C++编码这样的世俗技能。
这种教育将是过时的,就像教工程系学生如何使用滑尺一样。

未来的工程师将在几个按键中启动一个四万亿参数模型的实例,该模型已经编码了人类的全部知识(还有一些),准备好接受机器的任何任务要求。让机器做我们想做的事情的大部分智力工作将是提出正确的例子,正确的训练数据,以及评估训练过程的正确方法。能够通过少量的学习进行归纳的适当的强大的模型将只需要一些要执行的任务的好例子。在大多数情况下,大规模的、由人类策划的数据集将不再是必要的,大多数 "训练 "人工智能模型的人不会在PyTorch中运行梯度下降循环,或类似的东西。他们将以身作则,而机器将完成剩下的工作。

在这门新的计算机科学中--如果我们称之为计算机科学CS的话--机器将是如此强大,并且已经知道如何做许多事情,以至于该领域看起来不像是工程方面的努力,而更像是教育方面的努力;也就是说,如何最好地教育机器,与如何最好地教育学校里的孩子的科学不一样:
与(人类)儿童不同,这些人工智能系统将驾驶我们的飞机,运行我们的电网,甚至可能治理整个国家。
我想说的是,当我们的重点转向教导智能机器而不是直接为它们编程时古典CS的绝大部分就变得不重要了
传统意义上的编程,事实上将会死亡。

我认为CS作为一个领域正处于一个相当大的动荡期,我们中很少有人真正准备好了。

所有这些是如何改变我们对计算机科学领域的思考方式?
新的计算原子单元不是实现冯-诺伊曼机器的处理器、内存和I/O系统,而是一个大规模的、预先训练好的、高度适应的人工智能模型。
这是我们思考计算的方式的一个地震式的转变:
不是作为一个可预测的、静态的过程,由指令集、类型系统和可解性的概念所支配。
基于人工智能的计算早已越过了可用于静态分析和形式证明的Rubicon。

我们正在迅速走向这样一个世界:计算的基本构件是有脾气的、神秘的、自适应的代理。

没有人真正理解大型人工智能模型是如何工作的,这一事实强调了这种转变:人们正在发表研究论文,实际上发现了现有大型模型的新行为,尽管这些系统是由人类 "设计 "的。
大型人工智能模型能够做一些它们没有被明确训练过的事情,这应该让尼克-博斯特罗姆2和其他任何担心超级智能人工智能失控的人(理所当然)感到害怕。除了实证研究,我们目前没有办法确定当前人工智能系统的极限。

至于未来的人工智能模型,其规模和复杂程度不亚于现在--祝你好运!"。

对于任何读过现代机器学习论文的人来说,焦点从程序转向模型应该是很明显的。这些论文几乎没有提到他们的创新所依据的代码或系统;人工智能系统的构建块是更高层次的抽象,如注意层、标记器和数据集。即使是20年前的时间旅行者,也很难理解GPT-3论文(75页!)中描述为该模型建立的实际软件的三句话。"我们使用与GPT-2相同的模型和架构,包括其中描述的修改后的初始化、预规范化和可逆标记化,不同的是,我们在转化器的层中使用交替的密集和局部带状的稀疏注意模式,类似于稀疏转化器。为了研究ML性能对模型大小的依赖性,我们训练了八个不同大小的模型,范围从1.25亿个参数到1750亿个参数的三个数量级,最后一个是我们称之为GPT-3的模型。以前的工作表明,在有足够训练数据的情况下,验证损失的缩放应该是一个平滑的幂律,作为规模的函数;训练许多不同规模的模型,使我们能够测试这个假设,无论是验证损失还是下游的语言任务。"

计算的基本定义的这种转变带来了巨大的机会,也带来了很多巨大的风险。然而,我认为现在是时候接受这是一个非常可能的未来,并相应地发展我们的思维,而不是仅仅坐在这里等待流星的到来。