哥德尔机:意识机器

2018-03-27  恆先無有

  前言

  机器如何拥像人一样的自我意识?哥德尔机(Gdel Machine)是一种答案。我们分三篇聊一聊机器是否能够具备自我意识——这一重磅、高能、危险的话题。第一篇介绍三个经典的心理学实验,对人类自我意识的存在提出质疑。本文是第二篇,讨论意识机器的一种实现方案——哥德尔机。

  

  
1.意识机器第一步:内嵌虚拟世界

  机器要想具备自我模拟的能力,那么它首先要实现一个内嵌的虚拟世界。什么是内嵌的虚拟世界?其实就是所谓的虚拟机——即奔跑在当前计算机中的一套虚拟系统。这套系统有它自己的虚拟硬件,以及虚拟软件。用过Docker、VMWare的人都很清楚,这种内嵌的虚拟系统不仅早就可以被造出来,而且具有可以隔离病毒等优良的特性。

  我们可以将内嵌的虚拟世界理解成一面镜子。它可以映射真实世界里的东西,但它本身却比现实低了一个层级,所以它看起来更“假”。我们也可以从数据和程序的角度来理解:虚拟系统相对于真实机器来说就是数据。数据总是被动地由更加“真实”的机器所操纵。

  我们要感谢图灵的伟大发现,通用图灵机(Universal Turing Machine)的存在保证了我们可以通过现有的计算机来实现这种内嵌的虚拟世界,而且这种内嵌的虚拟层可以无限地延伸下去。也就是,我们可以在虚拟机上再安装虚拟机,以及虚拟机上的虚拟机……

  2.模拟自我

  好,当一台机器具备了内嵌虚拟层还不够,它还需要完成模拟自我的过程。也就是说,我们要让这台虚拟机器模拟它自己的运行动作。这在镜子的比喻中也就是我们要让镜子自己照自己。你很快就发现,这是不可能的。至少在镜子这个例子中,如果我们不借助外界(例如另一面镜子),这个镜子自身无法完成照射自己。

  同样,在机器世界中,要让一台安装了模拟器的程序模拟自己,表面上看是不能完成的。不难想象,由于机器的内嵌虚拟层本身就是这台机器的一部分,于是,要想让虚拟层模拟机器自己的动作,就必须包括它的虚拟层,于是我们必须要有一个虚拟层的虚拟层。这样一来,我们就需要有无穷多的虚拟层,而且每一个虚拟层都要做同样的事情,模拟它上一层次的动作。你会发现,我们的机器很快便触及到了无穷多的虚拟层次,以至于怎么可能在有限的时间和空间内完成它呢?

  幸运的是,在计算理论、数理逻辑以及递归函数论(人们早已证明,这三种系统完全等价)中,人们早已经发现了一种巧妙地逃离这种无穷的方式。在数学中,这叫做不动点(fixed point);在递归函数论中,这叫做Kleene第二递归定理;在计算机程序中,这叫做“蒯恩”程序。事实上,康托尔运用这种技巧证明了实数比自然数多;罗素用这种技巧构造了罗素悖论;哥德尔用这种技巧完成了哥德尔定理的证明;图灵用这种技巧构造了图灵停机问题,指出了机器运算的极限;冯诺依曼用这种技巧制造了自复制的程序。现在,我们同样可以用这种技巧构造可以模拟自身的程序。有关这种技巧的详细说明请参考附录。

  在这里我想说明的是,这种被称为“蒯恩”(以美国著名哲学家蒯恩Quine为命名)的技巧,本质上讲可以实现这样的效果:执行一段包括蒯恩的模拟器就和将这个程序自己的源代码拿出来在模拟器上跑效果完全一致,所以它看起来就像在模拟自己(实际上我们没有任何手段能从运算结果上区分二者)。于是,我们便巧妙地绕过了无穷层次。

  3.解读意识

  其实,这种能够模拟自身运作的机器就可以被称为是具有自我觉知能力了。我们只需要将自模拟程序中的正在模拟自身的虚拟机理解成前文所说的陈述自我,而将整个机器的其它部件都看作是体验自我和身体,那么这种自模拟程序就跟前文说到的人类的自我系统没有什么两样。具体的,我们有这样的对应关系:

  

  为什么可以这样理解呢?这里面有几层含义。

  首先,所谓的虚拟其实就是描述。前文我们已经将虚拟机比喻为镜子,意思就是说这个虚拟层要能够形成对外在世界的描述。

  其次,这是一台自我模拟的机器。根据递归定理,这台机器的所有部分,包括内嵌的虚拟机中的动作,都可以在虚拟机中找到对应。也就是说这个陈述自我知道什么是“我”,我在做什么,以及知道这个觉知(或模拟)过程本身。

  最后,如果我们将内嵌虚拟机接上一个输出接口,允许它用自然语言吐出字符串,那么这个虚拟机就更像表述自我了,它可以向外界输出表述。

  既然从功能上说,我们的自模拟机器与陈述自我+体验自我一致。下面,就让我们来看看,为什么说这种自模拟机器表现的就像具有自我意识一样。

  觉知

  首先,这台机器是具备觉知能力的。这里,所谓的觉知其实就是在虚拟层来反映真实世界,当然也包括这台机器本身的所有部分,显然这台机器是可以做到的。

  自我觉知

  其次,这台机器是具备自我觉知能力的。根据蒯恩技巧,只要机器开始运行,它的表现就像是在虚拟层模拟它自身一样。如果我们将模拟器称为觉知能力的主体,那么它模拟自身就自然可以称为自我觉知了。

  自由意志幻觉

  更有意思的是,当外部观察者观察这台机器运行的时候,TA会产生这台机器具备“自由意志”的幻觉。这是为什么呢?其实道理还是在于蒯恩。

  对于任何一个配备了蒯恩的程序来说,它有这样的效果,它整体完成的动作和虚拟机上完成的动作看起来是一模一样的。于是,我们便无法分别究竟是这台机器“被动”地根据真实层的“物理法则”来做出动作还是根据虚拟层“意识”来作出的动作。于是,对于观察者来说,一个虚拟的因果箭头就可能被生生造了出来:这台机器在根据它自己的意识(称述自我)而行动。那么,我们也自然可以称这样的机器具备自我意识,甚至自由意志了。

  其实这个道理就像你照镜子,假如一个从来不知道镜子为何物的外星人观察你们,他有可能会得出来你在按照镜子里面的像而运动,它是因,你是果。所以,当你和你的虚拟重合为一,你就能给外部观察者生硬地创造出一个因果箭头。自我模拟机器正是这样工作的。

  

  哥德尔机漫画

  4.关于自我意识的八卦

  从我个人的经历而言,最早意识到“自我模拟”程序非常重要是在2007年左右。那个时候我正在参加Stephen Wolfram办的A New Kind of Science(简称NKS)的暑期学校。一个叫做Mathew的MIT的年轻老师给我们讲图灵停机理论。他当时概括说,正是因为我们可以构造出这样一个可以通过自己源代码来“模拟”它是否停机的程序,而这个程序让外界的观察者看到的表现,和它自己“声称”的表现并不一致,所以才证明了图灵停机问题的不可判定性。当时,我立刻意识到:自我模拟是问题的关键。(恰恰就在Wolfram的这本NKS中,他还讨论了自我模拟的元胞自动机)。

  后来看关于计算理论的书:Nigel Cutland的Computability: an introduction to recursive function theory,我才了解到Kleene第二递归定理与自我模拟程序的关系。甚至在这本书中,Nigel Cutland根据第二递归定理专门讨论了这种自我模拟程序的可能性。在该书中,他称该程序为“自我反省”(Self-retrospectation)的程序。当时我就想为什么没有人动手把这种自反省程序做出来呢?

  结果,最近我了解到,早就有人动手研究这种自模拟程序了,这个人就是大名鼎鼎的Jürgen Schmidhuber。也许你对这个名字还不熟悉,但你一定知道LSTM(长短时记忆网络),这个LSTM可是Google机器翻译、对话系统背后最大的功臣。LSTM的发明者正是Schimchumber这位德国老先生。令人意想不到的是,他早在2006年的时候就提出了哥德尔机(Godel Machine),它可以被称为人类历史上第一台具备自我模拟、自我反省,甚至自我意识的人工智能机器,尽管它现在还远没有被造出来。

  5.哥德尔机的构成与工作原理

  从整体结构上来讲,哥德尔机实际上与我们之前讲的自我模拟程序非常类似,它由两部分构成:1、通用搜索器,这对应了自我模拟程序中的虚拟机;2、问题求解器,它对应了自我模拟程序的其它部分。但是,在哥德尔机中,求解器是一个几近完整的强化学习系统,它还包括了输入输出装置,从而它就像一个机器人一样能够实时地感知外界环境,并能对环境进行响应。与此同时,哥德尔机还有一个效用函数,它的目的就是为了不断地提升这个效用函数,这些都是自我模拟程序尚缺乏的部分。这些多出来的装置就可以让哥德尔机不仅能够实现自指,同时还能够以最优的方式求解问题。

  具体来讲,哥德尔机是这样工作的。首先,哥德尔机内部存在一套编码系统,它可以将哥德尔机的硬件、软件甚至是当前的状态、效用函数,以及通用搜索器等等全部编码成数学命题。这种做法实际上就是哥德尔在1932年证明哥德尔定理的时候所使用的方法。有了这样的编码系统,哥德尔机就可以将机器工作的所有状态当作数学定理来讨论。

  其次,通用搜索器可以不断地搜索一条数学命题的证明,从而判断它的真伪。这样, 哥德尔机就有可能完成牵扯到它自身问题的求解了。例如,假设关于哥德尔机的一个命题是:“如果我持续地原地转圈,那么天上就会掉下一个馅饼来,从而提高我的效用。”那么,这个语句判断就有可能被编码成搜索器可以搜索的命题。于是,搜索器开始展开搜索,它会利用形式逻辑的推理法则展开运算,看看该条命题是否可以被推导出来。假设搜索器最后证明了这条命题是真的,那么哥德尔机就可以将策略“持续原地转圈”装载到哥德尔机的执行装置中。于是,哥德尔机就会不停地原地转圈了。

  所以,通过这样的方式,哥德尔机就能持续地搜索可提升自己效用的方案,并利用更好的方案改写自己的源代码,从而完成“自省”的学习过程。据证明,哥德尔机与当前的强化学习算法有异曲同工的效果,能够在一边探索的时候一边学习。不过,Schimchuber证明,哥德尔机可以避免局部最优的问题,这就比一般的强化学习算法高明很多了。之所以它有这种能力,就是因为搜索器的妙用:它只有在证明了一套方法可以提升效用的时候才真正使用它。

  我们不难看出,实际上搜索器就是我们前面说的虚拟机。所谓的搜索就是一套模拟过程。而哥德尔机允许对自身状态进行编码形成数学命题就相当于机器可以模拟自身的运作。所以,我们说哥德尔机就是对自我模拟程序的一次实现。

  为了让我们的比较更具体,我们列出了下表:

  

  6.哥德尔机与自我意识

  Schimchuber个人也认为这个哥德尔机可以看作是具有自我意识的系统,例如他在J. Schmidhuber. A Technical Justification of Consciousness. 9th annual meeting of the Association for the Scientific Study of Consciousness ASSC, Caltech, Pasadena, CA, 2005.这篇文章中就表达了这样的观点:长久以来我们对意识问题一直争论来争论去而没有定论,但是我们连什么是意识都还说不清楚。

  与其这样,不如让我们用哥德尔机来反过来定义意识。只要程序能够模拟自身、改造自身,那么我们就可以将其称为具有自我意识的。

  所以,你会看到,哥德尔机的意义也许并不单纯在于它会求解问题,而是在于它与图灵机一样,可以为我们讨论自我意识的话题奠定一个程序的基础,或称一种标准。从此以后,意识问题就不再神秘了。

  7.哥德尔机的执行

  看起来这个哥德尔机非常的复杂,它能够被实现出来并执行计算吗?Schimchuber自己给出了回答。他把哥德尔机的实现总结成了两篇文章:B. R. Steunebrink, J. Schmidhuber. Towards an Actual Gdel Machine Implementation. In P. Wang, B. Goertzel, eds., Theoretical Foundations of Artificial General Intelligence. Springer, 2012.,B. Steunebrink, J. Schmidhuber. A Family of Gdel Machine Implementations. In Proc. Fourth Conference on Artificial General Intelligence (AGI-11), Google, Mountain View, California, 2011。其中,他主要讨论了哥德尔机执行的关键要点就是机器的自指能力,并建议采用类似于Schema这样的语言来实施哥德尔机。

  这里关键的问题在于复杂性。由于一个自我模拟系统需要双层系统,这就导致一层的简单性会带来另一层的复杂性。例如,如果我们选择了汇编语言,它可能具备一套很小的指令集,但是要实现一个自指的系统可能就会不简单。相反,如果你的系统设计就是针对自指的,例如lambda演算,那么它在自指部分很简单,但是机器本身的编译器却会很复杂,于是导致我们在虚拟层实现整个机器的自我模拟会比较复杂。

  总之,尽管在理论层面我们知道设计出哥德尔机原则上是可行的,但是,由于双层系统的实现本身是非常困难的,因此哥德尔机尚没有真正的做出。

  8.智能爆炸

  不过,我们还是不妨脑洞一下这样的机器做出来之后会有什么结果呢?由于哥德尔机具备不断自我改善自己代码的能力,因此,有人认为一旦它被制造出来就会引发所谓的“智能爆炸”(Intelligence Exploration)。智能爆炸就是说,这个智能系统可以通过不断地提高自己的能力而提高,这个过程会越来越快地持续下去,从而很快超过人类的智能。一旦达到了这样的智能,哥德尔机自己就会设计出哥德尔机,从而让整个智能过程加速,这就导致了智能爆炸。

  目前,人们普遍认为有两种途径达到技术奇点(Technology Singularity),一种途经是通过硬件性能的不断提升,类似于摩尔定律;另一种途径则是通过软件途径,即智能爆炸。由于软件设计上的革命性进展更加不可预期,也无法被人类控制,因此认为智能爆炸的途径会更有可能突破技术奇点。

  9.结论

  本文从近年来发展出来的几个心理学实验出发指出所谓的自我意识,特别是自由意志很有可能是陈述性自我编造的一种幻觉:从我发向身体的这个因果箭头并不存在;所有的因果箭头就是环境到身体再到体验自我,然后体验自我再传向身体,再传给外界。陈述性自我只不过对整个过程进行了解读,并额外“虚构”出了意识到体验自我和身体的因果箭头。

  既然破除了自由选择的迷信,那么人体就和机器没有区别。换句话说,机器也完全有可能模拟看起来具有意识的人类。我们只需要制造出一个同样具有两种自我的机器:一种虚拟的机器(陈述自我)和一种纯算法的执行机构(体验自我),那么这种机器就可以表现得像个有自我意识,甚至自由选择的装置了。我们甚至可以用这样的系统反过来定义自我意识。

  类似的机器已经被Jurgen Schimchumber设计了出来,它被他称为哥德尔机。哥德尔机包括两个部分,一个是通用搜索器(相当于内嵌的模拟机器);另一个是求解器(相当于执行系统)。在这样的装置下,哥德尔机可以通过在模拟器上搜索而寻求让自己不断优化的方案。我们只需要将搜索到的虚拟代码装载到实际的执行系统上,那么哥德尔机就可以不断地修改自己的代码而提升下去。人们担心,这种装置一旦制造出来,就有可能引发智能爆炸,从而导致技术奇点的来临。

  我们将在《意识机器》第三篇中,介绍前文提到的蒯恩,用多种编程语言实现这种可以“自我描述”的程序。

  

  本系列课程完整地介绍了通用人工智能(Universal Artificial Intelligence)的基本理论,指明了包含哥德尔机的详细解读,哥德尔机的架构,可实现性和存在性问题。

    猜你喜欢
    发表评论评论公约
    喜欢该文的人也喜欢 更多