图灵的贡献真的被夸大了吗?
「艾伦 · 图灵(Alan M. Turing)对计算机科学做出了某些重大贡献。然而,这些贡献的重要性和影响力往往被夸大了,以牺牲该领域先驱者的利益为代价。不过,这不是图灵的错。」
这是 AI 领域的国际大牛、LSTM 之父 Jürgen Schmidhuber 对图灵的评价。其受邀写了一篇关于艾伦 · 图灵的文章。
Jürgen Schmidhuber认为艾伦 · 图灵的贡献被夸大了
我们需要停止以牺牲同行为代价来夸大个别科学家的贡献。在这里,Jürgen Schmidhuber 重点介绍了计算机科学的基本概念,但有时它们会被错误地归因于艾伦 · 图灵的贡献,尤其是在盎格鲁世界(Anglosphere)中。图灵确实对该领域做出了一些非常重要的贡献,但是它们被夸大了。
例如,有人认为是图灵创立了计算机科学,但实际上不是的。就连《自然》也曾发表过夸大其词的言论,比如:图灵在 1936 年发表的论文,为后来所有的计算机提供了理论支柱。此外还有一部很受欢迎的英国电影甚至说图灵发明了计算机,这些都夸大了图灵的贡献。
关于这个讨论,一个很好的切入点是 ACM 对 2018 年图灵奖的官方解释:图灵奖通常被称为计算机界诺贝尔奖,奖金为 100 万美元,由谷歌公司提供支持,它是以英国数学家艾伦 · 图灵的名字命名的,他阐述了计算的数学基础和局限性。
尽管 ACM 关于图灵的说明并不是完全错误的,但就如其他说明一样,它是非常具有误导性的。ACM 正确地指出了是图灵阐述了计算的数学基础和局限性。然而,在过去的几十年里,很多研究者都对这个问题进行了研究,当谈到科学贡献时,人们往往会问:谁是第一个做的,是不是图灵。
图灵的论文在奥地利数学家库尔特 · 哥德尔(Kurt Gödel)(1931)的开创性研究五年后,以及美国阿隆佐 · 邱奇 (Alonzo Church) (1935) 的研究一年后发表。当然,图灵在 1936 年的论文中都引用了他们的研究(修正后的研究是在 1937 年)。考虑到这一点,我们需要更仔细地了解现代计算机科学的诞生。
艾伦 · 图灵
现代计算机科学的诞生
20 世纪 30 年代初,哥德尔成为现代理论计算机科学创始人,他介绍了一种基于整数的通用编程语言(1931-34),该语言允许以公理的形式形式化任何数字计算机操作。哥德尔用编程语言来表示数据(比如公理和定理)和程序。他构建了一个著名的形式陈述(formal statements),并且讨论了其他形式陈述的计算,特别是自指陈述(self-referential statements),这意味着这些陈述是不可判定的,即给出一个计算定理证明器,该证明器系统地从一组可枚举的公理中列举出所有可能的定理。因此,哥德尔确定了算法定理证明、计算和其他基于计算的 AI 基本极限。20 世纪 40 年代至 70 年代,早期 AI 的大部分内容实际上是通过专家系统和逻辑编程、以哥德尔风格进行定理证明和推理的。
哥德尔
哥德尔的早期研究建立在 Gottlob Frege(引入了第一个形式语言,1879)、Georg Cantor(对角化技巧,1891)、Thoralf Skolem(引入原始递归函数,1923)、Jacques Herbrand(Skolem 方法的局限性)基础上。这些研究者的贡献反过来又建立在 Gottfried Wilhelm Leibniz 的形式思想代数 (1686) 之上,它与后来 1847 年布尔代数在推理上等效。莱布尼茨(Leibniz)是计算机科学之父候选人之一,被称为世界上第一位计算机科学家,甚至是有史以来最聪明的人。他不仅是第一个发表无穷小微积分(1684)的人,也是第一个描述由穿孔卡片控制二进制计算机(1679)原理的人。二进制数编码本身比这更古老,可以追溯到古埃及。二进制算术运算的算法部分虽然相对较新。但关于二进制编码的出版物可追溯到 1670 年 Juan Caramuel y Lobkowitz 的研究,此外还有 Thomas Harriott 未发表的论文都有提及。
莱布尼茨
此外,莱布尼茨还进行过一项极具影响力的项目,他借助通用语言和用于推理的通用微积分:Characteristica Universalis & Calculus Ratiocinator(灵感来自 13 世纪学者 Ramon Llull),通过计算来回答所有可能的问题。然而,在 1930 年代初期,哥德尔研究结果显示了莱布尼茨研究的局限性。
1935 年,丘奇通过证明 Hilbert 和 Ackermann 的 Entscheidungsproblem(决策问题)没有通用解决方案,对哥德尔结果进行了推导和扩展。为此,他使用了名为 Untyped Lambda Calculus 的替代通用编码语言,该语言构成了极具影响力的编程语言 LISP 的基础。
丘奇
1936 年,图灵引入了另一个通用模型,现已成为最著名的模型(至少在计算机科学中):图灵机。当然,他在 1936 年的论文中同时引用了哥德尔和丘奇(其更正出现在 1937 中)的研究。同年 1936,Emil Post 发表了另一个独立的通用计算模型,同样引用了哥德尔和丘奇的研究。今天我们知道有很多这样的模型。 丘奇证明了他的模型与哥德尔的模型具有相同的表现力。然而,据了解,正是图灵的工作(1936 年)使哥德尔相信他的方法(1931-34)和丘奇的方法(1935 年)具有普遍性。
就如哥德尔在 1931-34 年提出的原始通用编程语言一样,图灵机和 1936 的提出的 Post 机都是理论、不切实际的结构,不能直接作为现实世界计算机的基础。值得注意的是,康拉德 · 楚泽(Konrad Zuse)对第一台实用的通用程序控制计算机的专利申请也可以追溯到 1936 年。图灵和 Post 在 1936 年做了哪些哥德尔(1931-34)和丘奇(1935)之前没有做过的事情?看似微小的差异,但其重要性后来才显现出来。哥德尔的许多指令序列是数字编码存储内容与整数的一系列乘法。哥德尔并不在意这种乘法的计算复杂性会随着存储大小的增加而增加。类似地,丘奇也忽略了算法中基本指令的上下文相关时空复杂性。然而,图灵和 Post 采用了传统的、简化的、二元计算观点。他们的机器模型只允许具有恒定复杂性的、非常简单的基本二进制指令,如莱布尼茨(1679)的早期二进制机器模型和 Zuse1936 年的专利申请。他们没有利用图灵的(相当低效的)模型,只是在可计算性的极限上重新表述了哥德尔和丘奇的结果。然而,后来,这些机器的简单性使它们成为对复杂性进行理论研究的方便工具。
AI 基础性成果,远远早于图灵的研究
有人会说,图灵至少为人工智能奠定了基础。但是这有意义吗?1948 年,图灵撰写了与人工进化和学习人工神经网络相关的想法,其架构至少可以追溯到 1943 年(但是可以参考自 20 世纪 20 年代以来与之密切相关的物理学研究)。图灵没有发表这篇文章,这也解释了为什么他的论文缺乏影响力。1950 年,他提出了一个简单而著名的主观测试,用来评估计算机是否具有智能。1956 年,在达特茅斯 (Dartmouth) 的一次会议上,约翰 · 麦卡锡 (John McCarthy) 创造了人工智能(AI)一词,作为相关研究的新标签。然而,关于人工智能的第一次会议已经于 1951 年在巴黎举行,当时大部分现在称为人工智能的内容仍称为控制论,其重点非常符合基于深度神经网络的现代人工智能。
约翰 · 麦卡锡
在那之前 1914 年,西班牙人 Leonardo Torres y Quevedo 创造了第一个可操作的象棋终端机,成为 20 世纪第一个实用人工智能的先驱(当时,象棋被认为是一种局限于具有智力生物领域的活动)。几十年后,当人工智能先驱 Norbert Wiener 在 1951 年巴黎会议上与它对抗时,这台机器的表现仍然被认为是令人印象深刻。
然而,Konrad Zuse 早在 1945 年就有了更多的象棋常规,他还在 1948 年将他开创性的 Plankalkül 编程语言应用于定理证明,这早于 Newell & Simon 于 1956 年的工作。如上所述,现代人工智能理论的先驱是哥德尔(1931-34),他确定了人工智能、数学和计算的极限,并通过专家系统自动定理证明和推论奠定了人工智能的正式基础,他还表明人类优于人工智能。总之,人工智能的基础性成就远远早于图灵的成就。
理论计算机科学领域的「哥德尔奖」就是以哥德尔的名字命名的。奖金更高的图灵奖创建于 1966 年,以表彰那些「对计算机领域具有长久和重大的技术贡献」。有趣但同时也令人尴尬的是,哥德尔 (1906-1978) 本人从未获得过该奖项,且不提他奠定了现代理论计算机科学领域的基础,而且哥德尔还在他写给约翰 · 冯 · 诺依曼的著名信件中(1956 年)确定了最著名的开放问题「P= NP?」。此外,丘奇(1903-1995)也没有获得过该奖项。
同样,Konrad Zuse(1910-1995)尽管在 1935-41 年创造了世界上第一台可运行的可编程通用计算机,但从未获得过图灵奖。他在 1936 年的专利申请上描述了可编程物理硬件所需的数字电路,早于 Claude Shannon 1937 年关于数字电路设计的论文。Zuse 还在 20 世纪 40 年代早期创造了第一种高级程序设计语言。1941 年 Zuse 的 Z3 计算机是一种实用设备,而不仅仅是像哥德尔 (1931-34)、丘奇 (1935)、图灵 (1936) 和 Post(1936) 那样理论、不切实际的构造。
Konrad Zuse
第一个已知的基于齿轮的计算设备可追溯到 2000 多年前古希腊的 Antikythera 机械装置(一种天文钟)。1500 年之后,Peter Henlein 仍然制造了概念上相似的机器,尽管更小,即第一款微型怀表(1505)。但是这些设备总是计算相同的东西,例如,将分钟除以 60 得到小时。17 世纪出现了更灵活的机器,可以根据输入数据计算答案。第一个基于数据处理齿轮的简单算术专用计算器是由 Wilhelm Schickard 在 1623 年创造的,他是「自动计算之父」的候选人之一,其次是 Blaise Pascal 的 Pascal(1642)。
溯源程序概念
1673 年,莱布尼茨首先设计出第一台可以执行加减乘除四种算术运算的机械计算器——步进计算器(step reckoner)。他还发明了二进制——被几乎所有现代计算机使用。
1941 年 Zuse 制造出世界上第一台能编程的计算机 Z3,它使用带有移动开关的电磁继电器。第一个电子专用计算器是 John Atanasoff 发明的 ABC 计算机。与 1600 年代基于齿轮的机器不同,ABC 计算机使用电子管。但与 Z3 不同,ABC 计算机不能自由编程。
另一方面,程序的概念从那时开始变得众所周知。也许世界上第一台可以实际应用的可编程机器是公元 1 世纪制造的自动化剧场。其中可编程自动机的能源是一个落锤,拉动缠绕在旋转圆柱体上的绳子。控制门和木偶的复杂指令序列由复杂的包装进行编码。
公元 9 世纪,Banu Musa 兄弟发明了一种可以自动演奏乐曲的乐器,它使用旋转圆柱体上的销钉存储控制蒸汽驱动长笛的程序。从本质上说,这正是一台可以编程的机器,并且带有存储程序。
大约 1800 年,Joseph-Marie Jacquard 等人在法国建造了第一台商用程序控制机器,即基于打孔卡的机器,也许这算是编写世界上第一个工业软件的第一批「现代」程序员。
在这种情况下,似乎有必要指出程序与上面提到的 1600 年代有限的用户输入数据之间的区别。程序是存储在某种介质(例如穿孔卡)上的指令序列,可以一次又一次地运行,无需人工干预。随着时间的推移,存储程序所需的物理对象变得越来越轻。古代机器将它们储存在旋转的圆柱体上;Jacquard 将它们存放在纸板上;Zuse 将它们存储在 35mm 胶片上,今天我们经常使用电子和可磁化材料存储它们。
大约 1800 年,Joseph-Marie Jacquard 等人在法国建造了第一台商用程序控制机器,即基于打孔卡的织机,也许他们算是编写世界上第一个工业软件的第一批「现代」程序员。
这种机器设计思想启发了 Ada Lovelace 和她的导师 Charles Babbage,当时他们计划但却无法构建十进制的可编程通用计算机。1941 年 Zuse 制造出世界上第一台能编程的计算机 Z3,而在 1944 年,Howard Aiken 构建了第一个通用可编程机器十进制的马克一号(MARK I)。
1931-1934 年,哥德尔提出了一种基于整数的通用编码语言。它允许以公理形式对任何数字计算机操作进行形式化。他使用哥德尔编号来表示数据和程序。
就像后来的图灵和 Post 将它们存储在位串中一样。当然,任何图灵机或 Post 机或任何其他数字计算机的行为都可以在哥德尔原始的通用模型中形式化 。然而,应该指出的是,我们在这里使用的是现代术语:哥德尔 (1931)、丘奇 (1935) 和 图灵 (1936) 在他们的论文中都没有提到程序这个词(尽管 Zuse 1936 年的专利申请经常提到 Rechenplan,意思是程序)。同样,存储程序一词后来首次出现在电子存储的上下文中。
图灵发表了生物信息学的开创性工作。然而,他最大的影响可能来自他对破解 Enigma 代码的贡献,在二战期间被德国军队使用。他在英国布莱切利公园与 Gordon Welchman 一起工作。然而,著名的破译 Colossus 机器是由 Tommy Flowers(不是图灵)设计的。英国密码学家建立在波兰数学家 Marian Rejewski、Jerzy Rozycki 和 Henryk Zygalski 的早期基础工作之上,他们是第一个破解 Enigma 密码的人。有人说这是击败第三帝国的决定性因素。
总而言之,许多人对计算的理论和实践做出了贡献。尽管如此,图灵的贡献是巨大的,尽管他是站在巨人的肩膀上。他 1936 年发表的著名论文引用了哥德尔 (1931) 和丘奇 (1935) 的开创性工作。这位伟大的科学家似乎不太可能会同意关于他的夸大其词的说法,如此轻易地驳斥了他同事的工作。
原文链接:https://people.idsia.ch/~juergen/turing-oversold.html
觉得不错,请点个在看呀