编程的终结:经典计算机领域正迎来剧变

上世纪80年代,我长大了,开始在家中为Commodore VIC-20和Apple等个人电脑编程。我在大学里继续学习计算机科学 (CS),并最终在伯克利获得博士学位,我的大部分专业培训都植根于我称之为“经典”的CS:编程、算法、数据结构、系统、编程语言。在经典计算机科学中,最终目标是将一个想法简化为由Java、C++或Python等语言编写的程序。经典计算机科学中的每一个思想——无论多么复杂,从数据库连接算法到令人难以置信而滑稽的Paxos共识协议——都可以表达为人类可读、可理解的程序。

上世纪90年代初,当我还在上大学的时候,我们还处于AI寒冬的深处,AI作为一个领域同样被经典算法所主导。我在康奈尔大学的第一份研究工作是和Dan Huttenlocher一起工作,他是计算机视觉领域的领军人物(现在是麻省理工学院施瓦茨曼计算学院的院长)。1995年前后,在Huttenlocher 的计算机视觉的博士生课程中,我们从未讨论过任何类似于深度学习或神经网络的东西,而是经典算法,如Canny边缘检测、光流和Hausdorff距离。深度学习还处于起步阶段,还没有被认为是主流人工智能,更不用说主流计算机科学了。

当然,这是30年前的事情了,从那时起发生了很多变化,但有一件事没有真正改变——计算机科学是一门“数据结构、算法和编程”作为其核心的学科来教授的。如果再过30年,甚至10年,我们还在用这种方式研究计算机科学,我会感到惊讶的。事实上,我认为计算机科学作为一个领域正在经历一个巨大的变迁——我们中很少有人真正做好了准备。

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

我不认为这个想法很疯狂。毫无疑问,从(相对)原始的电气工程洞穴中走出的最早的计算机科学先驱们坚信,所有未来的计算机科学家都需要对半导体、二进制算术和微处理器设计有深刻的理解才能理解软件。快进到今天,我敢打赌99%的编写软件的人几乎不知道CPU是如何工作的,更不用说晶体管设计的物理基础了。进一步地说,我相信未来的计算机科学家将远离“软件”的经典定义,他们将很难逆转链表或实现快速排序。(见鬼,我不确定我是否还记得如何实现快速排序。)

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

(创造出令人惊艳的图像, https://openai.com/dall-e-2/)

所以,我不只是在谈论像Github的CoPilot[1]取代程序员,而要说的是,用训练模型取代编写程序的整个概念。在未来,计算机科学的学生将不需要学习诸如如何向二叉树添加节点或C++代码这样的平凡技能。这种教育将会过时,就像教工程专业的学生如何使用计算尺一样。

未来的工程师只需敲击几下键盘,就能启动一个包含400亿亿个参数(

four-quintillion-parameter)的模型实例,这个模型已经对人类知识的全部范围(包括子集)进行了编码,并随时准备执行机器要求的任何任务。让机器做我们想做的事情的大部分脑力工作将是提出正确的示例、正确的训练数据和正确的方法来评估训练过程。像基于小样本学习(few-shot learning)且能泛化的、这样强大的模型只需要执行任务的几个好的示例。在大多数情况下,大规模的、人工管理的数据集将不再是必要的,大多数人“训练”一个AI模型将不会在PyTorch中运行梯度下降循环(gradient descent loops)或类似的东西。他们只是教模型几个示例,机器将完成其余的工作。

在这门新的计算机科学中——如果我们还称之为计算机科学的话——机器将如此强大,并且已经知道如何做很多事情,这一领域将看起来不像一个工程领域,而更像一个教育领域。也就是说,如何最好地教育机器,就像如何最好地教育学校里的孩子一样。不过,与 (人类) 孩子不同的是,这些人工智能系统将驾驶我们的飞机、运行我们的电网,甚至可能统治整个国家。我认为,当我们的注意力转向教授智能机器而不是直接编程时,绝大多数经典CS就变得无关紧要了。传统意义上的编程实际上将会消亡。

我认为CS作为一个领域正在经历一场相当大的剧变,我们中很少有人真正做好了准备。

这一切将如何改变我们对计算机科学领域的看法?新的原子计算单元不再是处理器、内存和I/O系统,而是一个大规模的、预先训练过的、高度自适应的AI模型。这对我们思考计算的方式来说是一个巨大的转变——不再是一个可预测的、静态的、受指令集、类型系统和可判定性概念支配的过程。基于人工智能的计算早已跨越了静态分析和形式证明的界限。我们正在迅速走向这样一个世界,在这个世界里,计算的基本构件是有气质的、神秘的、自适应的代理。

没有人真正了解大型人工智能模型是如何工作的,这一事实突显了这种转变。人们发表的研究论文实际上发现了现有大型模型的新行为,即使这些系统是由人类“设计”出来的。大型人工智能模型能够做一些它们没有受过明确训练的事情,这应该会把Nick Bostrom[2]和其他担心超级智能人工智能横行的人吓得魂飞魄灭 (这是正确的)。除了实证研究,我们目前没有办法确定当前人工智能系统的局限性。至于未来更大更复杂的人工智能模型——祝我们好运!

对于任何读过现代机器学习论文的人来说,焦点从程序到模型的转变应该是显而易见的。这些论文几乎没有提到创新背后的代码或系统:人工智能系统的构建模块是更高层次的抽象,如注意力层(attention layers)、标记器(tokenizers)和数据集。即使是20年前的时间旅行者,也很难理解GPT-3论文[3](描述为该模型构建的实际软件)的三句话(three sentences):

“我们使用与GPT-2相同的模型和架构,包括其中描述的修改后的初始化、预归一化和可逆标记化,除了我们在Transformer Layer中使用交替的密集和局部稀疏注意力模式,类似于 稀疏矩阵(Sparse Transformer)。为了研究ML性能对模型大小的依赖关系,我们训练了8种不同大小的模型,从1.25亿个参数到1750亿个参数,范围超过三个数量级,最后一个是我们称之为GPT-3的模型。先前的工作表明,在足够的训练数据下,验证损失的缩放应该近似于一个平滑幂律(power law)作为规模的函数。许多不同规模的训练模型允许我们测试这个假设的验证损失(validation loss)和下游语言任务。”

计算基础定义的这种转变带来了巨大的机遇,也带来了巨大的风险。然而,我认为现在是时候接受这是一个很有可能的未来,并相应地发展我们的思想,而不是只是坐在这里等待流星撞击。

更多详细信息,请您微信关注“计算网”公众号: