第一个黑客的故事
—— 史上首位黑客和他想象的机器
人物生平小传:Alan Turing
结合电影《模仿游戏》阅读本文,尽管电影中虚构了很多故事,但是电影除开同性恋的故事之外,对机器能否思考的核心哲学是相通的。另外就是那一段破解德国密码的冒险故事。
1936年冬天的一篇论文
1936 年的整个冬季被这位年轻的剑桥大学教授拿来润色一篇数理逻辑非常深奥的论文,他认为此时的世界不超过12个人能够理解这篇论文。这是一次不同寻常的演讲活动,但是在他严厉的同事的严格标准下,这篇论文并不完全正统,连这位年轻教授自身在他们看来也不正统。(论文为《论可计算数及其在判定问题上的应用》)
尽管年轻教授的演讲揭示了他的中上层阶级出身,但是他古怪的着装和仪容以及刺耳的话语声让大部分同龄人对他望而却步。他是这所大学的高级学术圈的局外人,几乎没有朋友,他的大部分时间投入在数学、化学、国际象棋以及长跑上面。
在 Babbage 之后的一个世纪,当电脑最终被发明出来的时候,它却并不是在发明家的工作室或者科学家的实验室里的以某种新机器出现的。
1936年,数学杂志以一篇深奥的论文的形式向世界展示了建造数字电脑的可能性。 当时没有人意识到这篇论文在元数学这个模糊领域中的奇特发现最终会导致一项改变世界的技术,尽管这位年轻的作者 Alan Turning 知道自己正处于建设一个可以模拟人类的思维的机器进程中。
这篇数学论文是西方文明史上的一个关键节点。智能化机器整个游戏的的第一步导致了电脑的诞生,而这也是另一个延续了千年的游戏的最后一步。
另一个延续千年的游戏-公理系统
在埃及和巴比伦,测量土地和预测天体运行轨迹的也来源于此,只有牧师和他们选择的工匠有幸了解深奥的计算艺术。在公元前五、六世纪希腊文明的繁荣时期,这些原始科学被塑造成为被称为公理系统。在公理系统中,你从已知为真的前提和已知为有效的规则开始,以产生保证为真的新陈述。按照一定的规则对符号进行处理,可以得出结论。欧几里得几何是通过公理系统实现的通用工具的经典例子。
公理系统是增强人类思维的工具。除了罕见的「lightning」 计算器,人们无法在脑海中运算两个六位数的运算。然而,给几乎所有10岁以上的人一张纸和一支笔,他们会在一分钟之内告诉你答案。让一个小学生变成机械式计算器的神奇之处就是这种一步一步进行计算的方法,这种方法被称为算法 algorithm。我们之所以知道这样的算法是有效的,是因为它们是建立在被称为算术 arithmetic 的形式系统的基础上的,我们知道这是正确的。
Turing 的论文所表达的,以及使数字电脑成为可能的原因,让几千年的努力有了结果,将各种形式的系统归结为一个基本系统,一个构成了所有系统的基础。 科学,我们文明中收集和验证知识的卓越系统,是建立在数学之上的,而数学又是巴比伦人和希腊人的原始数字理论的逻辑形式化。 Computation 计算是试图证明数学真理可以简化为逻辑真理的意想不到的结果。
formal systems
与此同时,由于这些智力系统(科学、数学和逻辑)的结果,我们文明用来预测和理解宇宙的方法变得强大起来,一些人继续问,是否可以将这些相同的智力系统简化为它们的基本组成部分。 如果所有的科学,当他们变得足够先进,可以简化成数学方程式,是否有可能简化数学到最基本的逻辑水平?
由于我们知识系统的完整性和一致性取决于这样的简化的可能性时,当有证据开始显示数学结构中存在例外、异常、悖论(数学中的这些漏洞可能阻止形式系统的任何这种大简化)时,西方思想家开始感到非常不安。 这两个智力探索(即将数学简化为一个基本的、正式的符号系统和试图修补在进行大规模简化过程中出现的悖论)直接但出乎意料地导致了计算 Computation。
在二十世纪的头几十年,数学家和逻辑学家试图将数学形式化。 David Hilbert 和 John von Neumann在 1920s 年制定了形式主义的规则。 在 Hilbert 和 Neumann 之前,Alfred North Whitehead 和 Bertrand Russell 在他们的《数学原理》中证明了人类推理的某些方面可以被形式化描述,从而将这种对数理逻辑的兴趣的觉醒与该领域早已被遗忘的创始人 George Boole 的想法联系起来。 形式系统的概念特别有趣,因为它似乎连接了数学的抽象概念和人类思想的奥秘。
形式系统是一种严格定义的游戏,它指定操作令牌的规则。 制定形式系统的条件非常类似于其他任何游戏的规则。 为了告诉某人如何玩游戏,以及为了使这套规则具有形式系统的资格,游戏的三个相同的方面必须被统一沟通。「令牌的性质,起始位置的描述(或棋盘的起始布局) ,以及在任何给定位置允许的移动的列表。」 西洋跳棋、数学和逻辑是满足这些标准的形式系统的例子。 到了20世纪30年代,为了将数学简化为逻辑上安全,人们多次尝试将算术arithmetic——数学中与数字运算有关的分支——视为一个形式系统。
1936年,24岁的 Alan Turing 向他的同事们指出,数论中的计算可以通过一台机器来进行,从而确立了自己是有史以来最伟大的数学天才之一。 尽管这台机器本身并不是一个工作模型,但 Turing 从一开始就强调这样的机器可以被制造出来。 他的发现是数学形式化努力的里程碑,同时也是计算史上的分水岭。
在对形式主义者提出的一个关键元数学问题的精彩解决方案中,Alan Turing 用精确的数学术语描述了一个操作规则极其简单的自动形式化系统是如何具有非常强大的能力的。 自动形式系统是根据系统的规则自动操作形式系统标记的物理装置。 Turing 的理论机器既是他的计算理论的一个例子,也是某种计算机器实际上可以被构造的一个证明。
当他把数学和逻辑以机器的形式结合在一起时,Turing 使符号处理系统成为可能。 他提出,绝大多数智力问题可以转化为「找到一个数字 n,然后...」 的形式。比起这个将智力问题的抽象概念与更具体的数字领域联系起来的具有挑衅意味的陈述更重要的是,Turing 认识到在这种情况下数字作为符号比作为计算的元素更重要。这一暗示至今仍激励着人工智能研究者的努力。
Turing 最伟大的洞见之一是,从一开始,他就理解了大多数电脑神职人员尚未理解的东西ー数字只是解释自动形式系统内部状态的一种可能方式。Babbage 的「行为模式」现在已经以数学的严格性形式化了。 Turing 的「状态」 为连接人类认知能力和机器的能力提供了至关重要的隐喻。
Turing 问道,人类的符号处理器在进行计算时会做什么? 他认为,心算包括将输入数字转化为一系列中间状态的操作,这些中间状态根据一套固定的规则从一个状态进入另一个状态,直到找到答案。 有时,人们用铅笔和纸来记录他们计算的状态。 数学规则需要更严格的定义而不是那些由形而上学家讨论的杂乱描述的人类精神状态提供的定义,所以 Turing 集中于清晰和明确定义这些状态的方式,以至于描述可以用来指挥机器的操作。
Turing 从精确描述一个形式系统的开始,以「指令表」 的形式,描述了系统中每一个可能的状态配置的步骤。 然后,他证明了这些指令的描述,形式化的公理系统逻辑的步骤,以及在自动化的形式系统中组成「动作」 的机器状态都是相互等价的。 像形式系统和图灵机这样的事情听起来与电脑的实际功能相去甚远,但实际上它们构成了整个数字电脑技术的基础,ー直到 Alan Turing 发表了划时代的论文十多年后,数字电脑才出现。
模仿游戏
Turing 的论文生动形象地描述了计算的过程,他要求读者考虑一种设备,可以在被切分成方块的纸带上读写简单的符号。 「读 / 写头」 可以沿着磁带的任何一个方向移动,一次一个方块,一个控制单元指挥读 / 写头的动作,可以理解关于读和写方块符号的简单指令。 在每个阶段被「扫描或读取」的单个正方形称为活动正方形 active square。想象如果可以在现有磁带的两端添加新的部分,那么它可能是无限的。
假设符号是「X 和 O」, 假设设备在读取活动方块 active square 中的任何一个符号时都可以擦除该符号,并将其替换为另一个符号(例如,擦除 X 并将其替换为 O,反之亦然)。 根据控制单元解释的指令,该设备还具有向左或向右移动的能力,一次移动一个正方形。 指令导致一个符号被擦除、写入或保持不变,这取决于读取哪个符号。
任何的游戏都可以使用这些规则来构造,但是它们不一定都是有意义的。 Turing 证明的第一件事是,考虑到原始操作看起来是多么粗糙和自动化,而在这些规则下构建的一些游戏可以非常复杂精密。 下面的示例说明如何使用此游戏执行简单的计算。
这台图灵机要玩的游戏规则很简单: 给定一段带有 X 和 O 的磁带的起始位置,并指定一个起始方块,这台设备将执行一系列指令所规定的动作,并一次遵循一条指令,直到达到一条迫使其停止的指令。 (如果在特定磁带配置的指令表中没有明确的指令,那么当机器达到该配置时就无法执行任何操作,因此必须停止。)
如果在读取指令时活动方块上有某个符号,则每条指令都指定要执行的特定操作。有四种不同的操作,它们是这个游戏中唯一合法的操作。它们是:
用 X 替换 O;
用 O 替换 X;
向右走一个方块;
向左走一个方块;
指令的一个例子是: 「如果在活动方块上有一个 X,用 O 替换它」 这个指令使机器执行上面列出的第二个动作。为了创建一个游戏 ,我们需要制作一个列表,它指定每一步要遵循的指令的数量以及下一步要遵循的指令的数量。这就好比说机器现在遵循指令7,下一条指令是指令8。下面是一系列的指令,以编码的形式给出,并且翻译得更像英语。综上所述,这些指令构成了一个「指令表或者程序」 ,告诉图灵机如何玩某种游戏。
指令 | 解释 |
---|---|
#1 指令1:如果活动方块上是X,则用O替换,然后执行指令2; | |
#2 指令2:如果活动方块上是O,则向右走一格,然后执行指令3; | |
#3 指令3:如果活动方块上是X,则向右走一格,然后执行指令3; | |
但是如果活动方块上是O,则向右走一格,然后执行指令4; | |
#4 指令4:如果活动方块上是X,则向右走一格,然后执行指令4; | |
但是如果活动方块上是O,则向右走一格,然后执行指令5; | |
#5 指令5:如果活动方块上是X,则向右走一格,然后执行指令5; | |
但是如果活动方块上是O,则向右走一格,然后执行指令6; | |
#6 指令6:如果活动方块上是X,则向左走一格,然后执行指令6; | |
但是如果活动方块上是O,则向左走一格,然后执行指令7; | |
#7 指令7:如果活动方块上是X,则向左走一格,然后执行指令8; | |
#8 指令8:如果活动方块上是X,则向左走一格,然后执行指令8; | |
但是如果活动方块上是O,则向右走一格,然后执行指令1; |
注意,如果在指令 # 1或 # 7的活动方块上有一个O,或者在指令 # 2的活动方块上有一个 X,机器将停止运行。
为了玩指令列表所指定的游戏(运行程序) ,必须提供另一件事: 磁带的初始化配置。对于我们的示例,让我们考虑一个带有两个 X 的磁带,两边由无限的 O 字符串限定。单个磁带的变化状态在这里被描述为一系列的磁带片段,一个在另一个之上。每个的活动方块由大写的X 或 O 表示。当机器启动时,它将尝试执行第一条可用的指令,即指令 # 1。然后将采取以下一系列行动:
指令 | 磁带 | 机器执行的操作 |
---|---|---|
...ooXxooooooo... | 2 个 X 中的 1 个被擦除 | |
...ooOxooooooo... | ||
...oooXooooooo... | 扫描磁带 | |
...oooxOoooooo... | 向右走一格 | |
...oooxoOooooo... | 向右走一格 | |
...oooxoXooooo... | 2个X被写入 | |
...oooxoxOoooo... | 向右走一格 | |
...oooxoxXoooo... | ||
...oooxoXxoooo... | 向左扫描磁带 | |
...oooxOxxoooo... | 另一个原始的X | |
...oooXoXXoooo... | ||
...ooOxoxxoooo... | ||
...oooXoxxoooo... | ||
...oooOoxxoooo... | X 被擦除 | |
...ooooOxxoooo... | 向右扫描磁带 | |
...oooooXxoooo... | 又变成2个X | |
...oooooxXoooo... | 初始时候写入的 | |
...oooooxxOooo... | ||
...oooooxxXooo... | 2个X被写入 | |
...oooooxxxOoo... | ||
...oooooxxxXoo... | ||
...oooooxxXxoo... | 扫描更多的东西 | |
...oooooxXxxoo... | 原始的X | |
...oooooXxxxoo... | ||
...ooooOxxxxoo... | ||
...oooOoxxxxoo... | 机器停止运行,指令7 时候遇到 O |
这个游戏可能看起来相当机械。事实上这个机械的正是 Turing 想要表达的观点之一。如果查看起始位置,请注意有两个相邻的 X,然后看最后的位置,注意有四个 X。如果你使用相同的指令,但是从一盘有五个 X 的磁带开始,你会得到十个 X。这是一个电脑程序规范中的指令列表,它将使输入增加一倍并显示输出。事实上,它可以通过机器来完成。
实质上,每一台图灵机都是将标记从磁带上的一个位置移动到磁带上的另一个位置,就像上面概述的过程将 X 和 O 从一个方块移动到另一个方块一样。 现在,标记可以是微电路中的电子脉冲,磁带可以是存储芯片中的存储位置阵列,但基本思想是相同的。 Turing 证明了他的假设机器是由起始位置(计算开始时磁带上的 O 和 X模式)和规则(指令表给出的指令)指定的形式系统的自动版本。 游戏的步骤是机器的变化状态,这些状态对应于计算的特定步骤。
Turing 随后证明,对于任何形式系统,都存在一个可以被编程模仿它的图灵机。 这种具有模仿任何其他形式系统能力的一般形式系统正是 Turing 的目的。 这些系统现在被称为「通用图灵机」,这一理论最初是发表在一篇令人生畏的标题为《论可计算的数字》的论文中提出的 ,它在可判定性(Entscheidungsproblem)的一个应用中得到了证实。
图灵机是 Turing 为了解决一个关键问题而发明的一个假想设备,这个问题是关于数学基础作为一种形式思维方式。 他展示了他的设备可以解决无限多的问题,但是有一些问题是无法解决的,因为没有办法事先预测机器是否或何时会停止。 这里是元数学和计算之间的背水一战。
我们的加倍程序的简单例子只需要26步。 但是没有办法知道其他程序(可以直接翻译数论中的定理)是否会停止。 通过证明这一点,Turing 对所有的机械系统(也就是说,系统中的程序是确定的,可以由机器执行)提出了一个等价的观点。
Turing 和他的同事们结束了对逻辑上确定的基础的长期研究,他们惊人地发现,关于形式系统的许多重要特征永远无法确定。 形式系统,就其本质而言,有某些固有的局限性。 在这一点上,计算理论已经不仅仅是元数学的一个重要分支,因为形式系统的属性已经淡出人们的视野,机器的属性以一种完全出乎意料和戏剧性的方式出现了。因为与此同时,Turing 限制了形式系统的能力,他表明确实存在一种普遍的形式系统。 从最基本的意义上说,这就是电脑。
通用图灵机模仿其他图灵机的方式就像我们的加倍机器将输入量增加2倍一样自动化。 假设设备的控制单元能够解释简单的指令——这是工具制造者的事情,而不是Babbage时代以来的数学家的事情——那么就有可能编码一个更复杂的描述各种图灵机的指令列表,并把它们连同起始位置一起放到输入磁带上。
正如机器所遵循的指令可以用英语(或德语或法语等)表示,也可以用「7XL8」 这样的缩写形式表示,它们可以用更原始的形式进行编码。 可以使用相同的 X 和 O 来设计代码,这些代码可以惟一地表示每条指令和指令表(程序)。 指令和数据都可以放在同一个磁带上。 然后,通用图灵机可以扫描该编码磁带并执行代码中指定的功能(在我们的例子中,将磁带数据部分的数字加倍)。
这些代码可以由一台机器来解释,这台机器会自动操作这些标记,给出一系列指令和一个起始配置。 当机器停止时,你读取磁带并得到程序的输出。 在这种情况下,您将要翻倍的数字放在起始配置中,然后让机器一次隐喻地清除一个方块,擦除并写入 O 或 X。 当机器停止时,计算最终磁带配置中的 X。
指令清单是将通用图灵机变成加倍机器的关键。 从机械上讲,这两台机器没有区别。 代码所描述的特殊指令是通用图灵机操作系统所依据的。 如果你能用类似可编码的指令描述一台可以翻三倍的机器,或者提取平方根的机器,或者执行微分方程的机器,那么你那愚蠢的老通用图灵机就可以模仿你的三倍机器或者平方根机器。
模仿其他机器的能力导致了电脑的诞生。 磁带上的数字(或者 X 和 O)并不重要。 它们只是过程状态的符号——「双倍游戏」 中的标记指令列表(程序)使机器能够将输入数字翻倍。 使图灵机工作的是指令,而不是记录指令执行方式的符号——是规则,而不是标记。 通用图灵机主要是符号操纵器。 数字电脑是通用的图灵机。
把游戏规则想象成一种机器并不容易。 如果你认为「机械过程」 是如此清晰和明确地定义,以至于机器可以通过引用指令表来执行它们,那么这个任务就会容易一些。 所有通用图灵机都是功能相同的装置,用于遵循指令表规定的程序。 指令表可以不同,他们可以把通用图灵机变成许多不同类型的机器。 由于这个原因,这些程序有时被称为「虚拟机」。
通用图灵机和它能够模仿的许多不同的图灵机之间的区别就像是数字电脑的直接类比。 与通用图灵机一样,所有数字电脑的功能都是相同的。 在最基本的层面上,每一台数字电脑的运行方式都和我们的翻倍机器的运行方式一样。 与其建立一个不同的物理机器来解决不同的问题,更实际的做法是向一个指令跟踪机器描述不同的虚拟机器(程序) ,这些虚拟机器使用这种一次一平方的机械指令跟踪过程,通过一种简单的操作模式来解决复杂的问题。
数字电脑的本质就是遵循指令。 例如,电脑计算器和电脑打字机的区别在于它所遵循的指令ーー它所模仿的虚拟机的编码描述,以便完成一项任务。 由于电脑能够理解“比特” ,这些“比特”可以对应于O 和 X,或者 0 和 1,或者“开”和“关” ,所以你可以用这些符号来写描述,把普通机器变成你想要的特定机器。 这就是程序员的工作。 他们想到了人们可能想要使用的机器,并找到了向一般机器——也就是电脑——描述这些机器的方法。
如果程序员不得不花费所有的时间思考如何用 O 和 X 字符串来描述机器,那么在编程中实现任何重要的目标都将是非常耗时的。 和 X 代码类似于现在所说的机器语言,只有相对较少的程序员能够用它编写程序。 但是,如果可以在虚拟机上构建一个虚拟机会怎样呢? 如果有一个用 O 和 X 编写的编码程序,很像我们描述的加倍机器的系统,除了这个新系统的任务是把人们觉得更容易使用和理解的符号ーー例如「向左转甚至双倍这个数字」 ——翻译成机器语言?
汇编语言
汇编语言是机器语言的近亲,只不过它使用的是可识别的单词,而不是字符串中的 X 和 O。汇编语言比机器语言更易于管理,因此大多数程序员在编写视频游戏或文字处理器时都使用汇编语言。 汇编语言通过使用单词而不是数字,使电脑的存储单元「活动方块」 中的信息更容易处理。 您可以使用上面描述的翻译程序(称为汇编程序)将汇编语言翻译成机器语言。
每一个不同的微处理器(每一台现代电脑核心的实际硅芯片硬件)都有一个大约100个原始机器语言操作的列表,这些操作被称为“固件”。 当汇编程序遵循汇编语言程序中的指令,使用机器语言与微处理器通话时,虚拟机与实际机器相遇,电脑能够完成启动整个过程的人给定的任务。
由于你必须用汇编语言完成任务,非常明确地告诉电脑哪里可以找到你想要的信息,什么时候把它移动到一个称为累加器的「活动方块」中,以及在处理时把它存储在哪里,因此用汇编语言编写任何复杂的东西都可能是一件苦差事——就像写一本带旗语标志的书,或者用码尺测量一个城市。
例如,要在汇编语言中添加两个数字,你必须指定第一个数字是什么,然后将它分配给累加器,然后你必须指定第二个数字,并指示机器将它添加到已经在累加器中的数字。 然后,您必须指定将答案存储在何处,并发出关于如何将答案发送到打印机或显示器的详细说明。
显然,在诸如 BASIC 这样的中完成整个过程要容易得多: 你只需要在键盘上输入一些东西,比如「PRINT 2 + 3」 ,软件的某些部分就会处理累加器和内存地址。 你的打印机打印出5,或者显示在你的显示器上,而电脑不会用它内部操作的细节来打扰你。
每一种电脑程序设计语言的核心都非常类似于翻倍机。 由于描述机器是可能的,根据通用图灵机的游戏规则,也可以编写一个机器语言程序来描述一个可以将汇编语言翻译成机器语言的机器。 完成这些之后,这个新工具可以用来创建另一个比汇编语言更易于管理的通信层次,即创建一个更接近英语的代码语言。
最后虚拟机, 类似英语的那个,被称为高级语言。 高级并不意味着语言在智力上是高级的,只是说我们是一个由低级机器解释的虚拟机器,而这个虚拟机器又可能被一个更低级的机器解释,直到你得到最低级的开关脉冲,将操作系统和 X 转换成电子可读的形式。 和 FORTRAN 以及其他程序员使用的语言实际上是虚拟机,由其他虚拟机向计算机描述,这些虚拟机相当于上面提到的汇编程序,即解释程序和编译程序。
然而,直到1953年,也就是 Turing 的理论论文发表的 17 年后,第一个编译器才被写出来。 基于图灵机原理的数字计算机的出现,是在第二次世界大战的刺激下产生的,那时距离未来还有四年。 1936年,克劳德 · 香农还没有发现乔治 · 布尔为形式化逻辑运算而发明的代数与描述开关电路的数学是一致的。 约翰·冯·诺伊曼和他的同事们还没有设计出存储编程的概念。 维纳没有对控制系统中的反馈电路进行形式化描述。 几项关键的电子技术发展还没有到来。
虽然在20世纪30年代,只有六个数学家思考过这些问题,但是机器的功能取决于它们如何操作的描述,这个概念碰巧有一个现实世界的应用,这个应用在20世纪末突然变得非常重要。 1940年,英国政府对图灵的理论产生了浓厚的兴趣。
二战
破解德国「Enigma」密码
在一代号为「Intrepid」 的情报官员的指挥下,一个代号为「Ultra」的绝密项目俘获了一台名为「Enigma」的德国密码机,并将其带到了伦敦。这台机器使得纳粹最高指挥部能够以无法破解的代码的形式向战地指挥官发送命令。 即使机器在英国人手中,英国情报机构仍然对加密的编码机制感到困惑。 即使是最好的老式密码学家也无法提出有些解决方案。
英国最高统帅部招募了才华横溢的数学家、工程师和逻辑学家,无意中创建了这个领域中一个开创性的研究小组,后来因人工智能而闻名。 当时只有 22 岁的 Donald Michie 就是其中之一,他后来成为英国机器智能研究的领军人物。 另一位非常年轻的是 I. J. Good ,他是一个爱开玩笑的人,曾经写信给女王陛下,建议让他成为王国的贵族,因为那样的话,当他的朋友们看到他来时,就会被迫说: 「Good Lord, here comes Lord Good」 。
这个因 Bletchley Park 知名的地方其实远没有 Omaha Beach 那么有名,但许多历史学家认为,二战中欧洲战场的胜利,在很大程度上,是由一群成功破解了德国密码的思想家在 Hertfordshire 郡一座戒备森严的维多利亚式宅邸中取得的。 这些聪明、年轻、非传统的密码破解者被安置在 Bletchley Park 附近,同时他们在这次绝密行动中扮演着重要的角色, 其中一个密码破译者是28岁的 Alan Turing。
Turing 是个古怪、有趣、衣冠不整、诚实得令人痛苦、飘忽不定、好反省的、才华横溢、优雅脱俗,大部分时候不善交际。 Turing 是一个前期笨拙,后来脱俗的典型的电脑黑客。
他衣着邋遢,下棋热情,喜欢儿童节目,擅长于长跑 (有时候他甚至在腰上绑一个闹钟给自己计时) 。甚至他为数不多的亲密朋友中的一个也这样形容他的演讲:「尖锐的声音、结巴的表达,以及夸张的笑声,使他的朋友们也感到紧张。」
他从未真正学会驾驶汽车,考虑到 Turing 的思维已经远远偏离了道路的实际情况,这反而可能更安全。 他更喜欢剑桥大学里的那辆破旧的自行车, 他骑自行车或者跑二十到三十英里去参加会议的习惯组成了图灵教授的各种轶事,这些事在 Bletchley Park人尽皆知。他有一次因为戴着防毒面具骑自行车到处跑而被当地警察拘留,Truing 说戴防毒面具出行可以缓解了他的花粉热。
Turing 和他在 Bletchley Park 的同事最终破解了「Enigma」 之谜,他们设计了一系列被称为「bombes、Robinsons」的机器,以及一个被称为「Colossus」 的复杂装置。他们的目的? 当然是模仿「Enigma」。
按照 Turing 在 1936 年的定义,Bletchley Park 制造的设备绝不是通用的机器,但它们确实运用了 Turing 思想的重要方面。 解码机于 1943 年开始运作,采用高速装置把编码的指令输送到纸带上,并使用电路对编码的讯息进行简单而乏味的逻辑运算。 这些机器使英国人能够破解「Enigma」密码,部分原因是通过模仿敌人编码机编码。
这些年轻的学术界精英破译了密码,这是一个空前重要的秘密,也许是战争中保守得最严密的秘密,因为 Bletchley 的机器能持续成功破译德国情报的能力其实取决于纳粹最高指挥部不知道他们牢不可破的密码已经被破解了。
尽管这项工作非常重要,但是战时早期的官僚作风和围绕该项目的错综复杂的秘密威胁着取消破译「Enigma」的计划。Turing 直接向 Winston Churchill 提出请求,后者给予这个项目最高优先权。 在整个战争期间,密码继续被破解,在1944年和1945年,这些有价值的情报被伪装成其他类型的情报,然后转发给大西洋上的英国指挥官。
德国 U 型潜艇的冲突被关键性的扭转,主要得益于 Turing 破解了海军版本的「Enigma」密码。德国人一直被蒙在鼓里,而图灵在元数学方面的深奥工作最终被证明具有戏剧性的实际应用。 由于冷战时期先进的密码分析方法的战略意义重大,该项目在战后几十年里一直处于保密状态。 1945年之后,只有极少数人知道 Turing 为战争做出了重要贡献,但没有人确切知道是什么,因为他们仍然不被允许提及这件事。
派往美国
在 Bletchley 的角色并不是 Turing 在战时唯一的贡献。 他被派往美国,与美国情报人员分享英国密码分析方面的关键进展,并将自己的情报用于几个与美国战争相关的科学项目,尽管当时乘坐北大西洋航班很危险。正是在这次美国之行中,Turing 学到了电子学的实用知识。
Turing 首先熟悉了当时被称为「电子真空管」的东西,当时他研究了使用雷达研究中产生的奇特的真空管设备来加速 Bletchley 密码破解器所需的海量信息处理任务的可能性。 在美国,Turing 参与了另一个超机密项目,这一次涉及语音加密——也就是间谍小说中所说的「scramblers / 扰频器」。由于对代号为「Delilah」的设备进行了这项研究,Turing 从业内一些最好的工程师那里学到了电子技术,这些工程师是位于纽约的贝尔实验室的(其中一位名叫 Claude Shannon,他是另一神童)。
战后
到战争结束时,人们知道电子技术可以用来加速逻辑转换电路,以及建立 Turing 通用机器工作模型的可能性,促使英国政府再次支持自动计算装置。 这一次,它不再被称为「分析机」 ,而是被称为「自动计算引擎 Automatic Computing Engine,ACE」。
第二次世界大战结束时,尽管 Mauchly 和 Eckert (ENIAC 的发明者)在美国工作,但英国人在建造第一台真正的电子数字电脑的竞赛中处于有利地位。 但对 Alan Turing 来说不幸的是,战后英国的电脑研究并没有像美国那样积极和规模地进行。
当然,Turing 进行了战后电脑发展的最大努力,但他不是中心,当然也不是控制中心。 事后证明,他英勇而秘密的战争工作使他成为科学政治的牺牲品,而不是科学政治的主人。 他关于 ACE 的硬件和软件设计的报告是雄心勃勃的,如果他最初设想的机器在设计完成时就已经建造好了,那么它将会使 ENIAC 相形见绌。
在国家物理实验室(National Physical Laboratory)和曼彻斯特大学(University of Manchester) ,一连串其他人接管了电脑项目的指导工作,而 Turing 则徘徊在政治权力的边缘,同时他将自己的注意力放在实际建造自己长期幻想的通用机器上。 在这个问题上,他受到了同龄人中流行的观点的阻碍,即剑桥大学中上阶层的理论家根本就不会亲自参与「工程学」 ,但是严格遵守社会标准并不是 Alan 的强项。 他在他所知道的重要领域,软件科学的发展, 取得了进展。
Programming
Turing 关于正确的电脑设计方法的想法强调了在程序中建立计算能力的必要性,而不是硬件。他对编程操作特别感兴趣 。真正有趣的数学运算,并可能「思考」 思考的本身,最终可能由电脑模拟。 虽然按照今天的标准,Turing 在编写程序语言方面的第一次尝试可能会被认为是粗糙的,但他的想法远比当时可用的硬件要先进得多。
当 Turing 的同事和他的美国朋友们争先恐后地把最基本的电子数字电脑模型拼凑在一起的时候,Turing 已经把目光投向了远远超出40年代末和50年代初制造的笨拙的小玩意儿。 他的公开演讲和私人谈话表明了一个强烈的信念,即电子技术的成本将下降,而其作为计算媒介的能力将在未来几十年内增加。 他还认为,这些设备的性能将很快超出其原有的用途。
用于计算数字加倍、提取平方根或破解密码的程序已经是很方便的工具,但是 Turing 意识到计算只是可以被计算设备模仿的形式系统中的一种。 特别是,他看到了他的理论机器的简单「指令表」如何能够成为一种强大的语法的元素,机器可以用来修改自己的操作。
Turing 的一个创新来源于这样一个事实,基于布尔逻辑的电脑只对二进制数字形式的输入进行操作(也就是说,以2的幂表示的数字,只使用两个符号) ,而人类习惯于用十进制书写数字(数字以10的幂表示,使用十个符号)。Turing 参与了编写指令表的工作,这些指令表能够自动将人类的书面小数转换成机器可读的二进制数字。 如果像加法、乘法和十进制到二进制的转换这样的基本操作能够以指令表的形式输入机器,Turing 认为建立这些表的继承是可能的。 程序员将不再需要一步一步地编写每一条操作指令,从而可以自由地编写更复杂的操作程序。
Turing 在战争结束后不久写了一份提案,其中他讨论了他的理想中的机器的硬件和编码原则。 他预见到这些指令表的创建将成为整个过程中特别关键的部分,因为他认识到电脑的最终能力并不总是受到严格的工程考虑的限制,而是受到尚未被称为「软件」的考虑的限制。Turing 不仅预见到了软件工程将比硬件工程更困难、更耗时的事实,还预见到了后来被称为「debugging」 的重要性。
指令表必须由具有计算经验和一定解谜能力的数学家编制。 可能会有很多这样的工作要做,因为每个已知的进程在某个阶段都必须被翻译成指令表格式。 这项工作将在机器正在建设的过程中 whilst,以避免在机器交付和生产的结果之间产生一些延误。 由于实际上看不见的障碍,必然会有延误,因为在一定程度上,最好是让障碍存在,而不是把时间花在根本不存在的设计上(这个过程需要多少年?) 。这个构建指令表的过程应该非常有趣。 它永远不会成为一个真正危险的苦力,因为任何非常机械化的过程都可能被移交给机器本身。
人工智能
除了有几乎同样先进的想法的德国发明家 Konrad Zuse 之外,英美等国的科学家长期不知道,Turing 战后关于建立指令表所固有的逻辑复杂性和数学挑战的著作,是电脑编程艺术和科学的第一个重要步骤。Turing 着迷于创建复杂的编码指令表,但他也对用一种真正复杂的编程语言能做什么感兴趣。 他最初的元数学的形式主义源于他将人类的思维过程与形式系统联系起来的尝试,而 Turing 仍然对自动化形式系统——电脑——有朝一日可能模仿人类推理方面的可能性充满兴趣。
关于通用机器的能力,Turing 提出的最深刻的问题集中在这个假设的未来电脑引擎模拟人类思想的能力。 如果有一天机器可以帮助创建它自己的程序,那么机器是否有能力,甚至在原则上,执行类似于人类思维的活动呢?
他1936年的论文发表在一本数学杂志上,但是它最终为超越数学视野的一个全新的研究领域——计算机科学——奠定了基础。 1950年,Turing 发表了另一篇影响深远的文章,这篇文章更简单地命名为「Computing Machinery and Intelligence 计算机器与智能 」 ,发表在哲学期刊《Mind》上。 用相对较少的话来叙说,使用的工具不比常识更深奥,也绝对没有数学公式, Turing 开创了电脑科学中最大胆的子专业——人工智能领域。
尽管 Turing 的假设机器很简单,但是数学杂志上的正式描述让人读起来很费劲。 然而,这篇 1950 年的文章值得任何对人工智能感兴趣的人阅读。 毫无疑问,第一句话听起来仍然像 Turing希望的那样直接和具有挑衅性。「I propose to consider the question 'Can machines think?' 」 「我建议考虑‘机器能思考吗这个问题」
图灵测试
在典型的 Turing 风格中,他通过描述一个游戏开始了他对人工智能深层问题的思考。他把这个叫做「图灵测试」 ,但历史上却把它叫做「The Imitation Game/模仿者游戏」。他写道,让我们从抛开机器智能的问题开始,考虑一个由三个人玩的游戏。一个男人、一个女人和一个询问者,他们分别坐在一个房间里。 这个游戏的目的是向另一个房间里的人提问,并最终确定哪一个是男人,哪一个是女人。 为了掩饰演员的外表、声音和其他感官线索,询问通过电传打字机进行。
然后 Turing 要求我们用一台机器代替一个不知名的玩家,并为游戏制作一个新的对象。这一次,询问者要根据对话进行猜测,另一个房间的是一个人,还是一个机器。 在描述如何进行这样的对话时,Turing 引用了这样一个对话的一个简短的样本。
请注意,如果这个对话框是一台机器,它能够算错加法(39457 + 7064 不等于 105621) ,同时还能同一时间下象棋。
在确立了他的模仿游戏作为判断机器是否智能的标准之后,在着手考虑各种反对人工智能的观点之前, Turing 解释了他自己对这个问题的看法。
我相信在大约50年的时间里,将有可能给电脑编程,... 使它们能够很好地运行模仿游戏,以至于一个普通的询问者在5分钟的询问之后,不会有超过70% 的机会做出正确的识别。 最初的问题是,「机器能思考吗?」我认为太没有意义了,不值得讨论。 尽管如此,我相信在本世纪末,语言的使用和受过教育的观点将会发生很大的变化,人们将能够谈论机器思考而不期望它被反驳。
在论文的其余部分,Turing 对人工智能的可能性提出了一些主要的反对意见。Turing 给出的这些反对标题揭示了他异想天开的特质。
"The Theological Objection,"
"The 'Heads in the Sand' Objection,"
"The Mathematical Objection,"
"Lady Lovelace's Objection,"
"The Argument from Consciousness,"
"Arguments from the Continuity in the Nervous System,"
"The Argument from Informality of Behavior,"
"The Argument from Extrasensory Perception."
在这篇论文中,Turing 通过反驳 Ada 在评论中提出的反对意见,证明了他对自己在这个领域的知识渊源的了解。 它可以做任何我们知道如何命令它执行的事情。 Turing 指出,如果 Ada 像他一样,看到证据表明电子设备可以展示一种原始的“学习”形式,那么她可能会用不同的方式说话。通过这种形式,程序最终可以掌握那些从未经过专门编程的任务,但这些任务是通过预先编程的反复试错技术而产生的。
逝世
Turing 在电脑、数学和其他领域的工作因他于1954年6月不幸去世而中断,享年42岁。 除了是个天才,图灵还是个同性恋。 20世纪50年代初,在两名同性恋间谍叛逃到苏联之后,英国的社会环境对于任何被发现从事被禁止的性行为的人来说尤其恶劣,尤其是对于那些头脑中有着比雷达或原子弹更加机密的东西的人来说。 Turing 因“严重猥亵罪”被逮捕并判处缓刑,条件是他必须接受羞辱性的、使身体虚弱的女性荷尔蒙注射。 Turing 在战争中记录仍然太过机密,甚至不能在他的辩护中提及这些贡献。
Turing 忍受了荷尔蒙注射和公众舆论的耻辱,悄悄地开始为生物学数学基础方面的另一个杰出工作周期奠定基础。如果这些工作如果完成的话,可能会比他在可计算数字方面的工作产生更为重大的影响。 在 Turing 被捕后的近两年时间里,同性恋恐惧症和国家安全的压力变得更加强大。具有讽刺意味的是,Turing 正是被他在战时极力维护的政府所毁灭。1954年6月,Alan Turing 躺在床上,咬了一口浸了氰化物的苹果。
和 Ada 一样,Alan Turing 的不寻常也是他失败的原因之一,和她一样,他看到了软件的可能性,这种可能性远远超出了当时可用的计算机器的极限。 和她一样,他也死得太早了。
同时期其他的战时的研究项目和另外一些杰出的数学家都注意到了 Turing 的工作,尤其是在美国,那里的科学家突然进入了核时代。 大西洋两岸由军方资助的研发团队继续在他们自己的数字电脑上工作。 这些独立的研究工作中有一些是从弹道学工作中发展出来的,其他人则与制造第一批核裂变和核聚变炸弹的努力有关。
Babbage 和 Turing 之间已经过去了一百多年。 如果第二次世界大战没有提供顶尖的工程团队,没有几乎无限的资金,没有在数学史上计算理论使电脑成为可能时将科学发现应用于现实问题的意愿,电脑时代可能会被推迟几十年。 虽然这个想法毫无疑问会在后来的人脑中产生共鸣,但是一旦 Turing 解释了计算,电脑的发展就是一个不可避免的工程步骤。
当一个同样有才华,甚至更有天赋的思想家碰巧发现了Turing一直在追求的想法时,Turing 的理论洞察力转化为可行的机制并不是偶然的。 计算理论是一个非常重要的步骤—— 但是如果你被限制在一个盒子里,沿着一个磁带,擦除操作系统,写 X,那么你就不能在相当短的时间内完成非常复杂的计算。 软件和硬件历史的下一步是由另一个独一无二的、可能是编程史上不可或缺的人物——John von Neumann 的想法促成的。
二战前,Turing 曾与 von Neumann 在普林斯顿高等研究院共事。 von Neumann 希望这位年轻的天才继续留在他身边,做他的学徒和助手,但 Turing 回到了剑桥。 von Neumann 对 Turing 工作意义的深刻理解后来成为不同研究路线汇聚的重要因素,导致了第一台数字电脑的发明。
人类培养出像 von Neumann 这样的博学者,然后让他在人类历史上最大的危机中工作,这种情况并不常见。 von Neumann 不仅仅是 Turing 思想的布道师,他还在数学家的抽象概念和试图创造第一代电子计算机的人们的实际关注之间架起了桥梁。 他是为第一台电子计算机设计软件和为计算机的物理结构创建模型的团队中的关键成员。 他还为 Turing 创造一门真正的编程语言的第一步增添了优雅和力量。