上世纪80年代,我成年了,在家为Commodore VIC-20和Apple等个人电脑编程。我在大学里继续学习计算机科学(CS),并最终在伯克利获得博士学位,我的大部分专业培训都植根于我所谓的“经典”CS:编程、算法、数据结构、系统、编程语言。在经典计算机科学中,最终目标是将一个想法简化为由人类源代码用Java、c++或Python等语言编写的程序。classic cs中的每一个思想——无论多么复杂或复杂,从数据库连接算法到令人难以置信的迟钝的Paxos共识协议——都可以表示为人类可读、可理解的程序。
上世纪90年代初,当我还在上大学的时候,我们还处于AI寒冬的深处,AI作为一个领域同样被经典算法所主导。我在康奈尔大学的第一份研究工作是和Dan Huttenlocher一起工作,他是计算机视觉领域的领导者(现在是麻省理工学院施瓦茨曼计算学院的院长)。在Huttenlocher 1995年左右的博士级计算机视觉课程中,我们从未讨论过任何类似深度学习或神经网络的东西——所有的都是经典算法,如Canny边缘检测、光流和豪斯多夫距离。深度学习还处于起步阶段,还没有被认为是主流AI,更不用说主流CS了。
当然,这是30年前的事情了,从那时起发生了很多变化,但有一件事没有真正改变,那就是CS是作为一门以数据结构、算法和编程为核心的学科来教授的。如果再过30年,甚至10年,我们还在以这种方式对待计算机科学,我会感到惊讶。事实上,我认为计算机科学作为一个领域正在经历一场相当大的剧变,我们中很少有人真正做好了准备。
编程将被淘汰。我相信“写程序”的传统观念正在走向消亡,事实上,除了非常专业的应用程序之外,我们所知道的大多数软件都将被人工智能系统所取代训练有素的而不是编程。在需要“简单”程序的情况下(毕竟,并不是所有事情都需要在gpu集群上运行数千亿个参数的模型),这些程序本身将由人工智能生成,而不是手工编码。
我不认为这个想法很疯狂。毫无疑问,最早的计算机科学先驱,从电气工程(相对)原始的洞穴中脱颖而出,尖锐地认为所有未来的计算机科学家都需要对半导体、二进制算术和微处理器设计有深刻的理解才能理解软件。快进到今天,我敢打赌99%的编写软件的人几乎不知道CPU是如何工作的,更不用说晶体管设计的物理原理了。进一步说,我相信未来的计算机科学家将远离“软件”的经典定义,他们将很难逆转链表或实现快速排序。(我不确定我记得如何实现快速排序自己。)
像CoPilot这样的AI编码助手只是触及了我所描述的内容的表面。在我看来很明显当然未来所有的程序最终都将由人工智能来编写,人类充其量只能扮演监督角色。任何怀疑这一预测的人只需看看人工智能内容生成的其他方面(如图像生成)正在取得的非常迅速的进展。DALL-E v1和仅在15个月后宣布的DALL-E v2在质量和复杂性上的差异是惊人的。如果说我在过去几年的人工智能工作中学到了什么,那就是它确实存在非常人们很容易低估日益庞大的人工智能模型的力量。几个月前还像是科幻小说的事情正在迅速成为现实。
所以我不仅仅是在谈论像Github的CoPilot取代程序员这样的事情。1我说的是用训练模型取代编写程序的整个概念。在未来,计算机科学专业的学生将不需要学习诸如如何向二叉树添加节点或c++代码这样的普通技能。这种教育将会过时,就像教工程专业的学生如何使用计算尺一样。
未来的工程师只需敲击几下键盘,就能启动一个包含四亿亿亿参数的模型实例,这个模型已经对人类知识的全部范围进行了编码(然后是部分),并随时准备执行机器要求的任何任务。让机器做我们想做的事情的大部分脑力工作将是提出正确的示例、正确的训练数据和正确的方法来评估训练过程。能够通过少次学习进行泛化的适当强大的模型只需要执行任务的几个好例子。在大多数情况下,大规模的、人为管理的数据集将不再是必要的,大多数人“训练”AI模型将不会在PyTorch中运行梯度下降循环或类似的东西。他们将以身作则,机器将完成其余的工作。
在这门新的计算机科学中——如果我们还称之为计算机科学的话——机器将如此强大,并且已经知道如何做很多事情,这一领域将看起来不像一个工程领域,而更像一个教育领域;也就是说,如何最好地教育机器就像如何在学校里最好地教育孩子的科学一样。然而,与(人类)孩子不同的是,这些人工智能系统将驾驶我们的飞机,运行我们的电网,甚至可能统治整个国家。我认为,当我们的注意力转向教授智能机器而不是直接编程时,绝大多数经典CS就变得无关紧要了。从传统意义上讲,编程实际上将会消亡。
我认为计算机科学作为一个领域正处于一个相当大的动荡之中,我们中很少有人真正做好了准备。
这一切是如何改变我们对计算机科学领域的看法的?新的原子计算单元不再是实现冯·诺依曼机器的处理器、内存和I/O系统,而是一个大规模的、预先训练过的、高度自适应的AI模型。这对我们思考计算的方式来说是一个巨大的转变——不再是一个可预测的、静态的、受指令集、类型系统和可判定性概念控制的过程。基于人工智能的计算早已跨越了静态分析和形式证明的界限。我们正在迅速走向这样一个世界,在这个世界里,计算的基本构件是喜怒无常的、神秘的、自适应的代理。
这一转变被一个事实所强调没有人真正理解大型人工智能模型是如何工作的。人们在发表研究论文3.,4,5实际上发现新的行为现有的大型模型,即使这些系统是由人类“设计”的。大型人工智能模型能够做一些它们没有接受过明确训练的事情,这应该会把尼克·博斯特罗姆(Nick Bostrom)吓得魂飞魄灭2还有人(有理由)担心超级智能AI横行霸道。除了实证研究,我们目前没有办法确定当前人工智能系统的局限性。至于未来更大更复杂的人工智能模型——祝你好运!
对于任何读过现代机器学习论文的人来说,焦点从程序到模型的转变应该是显而易见的。这些论文几乎没有提到创新背后的代码或系统;人工智能系统的构建模块是更高层次的抽象,如注意力层、标记器和数据集。即使是20年前的时间旅行者也很难理解三句话在(75页!)GPT-3纸3.描述为模型构建的实际软件:“我们使用与GPT-2相同的模型和架构,包括其中描述的修改初始化、预归一化和可逆标记化,除了我们在变压器的层中使用交替密集和局部带状稀疏注意模式,类似于稀疏变压器。为了研究ML性能对模型大小的依赖关系,我们训练了8种不同大小的模型,从1.25亿个参数到1750亿个参数,范围超过三个数量级,最后一个是我们称之为GPT-3的模型。先前的工作表明,在足够的训练数据下,验证损失的缩放应该近似于一个平滑的幂律作为大小的函数;许多不同规模的训练模型使我们能够测试这一假设的验证损失和下游语言任务。”
计算基础定义的这种转变带来了巨大的机遇,也带来了巨大的风险。然而,我认为现在是时候接受这是一个很有可能的未来,并相应地发展我们的思维,而不是只是坐在这里等待流星撞击。
数字请在独家报道中观看作者对这部作品的讨论通信视频。//www.eqigeno.com/videos/end-of-programming
1.伯杰,e,对付副驾驶。SIGPLANPL的观点博客,2022;https://bit.ly/3XbJv5J
2.博斯特罗姆,N。超级智能:路径、危险、策略。牛津大学出版社,2014年。
3.布朗,T.等。语言模型是很少的学习者。2020;https://bit.ly/3Eh1DT5
4.小岛等人。大型语言模型是零概率推理器。2022;https://bit.ly/3Ohmlqo
5.奈,等人。展示您的工作:使用语言模型进行中间计算的便签本。2021;https://bit.ly/3TLnfMY
数字图书馆是由计算机协会出版的。版权所有©2023 ACM, Inc.
我有幸从两个非常个人的角度来欣赏这篇文章。首先,我和沃尔什博士同龄,1995年毕业于伊利诺伊大学伊利诺伊分校,获得计算机科学学士学位。
其次,我的一个儿子是UCF计算机科学专业的大二学生,正在学习他们仍然非常经典的课程,但作为一名课外研究助理,他非常关注人工智能。这两个观点证实了沃尔什博士的预言。
如果不是因为我儿子的课外研究,他可能还在学习我和沃尔什博士在20世纪90年代初学过的计算机科学。
沃尔什博士预测,我们将使用人工智能来编写“简单”程序,而不是手工编写,这似乎很有可能,而且迫在眉睫。我相信现在的从业者可以而且必须马上开始这样做。
埃德•伯恩斯
微软首席架构师
我喜欢这篇文章的观点。但恐怕会有一些棘手的问题。使用ChatGPT或类似的工具,很容易创建一个代码段,在python中实现bubblesort。结果仍然是完美的。
但我该如何为AI指定复杂的程序或系统,以满足用户的需求和喜欢?在小范围内使用AI编程可能是可行的。但我认为,在大范围内编程,例如非功能性、UX和DB以及安全需求可能非常困难。想象一下,我必须为AI提供多少文本才能得到我想要的东西。
如果AI以正确的方式实现了90%的要求,我就必须决定修改哪个输入文本。在第二次尝试中,AI会改变什么?一切还是什么?下一个版本的AI会提供什么?
恐怕我们会陷入系统规范、验证和维护的反复试错灾难。
尽管存在这些可能的问题,但无论如何,遵循本文的思想是值得的。
大多数软件的行为都是可预测的和确定性的。任何因故障而面临严重后果的实体(政府、医疗保健公司、银行等)都将很难证明自适应系统的安全性和可靠性。在最好的情况下,它将需要重要的和持续的自动化/回归/探索/渗透测试和源代码审查,这将成为软件和QA工程师的责任。如果软件真的是通过训练模型而产生的黑箱,那么每一个调整和错误修复(可能是通过重新训练模型完成的)都可能在预期区域之外产生不可预测的结果,因此需要另一轮完整的回归测试。
像ChatGPT这样的新奇事物和关键业务系统之间有很大的区别。如果实现了这一点,仍然需要大量的人力参与来确定需求,生成训练数据,最重要的是在每次模型更新时从各个角度测试系统的缺陷和疏忽。这个链条中的每一个环节都有可能造成沟通不畅和疏漏。一个人可以维护他们自己理解的软件。但是维护一个没人懂的软件可能需要几十个人,因为出现意外后果的风险要大得多。所以我们不仅不清楚这是否安全,也不清楚它是否真的能省钱。
显示评论11 - 13的13在总