人工智能(AI)的发展与编程语言的复杂性密切相关。早在1959年,IBM的Arthur Samuel便在IBM® 701计算机上开发了一款能够自学西洋跳棋的程序。这个程序得益于搜索树和alpha-beta剪枝算法,展现了惊人的复杂性。如今,各种语言如Lisp、Python和R被广泛用于AI的开发。本文将深入探讨AI及机器学习领域中语言的演变过程。
构建AI和机器学习程序所使用的编程语言各不相同。每种程序都有独特的需求和局限性,而某些语言在特定领域内则表现得尤为出色。为了满足AI应用的独特要求,新的编程语言不断被创造和演变。
高级语言诞生之前
在人工智能发展的早期,唯一可用的语言是计算机的原生语言,通常称为机器语言或汇编语言。由于这些语言仅支持简单的操作,例如将数据从内存转移到寄存器,使用起来极为复杂。同时,机器所支持的数据类型也受到了很大限制。然而,尽管高级语言尚未出现,开发复杂的AI应用程序的努力早已开始。
1956年,AI的奠基人之一John McCarthy发明了一种名为alpha-beta剪枝的树搜索剪枝技术。在这个时期,许多AI问题被视为搜索问题,研究人员开展了大量相关研究。尽管当时的内存和计算能力相对有限,这项技术使得开发人员能够在早期计算机系统上处理更复杂的问题,并在早期AI游戏中应用了alpha-beta剪枝。
同年,Arthur Samuel利用McCarthy的alpha-beta搜索算法,在IBM 701上开发了一个西洋跳棋程序。不同于传统方法,Samuel并不需要亲自下棋来教导程序,而是引入了自学习的概念,允许程序自行进行棋局。该程序利用IBM 701的原生指令集开发,尽管复杂性高且可用的低级指令有限,仍然取得了显著的成就。
AI语言演化的历史阶段
人工智能的发展历程中充满了丰富的故事,我将根据语言演变的时间线将AI的历史划分为三个阶段:初期(1954-1973年)、混乱时期(1974-1993年)和近代时期(1994年至今)。
初期(1954-1973年)
初期是一个探索的时代,新的机器和其功能被引入,同时开发了高级语言,以便将这些机器的能力应用于各种场景。
在1958年,为IBM 704计算机开发了一个国际象棋程序NSS,命名来源于其作者Newell、Shaw和Simon。该程序从搜索的角度处理国际象棋,并由NSS的作者使用信息处理语言(IPL)开发。IPL是首个为了创建AI应用而设计的编程语言,尽管其语法比机器语言略高,但仍然相对简单,允许开发人员在不同计算机系统上使用。
IPL引入的众多特性至今仍被广泛应用,例如列表、递归、高阶函数等。尽管第一版IPL并未实现,但后续版本(2-6)得以实施,并在IBM 704、IBM 650及IBM 7090等多个系统上使用。其他一些早期AI应用程序,如Logic Theorist和General Problem Solver,也都是用IPL开发的。
尽管IPL取得了成功并在当时的计算机架构上广泛使用,但不久之后便被一种更为高级的语言取代,这就是LISP。LISP以其更简单、更具可扩展性的语法赢得了广泛的青睐,尽管IPL的影响在后续语言中依然存在,尤其在对列表的重视方面。
LISP,即“LISt Processor”,是John McCarthy于1958年创建的。McCarthy在1956年的达特茅斯夏季AI研究项目后,致力于为AI开发一种专注于IBM 704平台的语言。1957年,FORTRAN被引入同一平台,IBM也推出了FORTRAN List Processing Language(FLPL),作为FORTRAN的扩展,用于列表处理。该语言成功应用于IBM的平面几何项目,但由于缺乏一些关键特性而受到限制。
LISP作为一种基础编程语言,成功实现了计算机科学中的多种核心概念,如垃圾回收、树结构、动态类型、递归以及高阶函数。它不仅能够将数据表示为列表,甚至将源代码自身也定义为列表。这种特性使得LISP能够同时处理数据和LISP代码本身。LISP还具备扩展性,允许程序员创建新的语法和领域特定语言嵌入。
以下示例展示了一个计算数字阶乘的LISP函数,通过递归实现阶乘的计算。
(defun factorial (n)(if (= n 0) 1 (* n (factorial (- n 1)))))
1968年,Terry Winograd利用LISP开发了一个名为SHRDLU的开创性程序,能够与用户进行自然语言交互。用户通过类似于“拿起红色积木”或“这块积木能否支撑住一个角锥体?”的语句与程序进行沟通。这一简单的积木世界演示了自然语言理解和规划的能力,让人们对AI以及LISP语言充满希望。
混乱时期(1974-1993年)
混乱时期标志着AI应用程序开发和资金支持的不稳定阶段。随着第一个AI灰色时期的到来,由于未能达到预期结果,资金开始减少。1980年,专家系统的出现重新点燃了对AI的热情,并带来了新的资金支持,但在1987年,AI泡沫再次破裂,导致第二个灰色时期的出现,尽管这一时期也取得了一些进展。
在此期间,LISP继续在多个应用中发挥作用,并通过各种方言得以扩展。LISP经历了Common LISP、Scheme、Clojure和Racket等多种变体,继续生存并发展。LISP的核心概念通过这些语言以及其他语言扩展到了函数领域之外,同时也为老牌计算机代数系统Macsyma(Project MAC的SYmbolic MAnipulator)提供支持,成为许多程序的基础,如Mathematica、Maple等。
在这一阶段,其他编程语言也相继出现,虽然它们不一定专注于AI,但却推动了该领域的发展。C语言是专为UNIX系统设计的系统语言,并迅速演变为一种流行语言(有多种变体,如C++),广泛应用于系统和嵌入式设备的开发。
在此期间,Prolog(Programming in Logic)作为一门关键语言在法国诞生。该语言实现了霍恩子句(Horn clauses)的逻辑子集,使得用户能够使用事实和规则表示信息,并对这些关系进行查询。以下是一个简单的Prolog示例,展示了如何定义一个事实(苏格拉底是一个凡人)和一条规则(凡人终有一死):
man( socrates ). // Fact: Socrates is a man.mortal( X ) :- man( X ). // Rule: All men are mortal.
Prolog在这一时期被广泛应用于多个领域,且拥有许多变体,融入了多种特性,如面向对象编程、编译为原生机器码的能力,以及与流行语言(如C)的接口。
Prolog在此期间的一个重要应用是开发专家系统(也称为生产系统)。这些系统能够将知识整理为事实,并利用一些规则基于这些信息进行推理。然而,这些系统的问题在于它们的脆弱性,知识的存储既繁琐又易出错。
一个示例专家系统是eXpert CONfigurer (XCON),用于配置计算系统。XCON于1978年使用OPS5(一种用LISP编写的生产系统语言)开发,采用正向链接进行推理。到1980年,XCON已经包含2500条规则,但维护成本极高。
Prolog和LISP并不是唯一用于开发生产系统的语言。1985年,C语言集成生产系统(CLIPS)被开发出来,成为构建专家系统的最广泛使用的工具。CLIPS基于由规则和事实组成的知识系统运行,它是用C编写的,并提供了C扩展接口以提升性能。
专家系统的失败是导致第二个AI灰色时期的重要因素。由于缺乏前景和交付能力,AI研究经费大幅减少。然而,这一灰色时期也孕育了新的方法,连接机制的再次兴起使我们进入了近代时期。
近代时期(1994年至今)
近代时期的AI开始从实用的角度出发,成功地将AI方法应用于实际问题,包括一些早期发展中出现的问题。尽管新语言不断被引入以解决AI挑战,LISP和Prolog仍然是该领域的主力,持续发挥着重要作用。在这一时期,连接机制和新的神经网络方法(如深度学习)也再度崛起。
语言演变与人工智能的进步
随着 LISP 方言的不断增加,最终统一形成了一种新语言,称为 Common LISP。这种语言融合了当时流行的多种方言特征。1994 年,Common LISP 被美国国家标准协会正式认可为标准 X3.226-1994。
在此期间,各类编程语言相继涌现,其中一些是基于计算机科学的新理念,另一些则聚焦于特定的关键特性,例如多样性和易学性。Python 就是属于后者的一种重要语言。作为一种通用的解释型语言,Python 融合了多种语言的优点,包括面向对象的特性和受 LISP 启发的函数特性。Python 在智能应用程序开发中的价值体现在其丰富的外部模块,这些模块涵盖了机器学习(如 scikit-learn、Numpy)、自然语言处理(NLTK)以及众多神经网络库,这些库提供了广泛的拓扑结构支持。
R 语言及其软件环境同样遵循 Python 的模式。R 是一种开源环境,专为统计编程和数据挖掘而设计,使用 C 语言开发。由于现代机器学习的核心在于统计分析,R 语言在自 2000 年稳定版本发布以来,逐渐获得了越来越多的青睐。R 拥有众多涵盖各种技术的库,并且具备使用新特性扩展语言能力的功能。
在这个时期,C 语言依然重要。1996 年,IBM 开发了全球最快、最智能的国际象棋程序 Deep Blue。该程序运行在一台搭载 IBM AIX® 操作系统的 32 节点 IBM RS/6000 计算机上,使用 C 编写。Deep Blue 每秒能够计算高达 2 亿个落棋点,1997 年,它成功战胜国际象棋大师,成为首个击败人类棋手的国际象棋 AI。
在这一时期的后期,IBM 重新回归,但这次的应用并没有国际象棋那么严谨。IBM Watson® 问答系统(又称 DeepQA)能够处理自然语言提出的问题。其知识库中包含了多达 2 亿页的信息,涵盖了整个 Wikipedia 网站。为了将自然语言问题转化为 IBM Watson 可理解的格式,IBM 团队运用了 Prolog,将自然语言解析为能够被 IBM Watson 处理的新事实。2011 年,该系统在 Jeopardy! 比赛中胜过了多位前冠军。
随着对连接机制架构的回归,各种新应用相继问世,彻底改变了图像和视频处理及识别的局面。深度学习技术的出现,使神经网络扩展到更深层次的架构,能够识别图像或视频中的对象,并通过自然语言生成对应的描述,甚至为自动驾驶车辆提供实时的道路和物体检测。这些深度学习网络的规模可能庞大到传统计算架构难以高效处理,但引入图形处理单元 (GPU) 后,现已可以充分应用这些网络。
为了将 GPU 作为神经网络的加速器,需要新的编程语言将传统 CPU 与 GPU 有效结合。Open Computing Language(OpenCL)作为一种开放标准语言,允许在 GPU 上运行类似于 C 或 C++ 的程序,GPU 包含数千个处理单元,相较于传统 CPU 具备更高的并行处理能力。OpenCL 使得通过 CPU 对 GPU 内的操作进行协调并行化成为可能。
总结
在过去的六十年里,计算架构经历了巨大的变革,人工智能技术及其应用也取得了长足的进展。这些年,各种编程语言不断演变,每种语言都有其独特的特性和解决问题的方法。然而,随着大数据技术的诞生以及 CPU 集群和 GPU 阵列等新处理架构的出现,AI 领域中涌现出一批新创新及其支持语言,正在逐渐崭露头角。
Please specify source if reproduced智能语言的未来:探索AI的无限可能 | AI工具导航

