古典计算机科学的末日即将到来,而我们大多数人都是等待流星撞击的恐龙。
在20世纪80年代长大的人中,很多人在家里为Commodore VIC-20或者Apple等个人计算机进行编程,在经典计算机科学中,最终的目标是将一个想法简化为人类编写的程序—用Java、C++、Python等编程语言进行源代码开发。经典计算机科学中的每一个想法—无论多么复杂或者精密,从数据库连接算法到令人费解的Paxos共识协议—都可以被表达为人类可读、可理解的程序。
在90年代时,我们还处在人工智能冬天的深处,而人工智能作为一个领域也同样是由经典算法主导的。在1995年左右的博士级计算机视觉课程中,课程中从未讨论过任何类似于深度学习或神经网络的东西,都是经典的算法,如Canny边缘检测、光流和Hausdorff距离,深度学习还处于起步阶段,尚未被视为主流的人工智能,更不用说主流的CS了。
当然,那是30年前的事了,从那时起已经发生了很多变化,但有一点没有真正改变的是,计算机科学被作为一门以数据结构、算法和编程为核心的学科来教授。如果30年后,甚至10年后,我们还在以这种方式对待CS,我们回觉得疑问。事实上,CS作为一个领域正处于一个相当大的动荡中,而我们中很少有人真正准备好。
编程将会被淘汰

我相信,”编写程序 “的传统观念正在走向消亡,事实上,除了非常专业的应用,我们所知的大多数软件都将被人工智能系统所取代,这些系统是经过训练而不是编程的。在需要 “简单 “程序的情况下(毕竟,不是所有东西都需要在GPU集群上运行数千亿个参数的模型),这些程序本身将由人工智能生成,而不是手工编码。
毫无疑问,计算机科学最早的先驱者,从电子工程的(相对)原始洞穴中走出来,坚定地认为所有未来的计算机科学家都需要掌握对半导体、二进制算术和微处理器设计的深刻理解来理解软件。时至今日,99%的编写软件的人几乎不知道CPU是如何工作的,更不用说晶体管设计所依据的物理学。推而广之,未来的计算机科学家将与 “软件 “的经典定义相去甚远,以至于他们很难逆转一个链接列表。
像CoPilot这样的人工智能编码助手仅仅是表面现象。对我来说,似乎完全显而易见的是,未来的所有程序最终都将由人工智能编写,而人类充其量只能扮演监督者的角色。任何怀疑这一预测的人只需要看看在人工智能内容生成的其他方面正在取得的非常迅速的进展,如图像生成。DALL-E v1和DALL-E v2—仅在15个月后宣布—在质量和复杂性上的差异是惊人的。如果说我在过去几年的人工智能工作中学到了什么,那就是很容易低估越来越大的人工智能模型的力量。几个月前看起来像科幻小说的事情正在迅速变成现实。
因此,我不只是在谈论CoPilot取代程序员。我说的是用训练模型取代编写程序的整个概念。在未来,CS学生不需要学习诸如如何在二进制树上添加节点或用C++编码这样的世俗技能。这种教育将是过时的,就像教工程系学生如何使用滑尺一样。
所有这些如何改变我们对计算机科学领域的思考方式?

未来的计算原子单元不是实现冯-诺伊曼机器的处理器、内存和I/O系统,而是一个巨大的、预先训练好的、高度适应的人工智能模型。这是我们思考计算的方式的一个地震式的转变—不是作为一个可预测的、静态的过程,由指令集、类型系统和可解性的概念所支配。基于人工智能的计算早已越过了可用于静态分析和形式化证明的卢比肯河。我们正在迅速走向这样一个世界:计算的基本构件是有脾气的、神秘的、自适应的代理。
没有人真正了解大型人工智能模型是如何工作的,这一事实强调了这种转变。人们正在发表研究论文,实际上发现了现有大型模型的新行为,尽管这些系统是由人类 “设计 “的。大型人工智能模型能够做它们没有被明确训练过的事情,这应该让尼克-博斯特罗姆和其他任何担心超级智能人工智能失控的人(理所当然)感到害怕。除了实证研究,我们目前没有办法确定当前人工智能系统的极限。至于未来的人工智能模型,它的数量级更大、更复杂–祝你好运!”。
对于任何读过现代机器学习论文的人来说,焦点从程序转向模型应该是很明显的。这些论文几乎没有提到他们的创新背后的代码或系统;人工智能系统的构件是更高层次的抽象,如注意层、标记器和数据集。即使是20年前的时间旅行者也很难理解GPT-3论文(75页长!)中描述为该模型建立的实际软件的三句话。
我们使用与GPT-2[RWC+19]相同的模型和架构,包括其中描述的修改后的初始化、预规范化和可逆标记化,不同的是我们在转化器的层中使用交替的密集和局部带状的稀疏注意模式,类似于稀疏转化器[CGRS19]。为了研究ML性能对模型大小的依赖性,我们训练了8种不同大小的模型,范围从1.25亿个参数到1750亿个参数的三个数量级,最后一个是我们称之为GPT-3的模型。以前的工作[KMH+20]表明,在有足够训练数据的情况下,验证损失的缩放应该是一个平滑的幂律,作为规模的函数;训练许多不同规模的模型,使我们能够测试这个假设,无论是验证损失还是下游的语言任务。
计算的基本定义的这种转变带来了巨大的机会,也带来了大量的巨大风险。然而,我认为现在是时候接受这是一个非常可能的未来,并相应地发展我们的思维,而不是坐在这里等待流星的到来。