图灵机的组成部分_图灵机的模型介绍

人工智能

629人已加入

描述

图灵机的组成:

1.一条无限长的纸带 TAPE。纸带被划分为一个接一个的小格子,每个格子上包含一个来自有限字母表的符号,字母表中有一个特殊的符号 表示空白。纸带上的格子从左到右依此被编号为 0,1,2,。.. ,纸带的右端可以无限伸展。

2.一个读写头 HEAD。该读写头可以在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号。

3.一套控制规则 TABLE。它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。

4.一个状态寄存器。它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态。参见停机问题。

关于图灵机的模型介绍

图灵机的模型介绍虽然有些无趣,不过请坚持看下去,我会在下面运用大家比较好理解的形式重新解释的。在这里你仅仅需要认识它的轮廓。一个图灵机是形如下面的一个装置:

这个装置由下面几个部分组成:一个无限长的纸带,一个读写头。(中间那个大盒子),内部状态(盒子上的方块,比如A,B,E,H ),另外,还有一个程序对这个盒子进行控制。这个装置就是根据程序的命令以及它的内部状态进行磁带的读写、移动。它工作的时候是这样的:从读写头在纸带上读出一个方格的信息,并且根据它当前的内部状态开始对程序进行查表,然后得出一个输出动作,也就是是否往纸带上写信息,还是移动读写头到下一个方格。程序也会告诉它下一时刻内部状态转移到哪一个。

具体的程序就是一个列表,也叫做规则表,是这样的:

当前内部状态s 输入数值i 输出动作o 下一时刻的内部状态s‘

B 1 前移C

A 0 往纸带上写1 B

C 0 后移A

… … … …

因此,图灵机只要根据每一时刻读写头读到的信息和当前的内部状态进行查表就可以确定它下一时刻的内部状态和输出动作了。

图灵机就是这么简单!不可思议吧?而只要你变化它的程序(也就是上面的规则表),那么它就可能为你做任何计算机能够完成的工作。因此可以说,图灵机就是一个最简单的计算机模型!

也许,你会觉得图灵机模型太简单,怎么可能完成计算机的复杂任务呢?问题的关键是如何理解这个模型。
#p##e#

如何理解图灵机?

1、小虫的比喻

我们不妨考虑这样一个问题。假设一个小虫在地上爬,那么我们应该怎样从小虫信息处理的角度来建立它的模型?

首先,我们需要对小虫所在的环境进行建模。我们不妨就假设小虫所处的世界是一个无限长的纸带,这个纸带上被分成了若干小的方格,而每个方格都仅仅只有黑和白两种颜色。很显然,这个小虫要有眼睛或者鼻子或者耳朵等等感觉器官来获得世界的信息,我们不妨把模型简化,假设它仅仅具有一个感觉器官:眼睛,而且它的视力短得可怜,也就是说它仅仅能够感受到它所处的方格的颜色。因而这个方格所在的位置的黑色或者白色的信息就是小虫的输入信息。

另外,我们当然还需要为小虫建立输出装置,也就是说它能够动起来。我们仍然考虑最简单的情况:小虫的输出动作就是往纸带上前爬一个方格或者后退一个方格。

仅仅有了输入装置以及输出装置,小虫还不能动起来,原因很简单,它并不知道该怎样在各种情况下选择它的输出动作。于是我们就需要给它指定行动的规则,这就是程序!假设我们记小虫的输入信息集合为I={黑色,白色},它的输出可能行动的集合就是:O={前移,后移},那么程序就是要告诉它在给定了输入比如黑***况下,它应该选择什么输出。因而,一个程序就是一个从I 集合到O 集合的映射。我们也可以用列表的方式来表示程序,比如: 程序1:

输入输出

黑色前移

白色后移

这个程序非常简单,它告诉小虫当读到一个黑色方格的时候就往前走一个方格,当读到一个白色方格的时候就后退一个格。

我们不妨假设,小虫所处的世界的一个片断是:黑黑黑白白黑白……,小虫从左端开始。 那么小虫读到这个片断会怎样行动呢?它先读到黑色,然后根据程序前移一个方格,于是就会得到另外一个黑色信息,这个时候它会根据程序再次前移一个方格,仍然是黑色,再前移,这个时候就读到白色方格了,根据程序它应该后退一个格,这个时候输入就是黑色了,前移,白色,后移……,可以预见小虫会无限的循环下去。

然而,现实世界中的小虫肯定不会这样傻的在那里无限循环下去。我们还需要改进这个最简

单的模型。首先,我们知道小虫除了可以机械地在世界上移动以外,还会对世界本身造 ……

开始

成影响,因而改变这个世界。比如虫子看到旁边有食物,它就会把那个东西吃掉了。在我们这个模型中,也就相当于我们必须假设小虫可以改写纸带上的信息。因而,小虫可能的输出动作集合就变成了:O={前移,后移,涂黑,涂白}。这个时候,我们可以把程序1改为比如: 程序2:

输入输出

黑前移

白涂黑

纸带是黑黑白白黑……,小虫会怎样行动呢?下面的图表示出了这个例子中每一步小虫的位置(标有圆点的方格就是小虫的当前位置),以及纸带的状况。

开始:小虫在最左边的方格,根据程序的第一行,读入黑色应该前移。

第二步:仍然读入黑,根据程序的第一行,前移。

第三步:这个时候读入的是白色,根据程序的第二行,应该把这个方格涂黑,而没有其他的动作。假设这张图上方格仍然没有涂黑,而在下一时刻才把它表示出来。

第四步:当前方格已经是黑色的,因此小虫读入黑色方格,前移。

第五步:读入白色,涂黑方格,原地不动。

第六步:当前的方格已经被涂黑,继续前移。

第七步:读入黑色,前移

小虫的动作还会持续下去……。我们看到,小虫将会不停的重复上面的动作不断往前走,并会把所有的纸带涂黑。

显然,你还可以设计出其他的程序来,然而无论你的程序怎么复杂,也无论纸带子的情况如何,小虫的行为都会要么停留在一个方格上,要么朝一个方向永远运动下去,或者就是在几个方格上来回打转。然而,无论怎样,小虫比起真实世界中的虫子来说,还有一个致命的弱点:那就是如果你给它固定的输入信息,它都会给你固定的输出信息!因为我们知道程序是固死的,因此,每当黑色信息输入的时候,无论如何它都仅仅前移一个方格,而不会做出其他的反应。它似乎真的是机械的!

如果我们进一步更改小虫模型,那么它就会有所改进,至少在给定相同输入的情况下,小虫会有不同的输出情况。这就是加入小虫的内部状态!我们可以作这样的一个比喻:假设黑色方格是食物,虫子可以吃掉它,而当吃到一个食物后,小虫子就会感觉到饱了。当读入的信息是白色方格的时候,虽然没有食物但它仍然吃饱了,只有当再次读入黑色时候它才会感觉到自己饥饿了。因而,我们说小虫具有两个内部状态,并把它内部状态的集合记为:S={饥饿,吃饱}。这样小虫行为的时候就会不仅根据它的输入信息,而且也会根据它当前的内部状态来决定它的输出动作,并且还要更改它的内部状态。而它的这一行动仍然要用程序控制,只不过跟上面的程序比起来,现在的程序就更复杂一些了,比如:

程序3:

输入当前内部状态输出下时刻的内部状态

黑饥饿涂白吃饱

黑吃饱后移饥饿

白饥饿涂黑饥饿

白吃饱前移吃饱

这个程序复杂多了,有四行,原因是你不仅需要指定每一种输入情况下小虫应该采取的动作,而且还要指定在每种输入和内部状态的组合情况下小虫应该怎样行动。看看我们的虫子在读入黑白白黑白……这样的纸带的时候,会怎样?仍然用下面的一系列图来表示,灰色的圆点表示饥饿的小虫,白色的圆点表示它吃饱了。为了清晰,我们把小虫将要变成的状态写到了图的下一行。

假定它仍然从左端开始,而且开始的时候小虫处于饥饿状态。这样读入黑色,当前饥饿状态,根据程序第一行,把方格涂白,并变成吃饱(这相当于把那个食物吃了,注意吃完后,小虫并没动)。

第二步:当前的方格变成了白色,因而读入白色,而当前的状态是吃饱状态,那么根据程序中的第四条前移,仍然是吃饱状态;

第三步:读入白色,当前状态是吃饱,因而会重复第二步的动作。

涂白方格,变成吃饱

前移,仍然吃饱

前移,保持吃饱

第四步:仍然重复上次的动作。

第五步:读入黑色,当前状态是吃饱,这时候根据程序的第二行应该后移方格,并转入饥饿状态;

第六步:读入白色,当前饥饿状态,根据程序第三行应该涂黑,并保持饥饿状态(各位注意,这位小虫似乎自己吐出了食物!);

第七步,读入黑色,当前饥饿,于是把方格涂白,并转入吃饱状态(呵呵,小虫把刚刚自己吐出来的东西又吃掉了!)。

第八步,读入白色,当前吃饱,于是前移,保持吃保状态。

这时候跟第四步的情况完全一样了,因而小虫会完全重复5、6、7、8步的动作,并永远循环下去。似乎最后的黑色方格是一个门槛,小虫无论如何也跨越不过去了。

小虫的行为比以前的程序复杂了一些。尽管从长期来看,它最后仍然会落入机械的循环或者无休止的重复。然而这从本质上已经与前面的程序完全不同了,因为当你输入给小虫白色信息的时候,它的反应是你不能预测的!它有可能涂黑方格也有可能前移一个。当然前提是你不能打开小虫看到它的内部结构,也不能知道它的程序,那么你所看到的就是一个不能预测的满地乱爬的小虫。如果小虫的内部状态数再增多呢,那么它的行为会更加的不可预测! 好了,如果你已经彻底搞懂了我们的小虫是怎么工作的,那么你已经明白了图灵机的工作原理了!因为从本质上讲,最后的小虫模型就是一个图灵机!
#p##e#

2、如何理解图灵机模型

刚才用小虫说明了图灵机的工作原理,相信你的第一个反映就是,这样的模型太简单了!他根本说明不了现实世界中的任何问题!下面,我就要试图说服你,图灵机这个模型是伟大的! 首先,我想说的是,其实我们每一个会决策、会思考的人就可以被抽象的看成一个图灵机。 前移,保持吃饱

涂白,转入吃饱

前移,保持吃饱

后移,变成饥饿

涂黑,保持饥饿

为什么可以做这种抽象呢?首先我们可以考虑扩展刚才说的小虫模型。因为小虫模型是以一切都简化的前提开始的,所以它的确是太太简单了。然而,我们可以把小虫的输入集合、输出行动集合、内部状态集合进行扩大,这个模型就一下子实用多了。首先,小虫完全可以处于一个三维的空间中而不是简简单单的纸带。并且小虫的视力很好,它一下子能读到方圆500米的信息,当然,小虫也可以拥有其他的感觉器官,比如嗅觉、听觉等等,而这些改变都仅仅是扩大了输入集合的维数和范围,并没有其他更本质的改变。同样道理,小虫可能的输出集合也是异常的丰富,它不仅仅能移动自己,还可以尽情的改造它所在的自然界。进一步的,小虫的内部状态可能非常的多,而且控制它行为的程序可能异常复杂,那么小虫会有什么本事呢?这就很难说了,因为随着小虫内部的状态数的增加,随着它所处环境的复杂度的增加,我们正在逐渐失去对小虫行为的预测能力。但是所有这些改变仍然没有逃出图灵机的模型:输入集合、输出集合、内部状态、固定的程序!就是这四样东西抓住了小虫信息处理的根本。

我们人能不能也被这样的抽象呢?显然,输入状态集合就是你所处的环境中能够看到、听到、闻到、感觉到的所有一起,可能的输出集合就是你的每一言每一行,以及你能够表达出来的所有表情动作。内部状态集合则要复杂得多。因为我们可以把任意一个神经细胞的状态组合看作是一个内部状态,那么所有可能的神经细胞的状态组合将是天文数字!

似乎你会说,这个模型根本不对,还有很多思维本质的东西没有概括进去。比如记忆问题,人有记忆,图灵机有么?其实,只要图灵机具有了内部状态,它就相应的具有了记忆。比如上面讲到的具有饥饿和吃饱两种状态的小虫就会记住它所经历过的世界:如果吃到食物就用吃饱状态来“记住”吃过的食物。什么是记忆呢?假如你经历了一件事情并记住了它,那么只要你下一次的行动在相同条件下和你记住这件事情之前的行动不一样了,就说明该事情对你造成了影响,也就说明你确实记住了它。

学习的问题反映在模型中了么?学习是怎么回事儿呢?似乎图灵机模型中不包括学习,因为学习就意味着对程序的改变,而图灵机是不能在运行过程中改变它的程序的。然而,我们不难假设,你实际上并不能打开一个人的脑袋来看,所以它的实际程序规则你是不知道的。很有可能一个图灵机的规则没有改变,只不过激活了它的某些内部状态,因而它的行为发生了本质上的变化,尽管给它相同的输入,它给出了完全不同的输出,因而在我们看来,它似乎会学习了!而实际上,这个图灵机的程序一点都没变。

还有很多很多现象似乎都能被图灵机包括,什么是人类的情绪、情感?你完全可以把它看作是某种内部状态,因而处于心情好的情绪下,你的输入输出是一套规则,而心情不好的时候则完全是另一套。这仍然没有逃出图灵机的模型范围。

接下来的问题就是我们人的思维究竟是不是和图灵机一样遵循固定的程序呢?这个问题似乎初看是不可能的,因为人的行为太不固定了!你不可预言它!然而我会争辩道,无论如何神经元传递信息、变化状态的规律都是固定的,可以被程序化的,那么作为神经元的整体:脑的运作必然也要遵循固定的规则也就是程序了。那么,如果是这样,正如图灵相信的,

人脑也不会超越图灵机这个模型,所以,人工智能也必然是可能的!然而,我认为针对这个问题的答案很有可能没有这么简单,我们将在最后详细讨论这个问题。

无论如何,我相信你已经能够体会到了,图灵机模型实际上是非常强有力的!

计算与图灵机

1、什么是计算

说了这么多,虽然也许你已经了解到了图灵机的威力,也许还将信将疑,然而,你肯定仍然看不出来图灵机和计算有什么关系。而实际上,图灵机是一个理论计算机模型,它最主

要的能耐还是在于计算上!所以,下面我们就来看看什么是计算!

我可以先给出一个很摩登的对计算概念的理解:广义上讲,一个函数变化如把x 变成了f(x)就是一个计算!如果我们把一切都看作是信息,那么更精确的讲,计算就是对信息的变换!如果采用这种观点,你会发现,其实自然界充满了计算!如果我们把一个小球扔到地上,小球又弹起来了,那么大地就完成了一次对小球的计算。因为你完全可以把小球的运动都抽象成信息,它无非是一些比如位置、速度、形状等等能用信息描述的东西嘛,而大地把小球弹起来就无非是对小球的这些信息进行了某种变换,因而大地就完成了一次计算!你可以把整个大地看作是一个系统,而扔下去的小球是对这个系统的输入,那么弹回来的小球就是该系统的输出,因而也可以说,计算就是某个系统完成了一次从输入到输出的变换!

这样理解不要紧,你会发现,现实世界到处都是计算了!因为我们完全可以把所有的自然界存在的过程都抽象成这样的输入输出系统,所有的大自然存在的变量都看作是信息,因而计算无处不在!也的确,正是采取了这样的观点,国外才有可能发明什么DNA 计算机、生物计算机、量子计算机这些新鲜玩艺!因为人家把DNA 的化学反应、量子世界的波函数变换都看作是计算了,自然就会人为地把这些计算组合起来构成计算机了。然而,似乎我们的理论家们还在力图证明关于图灵机的某个定理呢,却完全没有意识到计算其实就是这样简单!

下面回到图灵机!为什么说图灵机是一个计算的装置呢?很简单,图灵机也是一个会对输入信息进行变换给出输出信息的系统。比如前面说的小虫,纸带上的一个方格一个方格的颜色信息就是对小虫的输入,而小虫所采取的行动就是它的输出。不过这么看,你会发现,似乎小虫的输出太简单了。因为它仅仅就有那么几种简单的输出动作。然而,不要忘了,复杂性来源于组合!虽然每一次小虫的输出动作很简单,然而当把所有这些输出动作组合在一起,就有可能非常复杂!比如我们可以把初始时刻的纸带看作是输入信息,那么经过任意长的时间比如说100年后,小虫通过不断的涂抹纸带最后留下的信息就是输出信息了。那么小虫完成的过程就是一次计算。事实上,在图灵机的正规定义中,存在一个所谓的停机状态,当图灵机一到停机状态,我们就认为它计算完毕了,因而不用费劲的等上100年。

2、计算的组合

更有意思的是,我们可以把若干个计算系统进行合并构成更大的计算系统。比如还是那个小球吧,如果往地上放了一个跷跷板,这样小球掉到地上会弹起这个跷跷板的另一端,而跷跷板的另一边可能还是一个小球,于是这个弹起的小球又会砸向另一个跷跷板……。

我们自然可以通过组合若干图灵机完成更大更多的计算,如果把一个图灵机对纸带信息变换的结果又输入给另一台图灵机,然后再输入给别的图灵机……,这就是把计算进行了组合!也许你还在为前面说的无限多的内部状态,无限复杂的程序而苦恼,那么到现在,你不难明白,实际上我们并不需要写出无限复杂的程序列表,而仅仅将这些图灵机组合到一起就可以产生复杂的行为了。

有了图灵机的组合,我们就能够从最简单的图灵机开始构造复杂的图灵机。那么最简单的图灵机是什么呢?我们知道最简单的信息就是0和1,而最简单的计算就是对0或1进行布尔运算。而布尔运算本质上其实就三种:与、或、非。从最简单的逻辑运算操作最简单的

二进制信息出发我们其实可以构造任意的图灵机!这点不难理解:任何图灵机都可以把输入、输出信息进行01的编码,而任何一个变换也可以最终分解为对01编码的变换,而对01编码的所有计算都可分解成前面说的三种运算。也许,现在你明白了为什么研究计算机的人都要去研究基本的布尔电路。奥秘就在于,用布尔电路可以组合出任意的图灵机!

3、征服无限的方法

回忆你小时候是如何学会加法运算的。刚开始的时候,你仅仅会死记硬背。比如你记住了1+1=2,记住了2+4=6,……。然而无论你记住多少固定数字的运算,你都不叫学会了加法。原因很简单,假如你记住了n 对数的加法,那么我总会拿出第n+1对数是你没有记住的,因此你还是不会计算。原则上。自然数的个数是无穷的,所以任何两个数的加法可能结果也是无穷的,而如果采用死记硬背的方法,我们头脑怎么可能记住无穷数字的计算法则呢?但是随着年龄的增长,你毕竟还是最终学会了加法运算!说来奇怪,你肯定明白其实加法运算并不需要记住所有数字的运算结果,而仅仅需要记住10以内的任意两个数的和,并且懂得了进位法则就可以了。

你是怎么做到的呢?假设要计算32+69的加法结果,你会把32写到一行,把69写到下一行,然后把他们对齐。于是你开始计算2+9=11,进一位,然后计算3+6=9,再计算9+1=10再进一位,最后,再把计算的这些每一位的结果都拼起来就是最终的答案101。这个简单例子给我们的启发就是:作加法的过程就是一个机械的计算过程,这里输入就是32和69这两个数字,输出就是101。而你的程序规则就是具体的把任意两个10以内的数求和。这样,根据固定的加法运算程序你可以计算任两个数的加法了。

不知你发现了没有,这个计算加法的方法能够让你找到运用有限的规则应对无限可能情况的方法!我们刚才说了,实际上自然数是无限的,这样,所有可能的加法结果也是无限的。然而运用刚才说的运算方法,无论输入的数字是多少,只要你把要计算的数字写下来了,就一定能够计算出最终的结果,而无需死记硬背所有的加法!

因而,可以说计算这个简单的概念,是一种用有限来应对无限的方法!我们再看一个例子:假如给你一组数对:1,2 3,6 5,10 18,36,就这4对,这时问你102对应的数是多少?很显然,如果仅仅根据你掌握的已知数对的知识,是不可能知道答案的,因为你的知识库里面没有存放着102对应数字的知识。然而,如果你掌握了产生这组数对的程序法则,也就是看到如果第一个数是x ,那么第二个数就是2x 的话,你肯定一下子就算出102对应的是204了。也就是说,你实际上运用2x 这两个字符就记住了无限的诸如1,2 3,6 102,204所有这样的数对。

这看起来似乎很奇怪。我怎么可能运用有限的字符来应对无限种可能呢?实际上,当没有人问你问题的时候,你存储的2x 什么也没有,而当我问你102对应的是多少?我就相当于给你输入了信息:102,而你仅仅是根据这个输入信息102进行一系列的加工变换得到了输出信息204。因而输入信息就好比是原材料,而你的程序规则就是加工的方法,只有在原材料上进行加工,你才能输出最终产品。

这让我不禁想起了专家系统方法。其实专家系统就是一个大的规则库。也就相当于存储了很多很多的1,2 3,6 5,10这样特殊的规则对。而无论它存储的东西再多,总归会是有限的,你只要找到一个它没有存储到的问题,它就无能为力了。因而专家系统就会在你问到102对应是多少的时候失败!如何解决问题?人们想出了很多方法,就比如元规则的方法,其实元规则就相当于刚才所说的计算加法的程序,或者2x 这样的东西。运用元规则的确可以应对无限种情况了。所以,这就是为什么你问计算机任何两个数相加是多少,它总能给出你正确的答案的原因,虽然它不必记住所有这些加法对的信息。

然而仅仅是元规则就能解决所有问题么?

假如给你三组数对,排列成一个表:

1,2 3,6 4,8 100,200

3,9 2,6 8,24 100,300

1,4 2,8 3,12 100,400

那么问你在第6行上,3这个数字对应的是多少?我们先要找出第一行的规律是2x 没有疑问,第二行呢?是3x ,第三行是4x ,那么第6行就应该是7x 了,因而在第6行上3

应该对应的是21了!这里跟前面不太一样的是,虽然我们得到了每一行的规则比如第一行的2x ,但是随着行数的增加,这个规则本身也变化了,因而第2行是3x ,第3行是4x 等等,因而我们又得到了一个规则本身的规则,即如果行数是n 的话,那么这一行的规则就是(n+1)x。我们显然能够根据输入的n 和x 计算出数值。把这个道理放到专家系统里面,这种原理就是元规则的规则,元规则的元规则……,应该是无穷的!然而专家系统本身并不会自动的归纳这些规则,人必须事先把这些元规则写到程序里,这也就是专家系统最大的弊端。而我们人似乎总能在一些个别的事件中归纳出规则。进一步问,机器可以归纳么?这就相当于说:可以为归纳方法编出程序么?这也是一个很有趣的问题,下面将要详细讨论!可以设想,假如我们找到了真正归纳的方法,那么编写出这样的程序,它就会一劳永逸的自己进行学习归纳了。我们完全再也不用给他编制程序和规则了。这正是人工智能的终极目标!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分