首先要说的就是,意料之中,这一章节的内容长度要比上一章还要长很多,所以笔记的内容可能写的也会比上一次更多(上一篇笔记有两万多字)。这一章节里的对话内容非常的长,而且在故事结构上也非常的花心思。这里就是首先会劝退读者的地方,很多时候我们都想看简单直白一步到位的内容:“你想说什么一句话说清楚。”
可是有些时候很难,只要涉及到表达就必须要有一个“形式”。但是“形式”终究只是“真实”的一个片面,一个高度概括的简化的模型。就好比是一个房屋的模型和真房子的区别,那个模型可以几乎无限的精致,精致到还原每一个细节。但是差别就是很明显的,关于“真假”界限的讨论这里就先不多说了。
其实也能够接受,之所以还有得讨论正是因为问题还是问题,问题没有得到解决。有明确“正确”的答案,问题也就没有讨论的意义了。还有讨论的话可能是借由这个“问答”同构了一些其他的东西。——寻找到了不同的意义,这个也是见仁见智了。
回到这个章节来说,还是和前面的笔记里提到过的一样,书里前几个章节涉及到的内容和后面的章节要叙述的概念都有着非常紧密的联系。有点像是一个章节介绍一个概念同时引出一个小的“分支”,而这个“分支”就是下一个章节主要讲述的概念了。(有些时候这种“分支”、“伏笔”、“线索”不管它叫什么吧,不止一个,有时候一章节会有复数个这样的“引子”。)
在第四篇笔记的时候,就是在讨论制作一个可以“分辨”素数的形式系统的那一章节当中提到了递归可枚举集这一概念,也简单的介绍了一下递归的概念是什麽。到了这一章节里面,递归结构就成了讨论的重点内容。这里就直接先从原文当中的对话内容开始,还是阿基里斯和乌龟这一对活宝。这一段对话故事,侯世达着重于要在写作笔法上表现出他后面想要讨论的“递归”(我相信在写这个故事的时候他一定花了不小的力气在笔法上面着重刻画,而且这也可能把很多人给绕晕了,这里再三做一个提醒。)
得先从这一章节的故事开始说起,这一章节的对话带有着一种奇幻风格,像是爱丽丝梦游仙境那种风格的故事——当然篇幅不短。主角当然还是阿基里斯和乌龟,他们一起在游乐场里玩了一天。在玩游乐场的其中一个项目“大风车”的时候,他们的奇幻冒险就开始了。
乌龟在和阿基里斯一起玩“大风车”的时候开始了他们的对话,起先是聊聊家常,乌龟对阿基里斯说它今天很兴奋,因为它的姑妈给它算命说今天乌龟会遇到好运。(乌龟的姑妈会算命?一只会算命的母乌龟……这里其实有一个伏笔,记不记得那个关于唱机和唱片的对话里面乌龟把话听岔的那个段落?后面乌龟也来了一个类似的情况,看来它的耳背时不时的会发作。不知道是不是作者刻意为之,也许这个当中有什么隐含的意义?)
当他们到了“大风车”的顶端的时候,他们的头上飞来了一架直升机,还垂下来一条缆绳。那条缆绳的末端有一个钩子上面还挂着一张纸条。阿基里斯他们在经过的时候把纸条抓了下来,上面似乎是写着一个邀请:“你们好,朋友们。再转上来的时候抓住钩子,会叫你们喜出望外。”(事后证明,这个应该是一个陷阱,为什么这么说请看下面)。
结果他们两个上了飞机以后,遇上了一个看似不怀好意的人,他说他叫:“郝晕”。(这就是乌龟它姑妈算出来的那个“好运”,那么乌龟很明显的是听岔了,而且这个人怎么看怎么像是“厄运”)。这个家伙把阿基里斯和乌龟带到他的直升机上是为了把他们送进厨房做成吃的——一个全电气化的空中厨房,听起来特别的先进。然后他就把阿基里斯他们带到了自己的地方,有趣的是在他准备磨刀的时候,他却放任阿基里斯他们参观自己的住处,还请他们吃“弹出锅酥”。(这位“郝晕”老兄表示自己喜欢吃乌龟做成的馅)。
阿基里斯和乌龟这两位倒是也心大,真的开始参观了,阿基里斯还吃点心吃得津津有味的。他们在这个地方发现了很多有意思的书籍,这里给几个书名——《我所认识的呆瓜》、《象棋和转伞安然相处》、《为踢踏舞和管弦乐队写的协奏曲》……
然后他们看见了一本有意思的书,书名叫《阿基里斯和乌龟在全球瞎逛时引人入胜的历险》。(读这一段总会让我联想到那个时候阅读哈利波特的时候,里面也是奇奇怪怪的名字一大堆,特别有意思。)他们翻开了这本书,从其中的一个章节开始阅读,那个章节叫《神怪和煮调饮》。
这里要插入一句题外话,因为在原文当中也插入了一个括号,这个内容是这样的——(他们开始阅读《神怪和煮调饮》。(阿基里斯邀请乌龟来欣赏他收集的他最喜欢的画家艾舍尔的作品)。)注意这个括号当中的括号,也就是说这一段内容开始往下,阿基里斯和乌龟的内容是指他们在阅读《阿基里斯和乌龟在全球瞎逛时引人入胜的历险》这本书的《神怪和煮调饮》这一章节的内容。——直白点来说就是阅读故事里的故事,好比b站弹幕里说的:“达成成就:看b站动画里的动画。”
阿基里斯问乌龟最喜欢自己收藏的哪一份艾舍尔的作品,乌龟表示它喜欢那副《凹与凸》,因为这幅画把两个在各自的内部完全同意的世界合到了一起,变成了一个完全并不统一的世界。而且乌龟觉得一个不统一的世界总是很好玩,但是阿基里斯表示质疑,因为乌龟怎么可能进入画中的世界呢?结果乌龟却说自己确实有办法,他们如果要进入画中的世界,就需要喝一口“推入露”。(这一段特别有爱丽丝梦游仙境和爱丽丝镜中奇遇的风格,也许爱丽丝漫游仙境就是很多欧美奇幻穿越的源头梗?不好说,这个要考据一下才能做出结论)。
乌龟说喝下“推入露”,人们就可以进入画中世界,阿基里斯有点不安,他问如果回不来了怎么办?乌龟说有办法,有另一种类似的液体,可以叫做:“弹出煮调饮”。这玩意其实和“推入露”不太一样,并不是一种喝的液体,而更像是一个把戏或者机关。就是说当喝下“推入露”的时候,要想像自己的右手上拿着这么一瓶煮调饮,那么当进入画中世界后,手里就会真的有这么一瓶东西,想要离开的时候喝下去就可以了。(进入画中的时候自己的想像会变成画中的“现实”,这里的描述应该有点含义)。
同时不仅仅是煮调饮,“推入露”一样可以带到画中世界,如果进入的时候,左手拿着就可以了。通过带进去的推入露还可以进一步进入(进入画中画)。但是这么做是有风险的,乌龟的一个远房亲戚——一只鳖(读到这里笑出来了),因为不小心摆弄这些奇异的推入弹出药水,最后迷失了,再也找不回来了。(可能不知道把自己给推哪里去了,最后找不到回到现实的路径迷失在里面哪一层次了)。
阿基里斯和乌龟他们显然不打算只进入一个层次画中,他们打算进入更深的层次——画中画的世界。所以他们在准备进入的时候准备了两份“推入露”和“弹出煮调饮”。(把手伸进翻领口袋,拿出两只挺大的无标签的药水瓶,晃动它们时,可以听出一种药水是红的,另一种是蓝的。)括号里的这一段内这一段内容是原文的内容,首先是这一连串的动作都是乌龟做的。那么可以知道这里的乌龟应该是个拟人化的卡通形象,——这是我自己的猜测。第二是这两种药水,又是红色和蓝色。看过《黑客帝国》的朋友们一定有印象——红蓝药丸。这本书的写作肯定是早于电影的,而红蓝色道具带来“穿越”效果的梗不止在一个地方见到过(美国作家托马斯品钦的《万有引力之虹》当中好像也有类似桥段)。
随后他们两个把“推入露”一饮而尽,同时带着“弹出煮调饮”进入了艾舍尔的《凹与凸》的画中世界里面。这幅画里的景象有着四处颠倒却又合为一体的又去效果,于是他们穿越进去的时候一时有点找不到方向,不过乌龟进入过这个画中世界很多次,所以它有了一些经验。《凹与凸》的画中世界光怪陆离,除了那些怪异颠倒的悖论式景物以外,还有各种各样奇形怪状的生物和人物。阿基里斯尝试找画中的船夫对话,不过船夫不理他。
乌龟还透露了一个消息,由于它经常穿越进艾舍尔的画中世界,它就发现艾舍尔的作品之间背后似乎是彼此相连的,进入其中一幅画之后还能沿着画框背后穿越进其它的画中世界。而艾舍尔的画中世界除了光怪陆离之外,也是有危险的,比如《凹与凸》的画当中的两只蜥蜴。那两只蜥蜴位于画面的正下方,守卫着一盏有魔力的吊灯(这个部分在画当中很小一部分,要仔细看,有兴趣找的可以在配图里找)。它们的舌头可以把碰到的人变成辣味的肉酱(原文好像就是这个意思,可能是幽默,因为阿基里斯还问乌龟变成肉酱之后什么味道)。
阿基里斯的无知者无畏带来的结果就是一般那种冒险故事或者恐怖故事里的智障角色推动剧情的效果,他试着要去摸那盏带有魔力的吊灯,结果在画面中间那个贝壳一样凹下去的地面部分摔了一下,惊动了那两只蜥蜴,还把附近的“画中角色”给惊扰了。好在附近的几个“画中角色”还是善意的,他们纷纷递出援手就下了阿基里斯,免得他变成了辣味的肉酱。随后阿基里斯为了表示感谢,他和乌龟邀请那几个帮助了他的“画中角色”一起去喝咖啡。这时候他们已经走出了画面了,来到了画框之外的世界(画框与画框之间相连的部分,画面里看不到的部分。画面始终是整个世界的一个部分。)
在喝咖啡的时候,阿基里斯拿出了他冒险拿到的那盏魔力的吊灯。乌龟告诉他,这个魔灯就是那种很经典的魔灯,擦一擦表面会跑出来一个精灵或者怪物之类的,会满足提出的愿望。(就是阿拉丁与神灯里面那种的)。然后阿基里斯就真的试了一下,真的跑出来了一个精怪。那东西向他们表示感谢,因为他们解放了他。(这还真是经典的套路,简直一模一样,包括了那两个蜥蜴守卫)。于是阿基里斯理所当然地得到了许愿的机会,他可以需三个愿望。
阿基里斯想到了《天方夜谭》(也可以叫《一千零一夜》),然后他很机智的做出了一个决定,这个决定是今天大多数人都会很“机智”的想到的,那就是——“我许愿我要一百个愿望”。(所以这里要插一句:“你以为只有你想得到,别人就想不到?就你聪明?”手动滑稽)。阿基里斯表示《天方夜谭》里的蠢货怎么没想到这么做呢?他和今天各位的想法简直一样一样的。
但是精灵表示不能满足阿基里斯的愿望,因为阿基里斯的愿望是一个“元愿望”。“元愿望”就是指“关于愿望的愿望”,这是超出了精灵的能力的事(所以很多人都在想接着这个套路无限堆叠,永远在最后一个愿望的时候许愿多要愿望,这样就可以无限的要下去。但是哪怕在创作的故事里都不可能有那么便宜的事情,真要有的话,其他读者会把这情节当白痴的。)
精灵非常耐心的和阿基里斯解释,他说造物神不会允许他去满足“元愿望”,他仅仅只能满足普通的愿望。阿基里斯寻问那个所谓的造物神是什麽?精灵表示要解释清楚这个概念是个挺复杂的事情,而他不可能一直待在这里,所以他问阿基里斯能不能先许愿。可是阿基里斯实在想要那一百个愿望,精灵表示这个“元愿望”虽然他不能满足,但是这是他非常喜欢的一种愿望。于是他打算做点什么。
精灵从自己的衣服兜子里掏出了一个神灯,那个灯叫“元灯”。精灵擦了擦那个灯,从那个灯里跑出来了一个和精灵类似的玩意。那玩意问精灵要不要许愿,精灵提出了他的请求,要求能否解除限制,允许一个“元愿望”存在一段时间。那个玩意表示需要递交层层机构发出申请,于是它也掏出了一个神灯擦了擦,叫出了一个类似的精灵,速度快一倍。那个精灵继续叫,这个过程省略了无限的内容(就跟二分法悖论/阿基里斯追乌龟一摸一样)。最后内容到达了造物神,造物神又把结果回馈回来。最后这个元愿望的请求被通过了,阿基里斯可以有这样一个愿望。
不过前面这个看似有些莫名其妙的过程激起了阿基里斯的好奇心,他就询问精灵那个造物神是什麽?这一段的解释可能涉及到原文的运用以及翻译问题,看起来非常的晦涩难懂。所以这里笔者尝试用自己的话来解释一下。
简而言之造物神是一个无类型的词,可以理解为“精灵的精灵”、“精灵的精灵的精灵”、“精灵的精灵的精灵的精灵”……这个词按照这样可以无限扩充下去,想扩展多少就有多少。书中的原文是:(怪物:“造物神”是代表“造物神-物色的-神怪”这个短语中的几个词的词首字组合。你没见过递归的词首字组合吗?你瞧,“造物神”代表“造物神-物色的-神怪”——而它又可以被展开成“造物神-物色的-神怪-物色的-神怪”——它还可以一次被展开成“造物神-物色的-神怪-物色的-神怪-物色的-神怪”——它还可以依次的被进一步展开……你可以想展多开就展多开。因为在每种情况下最前面的三个字总是“造物神”,而这最前面的三个字总可以被展开。)
那么阿基里斯就问那个精灵(怪物),“造物神”莫非就是那个端坐在神怪之梯的顶端?并不是,精灵回答阿基里斯:“不,不,不!‘顶端’一无所有,因为根本就没有顶端。这就是为什么造物神是个递归的词首字组合。造物神不是某个终级怪物。造物神是个位于任何已知神怪之上的众神怪之塔。”
乌龟说道:“在我看来,每一个神怪都对造物神是什麽有彼此不同的看法,这样一来,由于对任何神怪来说,造物神都是位于他或她之上的一组神怪,所有没有两个神怪具有同样的造物神。”
神怪回答:“绝对正确——因为我是一切神怪中最低的,我可怜那些高层的神怪们,它们幻想着自己多少离造物神更近些,多亵渎啊!”(这一段内容不得不直接摘抄原文,因为感觉自己如果总结的话会造成不少歪曲,这一段内容的描述非常的重要)。
随后乌龟问了一个非常重要的问题,它寻问神怪,在这样一条传递链上面来回传递消息有没有出现过被歪曲无解的情况?——也就是拷贝不走样,玩过这个游戏的大家都知道基本到后面这个被传递的信息都会走样,程度不同而已(大部分都差得十万八千里)。
当然这种情况一般只有遇到“元愿望”的时候,也就是阿基里斯提出来的这种“我的愿望是再要一百个愿望”。只有这种愿望被提出来的时候需要涉及到层次递交的情况,而一般“元愿望”被否定就是因为在传递链上出现了歪曲的情况。这里神怪提到的一个论点有点类似于“混沌理论”,因为这条传递链是无限的,所以即使各个环节上出现歪曲的情况几乎与无限小但是不等于没有,这两个性质相结合就会使得歪曲的情况会有一定的概率发生。实际上基本上歪曲“一定”会发生,无穷规模的传递链抵消了“无穷小”的概率。在整条传递链上各个节点的歪曲分布的很散,大多数歪曲还会互相抵消——“通过”和“不通过”互相抵消之类的。
但是前面就说过了“无穷小”并不等于“无”,所以由于歪曲导致的无类型愿望不被通过的事情还是会发生的,造物神会因此惩罚那个造成歪曲的神怪(打屁股什么的)。
这么一长串的讨论启发了阿基里斯,他就提出了一个愿望,这个愿望是:希望自己的愿望不被批准。这应该是一个自相矛盾的指令,从之后的文中来看,阿基里斯提出这个愿望的结果是造成了“系统宕机”,他和乌龟直接被弹出了《凹与凸》这幅画抛到了别的地方去。
这里要插入一段提醒,前面发生的事情:“从阿基里斯和乌龟讨论煮调饮一直到他们穿越进了艾舍尔的作品,再到阿基里斯拿到魔法灯对着里面的神怪许愿被弹出。”——这一段内容都是阿基里斯和乌龟在阅读的《神怪和煮调饮》里面的内容。说白了他们自己在读自己的故事。
故事阅读到这里连阿基里斯自己都糊涂了,他和乌龟开始讨论,这一段的剧情到底是什么意思。股市中的阿基里斯那么做之后导致了什么结果?乌龟告诉阿基里斯,最后阿基里斯提出的那个“希望自己的愿望不被通过”的愿望导致了系统崩溃,因为这产生了悖论。
乌龟:“这其实是个悖论。因为批准这个无类型愿望,就是否定了它——而不批准它,就是批准了它。”
乌龟告诉阿基里斯系统崩溃后的结果是,他们会被驱逐到堕界去。那是一个中间地带,用乌龟的话来说——一个没有打出来的嗝和已熄灭的灯光所在的地方。它是一种侯室,在这儿处于休眠状态的软件等着宿主硬件回来。(我相信看过《黑客帝国》第三部的人会对这段描述会心一笑的,尤其注意的是这本书应该是在电影之前就出版的,很难说沃卓斯基兄弟有没有可能看过这本书。乌龟描述的这个地方和电影当中那个困住了男主角尼奥的火车站几乎一模一样——还可以联想到《盗梦空间》里面关于潜意识边缘的那一段剧情)。
当然最后乌龟和阿基里斯没有那么倒霉,他们被垮台的系统踢出去之后并没有进入堕界。他们一块穿越到了艾舍尔的另一副画里,那幅画叫《爬虫》。(蜥蜴从平面跑到立体空间又跑回去的一幅画,一会可以看插图。)
当他们注意到自己来到了什么地方之后,乌龟发现弹出煮调饮还在他们手边(艾舍尔那幅画当中有画着一个瓶子),也就是说他们还有机会能够离开画中世界。不过乌龟注意到在弹出煮调饮的边上还放着一本书,那本书的名字叫《乌龟和阿基里斯在全球各地转悠时的历险》。(这个书名眼熟吗?阿基里斯和乌龟正在阅读的那本关于他们穿越进画里的书书名叫做《阿基里斯和乌龟在全球瞎逛时引人入胜的历险》。也就是说这是在故事中阅读自己穿越进画中世界然后发现了一本书并且开始读书的内容,又深入了一个层次)。
当乌龟开始阅读的时候,阿基里斯正急忙要把弹出煮调饮抢回来,因为他害怕那个在桌子上的蜥蜴把瓶子碰掉。结果他自己在忙乱之中把瓶子给碰掉了,瓶子掉出了画面进入了下一个层次当中去,阿基里斯急得跳脚,乌龟则知道穿越办法,它开始大声朗读手里的书,带着阿基里斯穿越到了下一个层次当中去。
这里是他们穿越的最深的层次了,而这个层次的名字就叫《和声小迷宫》。在一个圆形迷宫的中心,有一个可怕的大雕盘踞在那里。那个大雕会对着无意间进入迷宫的闯入者使劲大笑,直到把他们笑死。(这大雕是真的diao)他们开始朝着迷宫进发,手里拿着一根手杖,阿基里斯把手杖蹭着墙壁走(据说有一个说法是右手摸着迷宫的墙可以找到出路?忘了是哪里看来的)。
手杖在迷宫的墙壁上面刮出了音乐,乌龟从这个现象当中听出了一些什么,它惊讶的发现这个迷宫是一个唱片,他们所在的迷宫通道是唱片上面的纹理!(这里要联系到前一个章节的《对位藏头诗》的内容,记得那段对话用唱机和唱片共振的问题来比喻哥德尔不完备性定理)。
乌龟解释说他从手杖摩擦墙壁当中听出的旋律是一首巴赫不太为人所知的管风琴作品《和声小迷宫》,之所以叫这个名字是因为这个作品令人迷醉的转调技巧(注意,巴赫那个时代实际上还没有成体系的和声学出现这个会在后面说的)。乌龟一边给阿基里斯解释转调是什麽,一边继续前进,他们不知不觉的就走到了迷宫的中心,而《和声小迷宫》的音乐也戛然而止,这让乌龟有些恼怒。
他告诉阿基里斯他中了巴赫的圈套:“某些音乐是极富于智慧的,不过大多数音乐不是。多数的时候你的耳朵或大脑为你‘估算’,是你的情感知道它们想听什么,你不必有意识地去想它。但是在这支曲子里,巴赫在耍手腕……巴赫有意那么安排的,你恰好落入他的圈套。它故意被设计得像个结尾,但是如果你仔细品味那个和声地进行,你会发现它的调性不对。”(这里先提醒一下,在后面看过和声和转调的内容后可以回过头来看一看这一段,可能就会有所了解。简单来说一个曲子的起头用的什么调子,那个调就是曲子的主调,转调就是从一个调跑到另一个调。但是如果一首曲子要想完整的结束,转调就必须转回来,转到最初的那个调子上,才能完成完美的结束。)
结果阿基里斯和乌龟双双掉进了迷宫中心,那个大雕的巢穴里面。就在大雕差点要笑死他们的时候,他们很幸运的发现在巢穴里有一大碗“弹出锅酥”(效果类似于弹出煮调饮,反穿越效果道具……)于是他们直接就从迷宫当中穿越回了上一个层次——从迷宫回到了画中世界。而正巧,那个画面当中除了那只从平面到立体来回穿越的蜥蜴之外还有一瓶“弹出煮调饮”。阿基里斯口渴的不行,他和乌龟把那玩意一饮而尽。
于是他们从画中世界穿越回了屋子当中,然而阿基里斯觉得有点不对劲,因为这里不是他自己的家而是乌龟的家。由于前面一连串的冒险,他们累得不行了,打算暂时在这里终止。(注意这里还不是最上一层,这里是《阿基里斯和乌龟在全球瞎逛时引人入胜的历险》那本书里情节。最上一层是他们两个被困在空中电气厨房等着被一个叫“郝晕”的家伙下锅)。
上面这一连串的故事相信看晕了不少的人,不过应该也有人看明白了故事的结构。虽然我相信这一段内容可能劝退的效果更明显,大概很多人会被绕的没耐心了。在说音乐学的内容之前,这里还是要再一次强调一下,这次的《和声小迷宫》的故事结构简单来说就是:“故事里的故事里的故事里的故事……”——这是为了强调一个概念:递归。一个故事进行到一半,故事里的角色开始岔开话题说一个另外的故事。这个结构和音乐当中的转调有着很相似的性质,所以在这里才给出了类比。
《和声小迷宫》是一个相当冷门的作品,当然如果有心要去找还是可能找到资源的。但是在这里的重点其实并不是巴赫的这个作品,而是巴赫这个作品中运用到的音乐技法。
和声(harmony)在17世纪以前,harmony一词的意思是指音乐的音响。在中世纪,和弦被理解为在原来的声部上加音程的结果。虽然在16世纪通常采用主调音乐的写作风格,但是关于和声仍仍然保持着原来的看法。
在现代意义中,和声指和弦的结构、功能和关系。早在1636年就有人用和声来表述声音的物理和数学关系;这一观点一直沿用到拉莫创立现代和声理论为止(1722).拉莫的理论把理性科学家的观点和实践作曲家的观点结合在一起。——(和声学现在基本上是学音乐的基础课了,必修的)。
和声的单位是和弦。和声的“进行”(或者也可以说运动)的最小因素由两个和弦构成(至少有两个)。
结束乐段或短句的一对和弦被称为“收束”(通常都会回到乐曲的主调主和弦上面,也就是主调的第一个音构筑的和弦)。在乐曲中,“收束”也可以分成完全收束、不完全收束、变革收束。这三种是以最简单的形式表明了一个调的属和弦与下属和弦之间,以及它们与主和弦之间的关系。(这一段记得在第一篇笔记里面有说过,这里不妨再做一次简单的解释,每一个调都有主和弦、下属和弦、属和弦构成一个结构,它们互相之间具有倾向性构成了一个调的和声关系。每一个调都有一个音阶;第一个音就是主音、第四个音是下属音、第五个音是属音。以这三个音作为最下面的基础构建的和弦就是前面说的那三个和弦——一般来说这些内容在看得懂五线谱的情况下大部分都是直接背的,只有后面音乐学学的很深的或者作曲专业的之后还得回过来研究这个)。
在音乐中,一个调的各个和弦之间的和声关系适用于所有的调,因为所有的调都是大小两个调式的移调。现代和声理论是以大调音阶和弦为基础的。小调音阶的和弦虽然性质不同(和弦可以拆解为音程关系,小调和弦的音程关系的构成和大调不一样。)但是在其相互关系及其与主和弦的关系上都被理解为具有同样的功能。
现代和声以大小调为准,而大小调的确立则来自于十二平均律的发现,所以更早的时候使用的中古调式是完全不一样的概念(它们可以对应对位法)。巴赫那个时期现代和声理论并没有确立,但是已经开始具有一定的雏形了。任何一个学科领域内完备的理论体系,都绝不可能是灵光一闪突然跳出来的,都是具有了长期的积累之后经过了总结完善才会出现。
所以在巴赫的音乐当中其实已经具有了现代和声学的一些结构特点(目前欧洲音乐学研究当中,有尝试用现代和声学来分析巴赫音乐的,大体还是能对得上,但是比起主调音乐会麻烦的多。毕竟巴赫依然还在使用对位法作曲,对于和声的运用只能说来自于某种音乐家的直觉,而不是经过训练后的技法运用)。
主和弦是调的和声中心,当主和弦前面是属和弦(比如在完全收束中)时,它的主和弦身份十分显著。(音效对比出来的效果),而在完全收束的前后出现的下属和弦则最最有力地加强了对调性的肯定。
主和弦、下属和弦和属和弦单个和弦之间已经包含了音节中所有的音——一般来说最基础的和弦就是三和弦,两个音程关系构建出来的。比如C大调的主音就是C,那么C大调的主和弦就是:C、E、G从下往上构成的(三个音一起出来,在任何乐器上);C大调的下属音就是F,于是下属和弦就是:F、A、C;C大调的属音就是G,属和弦就是:G、B、D。由于这三个和弦已经包含了音阶的所有音,因此足以为任何保持在这个调内的旋律配置和声。
把前面C大调那三个和弦的所有音不带重复的排列出来C、D、E、F、G、A、B、C——一个完整的C大调音阶,所以只要是用C大调写作的旋律全都可以用这三个和弦来配和声。这个方式可以被叫做:“歌曲即兴伴奏”。
在此就不说太多关于和声功能性方面的内容了,因为这一部分内容对于非音乐专业的来说有点太云山雾绕了。不过还是可以说说在其它方面的,比如比较直观一点的。和弦可以分成两类,协和的和不协和的。这两种特性来自于音程当中的性质,当然这里的协和不协和都是相对的。
直白的来说,协和音程具有稳定感,比如主和弦就是如此所以完整结束一般都会在主和弦上面给人一种趋于稳定的感觉。而不协和和弦则运动感较强,其造成乐曲的进行,不断地趋于稳定的倾向。随着旋律写作当中变音体系越用越多(直白来说就是早期音乐旋律都写不长,后期慢慢开始写长了),这提示并要求和声关系的新形势,而更多地连续运用不协和音以要求增加音乐的戏剧性的紧张,到了19世纪的和声色彩更加丰富,细节也更加复杂。比如古典时期和声学地很多规则和传统到了浪漫主义时期都被打破了,甚至有些禁忌也被打破。
转调是在音乐调性和和声概念上:主要是指调性的转换,转调过程通过合理的和声进行来完成。在音乐的进行中,从一个稳定的调转入另一个新调。新调被称为“副调”,副调在没有被巩固过的前提下被叫做“离调”(临时转调)。当调中地属和弦、主和弦全部出现作完全收束之后才算得到了巩固,此时可以被叫做“转调”。
近关系转调,音高变化,新调和原调只相差一个升号或降号;
远关系转调,又名“疏远转调”,新调和原调相差不止一个升号或降号;
直接转调,又名“突然转调”,是直接由原调转向新调;
间接转调,又名“逐渐转调”,是通过若干中间调而最后转向新调;
长时转调,转入新调的时间较长,并在新调上结束音乐段落。”——by:维基百科
如果以新调为出发点,照式重复转调,结果就得到了转调模进或称“完全”模进(意思就是说音程关系完全保持不变的模进)。巴赫《音乐的奉献》中的螺旋卡农是这类模进的一个特殊例子:主题每重复一次,它就转高一个音,最后到达原调的高八度。这在第一篇笔记当中就提到过,这本书以这个卡农的例子作为开篇讲述了“怪圈”的概念。
转调的技艺是艺术性的运用调性效果和驾驭调性布局的基础,因而也是作曲艺术的基础。
嵌套式结构往往能够产生一种令人炫目的艺术效果,所以类似结构不仅仅只在音乐当中得以体现,这里侯世达把音乐的转调技术也归类到这一类型里面来。当然并不仅仅只是音乐和画面,相对来说画面是最直观的——之前第四篇笔记给出过图例,就是那个无限镜面回廊。
但是真正的嵌套可以复杂很多,以画面来说,画面可以表现的嵌套形式是有限的。观众们所能看到的嵌套结构有多少取决于自己的可以看见的有多清晰,一般最多能有的也就是三两个,镜面反射这种的只能看画框了。越是复杂的画面就越难以看清楚,这是画面表现力的局限性。
音乐相对来说要抽像一些,不过在形式表现的范围内来说可能要比画面更多——乐谱可以写的更长,画面的话到后面可以画的地方就越来越小了。
而到了文学当中则更加抽象,但是表现形式也可以更加复杂化,如这一篇对话当中的内容。当然侯世达在这篇对话当中用到的文学技法并没有多少,如果想要去体会文学的递归结构之美可以去读读那些特别的作家们——卡夫卡、博尔赫斯……在下文还会对他们有一个描述。
1·《黑客帝国》和《盗梦空间》——爱丽丝梦游仙境的故事
首先要强调的是递归结构是存在一种美学的,这是可以肯定的。那些具有着类似结构的不论何种体裁,都会让人有一种想要深入的吸引力。我们会想要看得更深,递归结构会造成一种感官上的倾向,让我们想要“一探究竟”。这种情绪可以说是求知欲,探求欲等等等等,也许会说不清楚,但是这种感觉是很明显的。
而实际上很多递归结构都包含着“无穷递回”的性质,虽然在有限的表现形式之中是有限的,我们能看到形式当中的极限。但是它重要的部分在于那种——“吸引”的感觉,我们的思维会被这种结构引导向无限,从而我们自己就会顺着这种倾向性走出有限形式的限制之外。——就是说引发我们无限的遐想,比如说递归结构的画面,虽然我们能看到的只有三四个层次,但是我们的脑海中已经想象出的后面无限的层次感。
联想到镜面回廊,可以说这是一种在一定程度上打破了空间限制的情况。而且它最奇妙的地方在于其本身是一种——“关系”,而非“形式”,所以它具有着极为强大的兼容性,几乎可以套用给任何形式。
这里要牵扯一下《黑客帝国》,故事的剧情自不必多说,当中埋藏的梗和典故也可以说是丧心病狂。而当初第二部电影的结尾则打破了很多影迷对于剧情的分析,完全展开了一个新的境界——当然也招来了一部分批评的声音。
男主人公尼奥在《黑客帝国》第二部的结尾见到了工程师之后才知道,他的觉醒并不是真正的觉醒,而是一个系统运作的环节之一。所谓的真实世界——人类最后的据点:锡安其实性质上和“母体”一样也不过是一个虚拟系统,在那之外还有世界(电影到最后也没有展示那个外面的世界)。作为证明就是尼奥发现自己改变物质的超能力从“母体”延伸到了“现实”之中——他用意念废掉了机械哨兵章鱼。
电影在说到这里的时候就变得更加复杂了,先前的一些论断也都被打破了,这可能是后来收到了一部分差评的原因之一。而这个故事一直延续到《黑客帝国3矩阵革命》结束,我们也只是有一个模糊的概念。而实际上这就是一个递归的故事结构了,“母体”内的虚拟现实是一个层次,外部嵌套了一个人了对抗机器人的“现实世界”层次,而工程师和先知都证明这个所谓的“现实世界”也是一个运行的虚拟系统。于是对与外部世界或者说真实世界应该是什么就引发了影迷们的争论。有的人相信外部世界就是真正的真实世界了,但是到达不了。也有的人认为外部世界可能还是一个模拟系统,可以继续嵌套下去。
递归结构某种意义上打破了一定的限制,但同时它本身也有着限制。就像是俄罗斯套娃一样,互相嵌套的结构必须是相似的(甚至只是等比缩放了)。无论表现上面有多么的不同,甚至看似截然相反,内在的一些东西必须是一样的。就比如《黑客帝国》电影当中的那个多层次的世界,“母体”内部的和平世界和“现实世界”的战争环境看似南辕北辙,环境截然不同。而二者的联系在于,两边都不过是系统模拟罢了,不同模式运行的同一种模拟系统,针对的是测试人性的本源。
这是《黑客帝国》复杂的地方,前面说过单纯的嵌套结构已经可以造成一种延伸的感觉。而实际上这是最简单的,不同层次之间还可以进一步的细化,从而让整体看起来有一种令人叹为观止的错综复杂的壮丽美感。
如果单纯的想要在形式上做文章的话,一样可以得到让人赞叹的效果比如《盗梦空间》。《盗梦空间》的多层次梦境结构正是影迷们津津乐道的内容,也是让很多人觉得烧脑的地方。实际上现在来看就很清楚了,多层次梦境毫无疑问就是递归结构的多层次嵌套。
电影当中除了最后的“潜意识边缘”外,每一个层次的梦境都由造梦者留守,而醒着的那个造梦者在上一个层次的梦境中其实是睡着了的——最外层的现实世界中,只有波音747头等舱那个被买通的空姐醒着负责照顾所有睡着的人。
但是电影中的梦境结构实际上并不是简单的从上到下一层一层深入的,并不是一个简单的上下结构。虽然这里使用“层次”来区分,而实际上递归结构是“嵌套”,外面一层包含里面一层。这并没有办法用一种单纯的空间意义上的关系来描述这种关联形式,因为不论是从上往下或者是从外往里的说法都不完全算对。只能说是一种层次递进,而关键是这些层次之间的关联性在于其自身和上一层之间那种自指的关系,这个在后面会详细讲述。
从《黑客帝国》一直到《西部世界》;意识觉醒或者是层次穿越好像都能联系到《爱丽丝梦游仙境》这个故事上面去,而且确实到处都有它的影子。
有评论指出《爱丽丝梦游仙境》包括其续集《爱丽丝镜中奇遇》根本不能算是儿童读物,也不应该归之于荒诞文学的范围内。《爱丽丝梦游仙境》的故事可以分成两条主线:一是逻辑,一是语言。这么说也许可以解释为什么这则故事所具有的普遍性和影响力那么的惊人,似乎到处都能找到它的影子——乔伊斯的《尤利西斯》(意识流神作,相信不少人听说过)、卡夫卡的《审判》和《变形记》、艾略特的《荒原》和《燃烧的诺顿》、纳博科夫的《洛丽塔》(萝莉一词的起源)包括前面提到的《黑客帝国》……
这里还要找回一个前几篇笔记里在反复讨论的内容——“同构”(实际上下一个章节就重点说这个概念),递归结构当中的每一个层次似乎都具有着“同构”的情况,下一个层次的内容何意义和上一个层次是“同构”的。引申到前面提的这个联想的内容,《爱丽丝梦游仙境》具有着的就是类似的性质,它的每一个元素都能找到同构。在其他的故事或者剧本创作的时候,很多思路似乎可以从《爱丽丝梦游仙境》的故事元素当中找到“同构”。
这里可以举的例子数不胜数:《生化危机》当中的蜂巢主控电脑——“红皇后”、《西部世界》当中隐喻host的意识觉醒的一段内容:“昨天我的生活还一切正常,今天怎么突然变成了这样……”(可能会有差,只记得大概意思了)、《黑客帝国》里面墨菲斯让尼奥跟随“白兔”……
来看《爱丽丝梦游仙境》的故事本身,每一个章节都是爱丽丝在地底世界冒险的一个阶段。而每一个阶段与上一个阶段也可以找到一种“递归”的关系,每一个章节爱丽丝面对的都是不同层次的荒诞,而这些荒诞逻辑本身都是一脉相承的——一种无视于现实合理性的逻辑推理。所以每一个角色都认为自己的道理没有错,自信满满的和爱丽丝讲自己的道理,可是在爱丽丝和读者看来他们全都荒诞不经。
荒诞风格让人着迷之处就在于,通过这些荒诞影射出很多现实意义和人们通过异化的外物来对照观察自身的思维和存在性质——这关系类似于“图形和衬底”一样。(也是前面笔记提到的)。
最后再提一句,《爱丽丝梦游仙境》当中喝药水变身的梗似乎也是一个非常经典的段落了,而且到哪里都能看见这种梗的变体:上面侯世达写的这篇故事就是,包括《黑客帝国》只不过那里变成了药丸而不是药水。(谁知道红蓝药瓶的设定是不是也是有起源在这里的呢?这里是臆测的)。
迷宫和梦境这两种可能是最能体现“递归结构”的情形了,而且只要是以这两种为框架或者主题的不论是电影、音乐、美术、文学……似乎都能或多或少的造成“递归结构”。因为递归结构当中包含的“无穷递回”的隐藏意义有着吸引人不断看下去的吸引力——人们总是想要看到“究竟”。
而以迷宫和梦境为主题来看文学的话,笔者首先能想到的就是博尔赫斯和卡夫卡这两位作家了。卡夫卡的《变形记》是入选过中学语文教材的(几年级的我忘了),而博尔赫斯在国内最广为人知的作品是《交叉小径的花园》(一篇对于时间是什么形式的哲思小说,还带着一些谍战背景的剧情——主角还是个中国人)。
卡夫卡的《城堡》写于1922年,一直到他去世都没有能够完成。他去世之后,他的好友马克思·布洛德在1926年帮他整理出版(卡夫卡自己是想要把手稿烧掉的)。简单来说就是主人公K被雇佣到一个城堡里去做土地测量员的工作,然而却莫名其妙的在走程序的时候遇到了各种阻碍,事情一直处于胶着状态一直到结束。
(据说卡夫卡原定的结局是K一直为了进入城堡而奋斗,而一直到最后弥留之际才得到了城堡允许进入的赦令——话说《审判》一文的作品主人公也叫K,大家基本都相信这就是卡夫卡带入自己的角色。而卡夫卡有一个短篇小说《法门前》,主人公想要进入法之门但是门的守卫不让进入,但他也没有赶走主人公,守门人说自己只是守着第一道门,后面还有一道一道,一直到主人公弥留之际才说法之门一直为他敞开而现在门要关了……这个故事可能是《城堡》的雏形。)
《城堡》当中城堡各个职能部门的描述带有一种荒诞的感觉,而且有趣的就在这里,每一个城堡经理都声称自己具有权限,但是自己有一个上级有着比自己更高的权限。这个和前面阿基里斯和乌龟在进入画中世界时候遇到的那个神怪是不是一模一样。整个《城堡》的剧情构建出来得正是如此,这是一个递归结构的“城堡”而主人公显然是迷失在了这里面,他试图突破层层阻碍到达尽头,然而他失败了。
基本上都认为卡夫卡的《城堡》影射了现实社会中的层层交错,以及个体的渺小遭到了巨大社会体制压迫下的无奈。不过这里想要提出一个不太一样的看法。既然说到社会,这里打算提出一条“递归链条”,我们从人与人的最简单的关系开始:
个人;同事朋友;工作部门;整个公司;整个市场;社会……
以人际关系作为对象,我们构建了一个递归链条,来对照前面关于递归层次结构的描述,每一个层次之间具有着“同构关系”。不同层次之间是层层“包裹”着的。这样一看是不是和卡夫卡的故事所描述的确实一摸一样,只不过故事当中的荒诞在于:现实世界中的大部分人只会在上述的层次当中分别投入不同的经历,越往后精力越小(心系社会一般仅限于看看新闻发发评论啥的,经营人际关系则要投入的多得多)。而故事当中的人物则全身心的投入试图穿越所有的层次到达顶端,从而导致了这个试图在递归结构当中来回穿越的个体迷失了方向。
博尔赫斯在文学上的美感和艾舍尔很相似,他的《虚构集》等短篇小说合集当中的故事都有这种感觉。无限地走廊,没有尽头的迷宫……虚构之于真实的意义就像是递归的镜面回廊,从平面上得到了空间的无限颜色,一种似是而非的“真相”。
首先是自相似:什么是自相似?如果一个物体自我相似,那就表示它和它本身的一部分完全或是几乎相似。这里可以给出一个比较明确的例子——曲线。说曲线自我相似,我们截取曲线上的任意一个部分,这一部分和整个曲线是相似的。在自然界当中有很多东西有自我相似的性质比如海岸线,这是分形结构的一个重要特质。
然后是自指:在自然语言和形式语言当中,如果一句句子提及自身,不论是直接的还是间接的,这就被称为自指。自指的语句通常会造成悖论,比如说谎者悖论,这是一个直接自指的例子。哥德尔不完备性定理就来自于数学中对自指的研究。哲学中“自指”涉及到主题谈论或者提及自身的能力。在计算机科学中,“自指”涉及到著名的停机问题,计算机程序中的自指主要就是“递归”。
其实书里这一部分主要就是说计算机程序中的自指问题——“递归”,但是在前面讲述“递归”概念的时候,笔者联想到了“分形”的概念。
分形(Fractal:有“零碎”、“破裂”之意),也有叫做碎形、残形。(应该是港台那边的叫法)。其定义为:“一个粗糙或零碎的几何形状,可以分成数个部分,且每个部分都(至少近似地)是整体缩小后的形状——自维基百科。”这就是前面说到的自相似性。分形这个概念在数学当中其实是一种抽象的,用于描述自然界中存在的事物。人工分形通常在放大后能展现出相似的形状,所以分形也被称为扩展对称或者展开对称。
分形并不限于几何图形,它也可以描述时间序列。虽然分形是一个数学构造,但它同样可以在自然界中被找到,这使得人们把分形划入了艺术作品的范畴。同时在医学、土力学、地震学和技术分析中都有应用。在自然、技术、艺术、建筑甚至法律等领域,人们对图形、结构和音频中不同程度自相似的分型图形进行了研究,并反过来利用分形理论去生成图形、结构和音频。分形和混沌理论也密切相关,因为混沌过程的图形大多数都是分形的。
分形和其他的几何图形有相似但并不相同,当缩放一个图形的时候,就能够看出二者之间的区别。比如说,把一个多边形的边长加倍,那它的面积变为原来的四倍。新的边长比旧的边长增加了2倍,面积就增加了4倍,即2的2次方倍。平面内的多边形在二维空间中,指数2刚好是多边形所在的二维空间维数。,这个可以延伸到三维空间中,比如三维空间中的球体,如果半径加倍,比如2倍,则体积就变成原来的8倍。也就是2的3次方倍,指数就是3,也就是球体所在的空间维数。但是如果把分形的一维长度加倍,则分形空间的内容变成2的N次方倍,此时N不一定是一个整数。
作为一个数学函数,分形通常是处处不可微的——在微积分学中,可微函数是指那些在定义域中所有的点都存在导数的函数。可微函数的图像在定义域内的每一点上比存在非垂直切线。因此可微函数的图像是相对光滑的,没有间断点、尖点或任何有垂直切线的点。无穷分形曲线可以理解为一条一维的曲线在空间中绕行。直白点来说就是分形不能用传统方法测量。
比如测量波浪曲线的长度,只要放大到足够大,总能用直线拟合一小段曲线,然后就可以用卷尺测量这段直线的长度,再把各段直线的长度相加,就可以得出波浪的长度。这样做法在数学上就相当于是把曲线当成函数来处理。但是分形曲线如果用这种方法去测量是不行的,因为在测量之前缩放的过程就是无限的,曲线图案的模式始终会不同的出现,结果就是每次缩放,都需要使用更小的卷尺来贴合曲线。
某些意义上来说分形和递归的关系非常紧密,其自我相似性的例子和递归的自指性甚至可以用同一个例子,这从分形概念的发展史就可以看出来。
从17世纪开始有了递归的概念,到19世纪伯纳德·波尔查诺、波恩哈德·黎曼和卡尔·维尔斯特拉斯等人对连续不可微函数开创性的研究,这些数学概念都在推动着分形的发展。到了20世纪人们才创造了“分形”这个词,随之而来的是人们对分形和计算机建模兴趣的迅速增长。1957年本华·曼德博首次提出“分形(Fractal)”这个术语。他把分形的概念从理论分型维数拓展到自然界中的几何图形(海岸线)。他对于分形发表过看法:“美丽、(研究)极其困难但又非常有用,这就是分形。”
分形的历史可以追溯到现代计算机图形学的应用当中去,在数学意义上,分形的生成是基于一个不断迭代的方程式,这是一种基于递归的反馈系统。17世纪时,数学家莱布尼茨就思考过递回的自相似性,分形的数学从那时候开始慢慢的成形(那个时候他以为只有直线会自相似)。
在他自己的著作中,莱布尼茨使用了“分形指数”这个术语,但遗憾的是当时几何学还不认识它们。而在那之后一段时间,很少有数学家再愿意去尝试解决这些问题,已有的工作也模糊不清。这主要的原因是人们对不熟悉的新兴概念往往具有着抵触情绪,这些概念有时候被称为数学“怪物”。
而直到两个世纪后,才有人给出分形的第一个定义(那人是前面提到的卡尔·维尔斯特拉斯):分形是一种具有处处连续,但又处处不可微等反直觉性质的函数图像。另外,随着求和计算值的增加,函数的导数变得任意大。
在不久之后,1883年,参加过维尔斯特拉斯课程的康托尔(没错就是那位发明集合论的人,这在之前第二篇笔记关于数学简史那部分里面提到过)也给出一个具有不寻常性质的例子:实直线上的子集——康托尔集(现代点集拓扑学的基础),现在也被认为是分形的。
1960年,本华·曼德博开始研究自相似性,最终他在1975年提出了“碎形”一词,他以显著的电脑绘制图像来描绘此一数学定义,这些图像征服了大众的想像;它们中许多都是基于递归,导致了大众对术语“碎形”的通俗理解。
1980年,洛伦·卡彭特在计算机图形学顶级年会SIGGRAPH上发表了一次演讲,演讲中他介绍了他基于分形理论开发的用于产生风景的软件。
2不太规则,以至于无论是整体或是局部都难以用传统的欧氏几何的语言来描述;
4一般,其“分形维数”(不止一种)会大于拓扑维数。(空间填充曲线是例外);
回到书里的内容中来,侯世达这里指出他在本章当中描述的递归和前面第三章当中的含义只是稍有关联。通过前面的内容可以确定,这一章当中的递归含义应该是在计算机科学范畴内的递归。当然也涉及到很多别的领域。
首先就是递归和悖论很接近,自指性会产生“怪圈”。比如递归定义:递归定义是数理逻辑和计算机科学用到的一种定义方式,使用被定义对象的自身来为其下定义(简单来说就是自我复制的定义)。问题就出在这会让人产生一种递归定义出现了无穷回归的感觉,这就陷入了“怪圈”当中去。
但是侯世达指出实际上如果正确给出递归定义的时候并不会出现这种情况,因为递归定义实际上并不是用自身来定义自己,而是用比自身简单一些的说法来定义自己。这样就不会才出现无穷回归或者悖论的情况。
侯世达给出了一个例子:“假定有一个接线秘书,她有一个可以接入多个其他电话的电话机。然后她在和客户A打电话。这个时候客户B打了电话进来,秘书只能让客户A先耽搁一下,她把电话线路转到客户B这里。然而这个时候客户C又打了电话进来,秘书又得让客户B耽搁一下,去转接客户C(这个过程可以是无限的)。当然我们假定到此为止了,那么秘书和客户C说完把线路转接到客户B,然后说完了再转接回客户A(客户A等半天)。”
上面这个例子里面的秘书基本就是个机器人,机械的要命,不过计算机的递归执行就是这样的。然后通过这个例子,侯世达给出了三个关于计算机的基本术语:推入、弹出和堆栈。这三个术语互相关联,并且是作为人工智能早期语言之一——IPL语言的一部分,第一次出现于二十世纪五十年代后期。
这里解释一下IPL语言,IPL全称:Information ProcessingLanguage,现在一般翻译为咨询处理语言或信息处理语言。这是一种程式语言,于1954年,由艾伦·纽厄尔、克里夫·萧、赫伯特·西蒙等人于兰德公司和卡内基技术学院研发。它被认为是史上第一个用于人工智慧的程式语言,启发了后来的LISP(具有悠久历史的计算机编程语言家族,其名称源自于“列表处理器”LISt Processor的英语缩写。列表是LISP的主要数据结构之一,LISP编程代码也同样由列表构成。)——(早期的基于符号处理的人工智能领域,以图灵测试为目标。此领域中有些研究者持有观点:“符号演算系统可以衍生出智能”。——自维基百科)。
这三个术语的字面意思看起来很简单,不过还是要引用一下书中原文的解释更加恰当:
推入既是暂停目前正在进行的工作,记住在什么地方停下的——并开始一项新的工作。这项新的工作通常被认为是比前一项工作“低一个层次”。而弹出则与此相反——即结束 这个层次的操作,在上一层暂停之处恢复操作。
但是,怎样才能准确记住你在每一个层次中停在什么地方呢?回答是:你把有关的信息存储在一个堆栈里。因此堆栈起着表格的作用,它使你了解这样一些事情:(1)在那些未完成的工作中,你是在何处被打断的(行话:“返回地址”),(2)在被打断出你要记住的有关事项(行话:“变量约束”)。当你弹回去恢复某项工作时,堆栈保存着你的“环境”(行话:“现场”),所以你不会感到丢掉了什么。在打电话的例子中,堆栈告诉你在每个不同的层次谁在等候,以及你们被打断时你们的谈话进行到了什么地方。
这里顺便说一下,“推入”、“弹出”和“堆栈”这几个词来自自助餐厅中一摞托盘的视觉形象。通常在下面有一个弹簧,将最上面的托盘几乎保持在一个固定的高度。当你把一个托盘推到这摞托盘上时,这摞就往下陷一点儿——而当你从那一摞上拿下一个托盘时,整个一摞都往上弹一点儿。
之后书里还给出了一个新闻里面连线前线记者的例子来做比喻,在日常生活当中其实类似结构的事情并不算少见,但我们并没有因此而感到神奇或者惊讶(跟直接看到那种直观的表现递归的画面时感受的不一样)。作者认为因为我们下意识中很容易就把握到回溯机制,因为往往我们在经历这些情况的时候,没一个层次都是截然不同的。而一旦当没一个层次都变得相似的时候,我们立刻就会找不到方向。(有时候有没有过既视感?)
所以三个术语当中的前两个是用来描述递归当中穿越不同层次的的,而第三个涉及到非常重要的回溯机制(保证能够回到正确的层次,一旦迷失可能就会出现无穷递回)。
简单的递归结构,每一个层次都是相似的,我们一眼看到那个结构会感到非常的神奇,会被混淆我们自己的感觉以至于迷失方向。而这还只是最直白简单的表达方式,更复杂的递归结构,没一个层次甚至是完全不同的,以至于甚至自己可能意识不到自己正身处在递归结构当中。(这两者哪一个对人的冲击更大可能说不准,也许因人而异)。
实际上在思维当中,递归过程好像一直有在运作。比如说在音乐当中,书中说明,有音乐修养的人都具有着一个对于调子的“浅堆栈”。其目的在于帮助听众分辨音乐的主调,实际上每一个人听音乐都是递归地听音乐。音乐的调子不断转换变化带着我们的思绪跟着音乐走,一直走回最后的主调(回到源头),回到最上面的那个层次之后。
在一个完全终止当中我们叹了一口气,完美地结束时我们会有一种很明显的“如释重负”的感觉。用这个来解释我们听音乐、看故事、看电影等等(尤其是那种引人入胜的)好像都可以说得通。(可以用来解释我们的心态,当然以递归来比喻的话相对来说可能夸张了一点,但是有说得通的地方。比如我们喜欢深层次的挖掘和找寻一个作品的意义何在……)。
以递归地概念术语来描述音乐的话,转调可以理解为不同层次的穿越。音乐的起始和结束必然会在同一个调上,这个调就是主调,比如像是什么D大调卡农、C小调奏鸣曲、F大调三重奏等等。主调就是第一个层次,类似于上面那个打电话例子里面的客户A。然后在乐曲的进行过程当中为了丰富内容或者需要更好的效果,那么就会出现转调。那些“副调”就是穿越之后的其它层次。
上面说的转调特性等等,在乐曲当中必然是以一两个和弦作为转调和弦,比如说以E大调的主和弦转到G大调的下属和弦。通过转位的和弦或者变音作为桥梁从一个调进入另一个调。这里就是音乐递归当中堆栈的部分,有音乐修养的人对这个尤其敏感。他们有调性堆栈,当乐曲回到主调上面的时候,音乐堆栈就开始发挥作用了:
所有这些调子转换(有些是急剧的,有些是平稳的)的心理作用是很难描述的。这是音乐魔力的组成部分:我们能自动跟上这些转换。或者,也许是由于巴赫的魔力,他能够写出具有这样一种结构的曲子,这种结构如此自然优美,以至于我们根本弄不清究竟发生了什么。
……这部曲子展示出:作为音乐听众,我们没有及其可靠的,很深的堆栈。(另外一个例子是“无穷升高的卡农”。)——当然这一段原文也有可能遭到音乐专业的人或者音乐爱好者的反驳,就权当一个例子来看就可以了。
相比音乐来说,我们在语言上的心理堆栈能力要稍强一点。可能是因为音乐相对于语言来说形态更加抽象,越是简单直白我们越容易意识到递归结构,那么心理堆栈能力会更强。反之越是复杂抽象的话,我们甚至可能意识不到递归结构的层次,那么心理堆栈能力也会变弱。(不一定说完全意识不到,多多少少会有一些感觉,可能涉及到潜意识。但是表面上确实有的人甚至有可能没有意识到有什么不对劲)。
语言中的堆栈与语言的语法结构有关系,语法结构可以涉及建立一个非常精细的下堆栈。复杂语句会让递归层次变得更加复杂,那么维持语言下堆栈的难度也就越大。读书的困难就在这里——像是那些现代后现代的小说《2666》、《万有引力之虹》、《芬尼根守灵夜》……这些是比较极端的例子,因为长语句一般都会出现在文本语言上。而在口头语言上,大部分的正常口语都会尽量避免结构复杂化。一句复杂的长句子可以被截断成一句一句地简单的短句子。这样一来就不需要花太多的精力来维持语言上的堆栈。(语言堆栈无法维持的情况一般会引发一些让人啼笑皆非的效果——比如跨服聊天之类的,但是要注意,这里虽然两边不在一个频道上,但是在交流中的语言还是对上了)。
在计算机科学中,形式语言是用精确的数学或机器可处理的公式定义的语言。直观来说:某个字母表上,一些有限长字符串的集合。形式语言中的形式文法是描述这个集合的一种方法,之所以这样命名是因为其类似于人类自然语言中的文法。
形式文法描述形式语言的基本想法是,从一个特殊的初始符号出发,不断的应用一些产生式的规则,从而生成出一个字符串的集合。产生式规则制定了某些符号组合如何被另外一些符号组合替换。(回想开篇的时候书里给出的形式系统的字符串题目,公理、规则、定理三要素构成一个形式系统,形式系统的目的就是推导出其范畴内的全部定理)。
形式文法有四个分类系统,是由麻省理工学院语言学教授诺姆·乔姆斯基在1956年提出的乔姆斯基体系。这个分类谱系把形式文法分类成四种类型:1无限制文法、2上下文相关文法、3上下文无关文法和4正规文法。四类文法可以对应四个语言分类:递归可枚举语言、上下文相关语言、上想问无关语言和正规语言。
书中提到的递归迁移网(RTN)在这里涉及到的是形式语言当中的上下文无关文法。上下文无关文法之所以被取名为“上下文无关”是因为其产生式规则中总可以让一个字符被另一个字串代替,而且不需要考虑字符出现的上下文。
“上下文无关文法的重要原因在于它拥有足够强的表达力来表示大多数的程序设计语言的语法;实际上,几乎所有的程序设计语言都是通过上下文无关文法来定义的。另一方面,上下文无关文法又足够简单,是的我们可以构造有效的分析算法来检验一个给定字符串是不是由某个上下文无关文法产生的。——自维基百科”
递归转移网络(RTN)利用有限状态机的原理(为了研究有限内存的计算过程和某些语言类而抽象出的一种计算模型),把句子划分成若干种状态和带箭头的弧组成的状态图,每一种状态之间用弧来连接。其中有一个状态需要被设定为初始状态,在弧上可以标记终结符号(具体的词)和词类符号(名词、形容词、动词等)。而且可以指定一个RTN网络名称的非终结符号,状态中的一个子集叫做结束状态。
这样一来通过递归迁移网就可以很好地解决了上下文无关文法的辨别问题。不过这个对于自然语言的处理还是不完善的,上下文无关文法对于自然语言的处理不能分析句子的成分,也没有办法分析上下文之间依赖性的问题。
到此再来看看书中描述的RTN和给出的例子,这部分就是在说递归程序的运作。通过RTN构造出来的名词短语我们看图就会发现,其算法结构很清晰,思路也很明了但是执行过程却让人有些费解。比如说“花哨名词”的那个图,水平的给出一个指示代词、一个量词、一个形容词,再来一个名词然后结束程序运作。结果是得到了一个短语:“那件愚蠢的桌子”(这是书里给的例子,那些集合当中的词可以自由的调用),但是后面提示了,图片中的弧线代表着不同的运作路线,那么省略掉指示代词、量词、形容词就得到了:“桌子件”。又或者跳过指示代词和量词就有了:“愚蠢的桌子”等等
而这只是一个层次,注意“花哨名词”当中的“形容词”节点还有“名词”到“量词”再到“形容词”的过程都是可以无限循环的。而在图片中的下一个例子“豪华名词”当中,递归结构就表现得更明显了。
注意“豪华名词”的那个过程之中也出现了“豪华名词”,也就是说根据图中的程序运作,当我们进行到过程的中间时,我们又要回头开始一边程序运作,但这并不是循环的,而是在节点处保存了上一个程序的运作进程然后展开了一个新的“豪华名词”的程序。当我们成功走完了“豪华名词”的运作结束之后,我们带着生成的名词短语回到上一个层次当中再继续运作下去一直到结束。这是一个良性的运作,比如:开始—及物动词—豪华名词(花哨名词)—“的”—花哨名词—结束
开始—介词—豪华名词(开始—介词—豪华名词(开始—介词—豪华名词(开始—介词—豪华名词(开始—介词—豪华名词……))))
递归迁移网当中包含着多个路线的程序运作,虽然有递归性质,但因为其中有一条始终是能到达“结束”子集的,所以只要是在随机选择路线的情况下,程序总是能够成功运行结束的。同样的衍生到前面提到的关于整个递归的概念也是如此,递归地定义也是如此,这是规避了“怪圈”的方式,不需要完全的避开自指,只要定义当中有一部分避免了自指,推理过程就能结束。(万事万物皆有始有终)。
前面提到关于递归定义的部分,会让粗心的人产生无穷回归的错觉。这部分其实和循环定义有点类似,循环定义的例子比如:“左的定义为右的反义词,右的定义为左的反义词”。假设对于“左右”的概念完全不了解,这就成了循环定义。但只需要对其中一部分的概念有所了解,则循环就会打破。这就是在递归过程中只有在迷失了方向的情况下才会出现无穷回归(也是很有可能的,比如刻意进行循环或者是无意间进入了自己不了解的部分从而反复循环)。
RTN构造出的层次结构可以叫做“异层结构”,即不存在“最高结构”也不存在“控制器”。它既可以最直接的调用自身进行运作,也可以不同的几个过程之间互相调用——比如说那个“豪华名词”和“花哨名词”两个过程之间是可以互相调用的(“豪华名词”当中的一个子集就叫“花哨名词”,那个子集就可以直接扩展“花哨名词”那个过程的层次)。
同时RTN还具有扩展节点的方式,也就是前面提到的递归方式“豪华名词”过程中的“豪华名词”节点直接扩展成一个自身过程的小副本。这不需要一个无穷大的图就可以完成,因为直接在节点处进行推入和弹出操作就可以了。不过不论如何其中都必须有一个通向结束的通道无论间接或是直接,否则的话就变成了无穷回归,那就不存在任何操作执行了(因为程序一直在展开)。
无穷的几何结构可以用同样的方式来定义——就是一个结点一个结点的扩展。比如,我们来定义一个无穷的图案,称作“图案G”——这一段来自书中的原文。在后面的展开中,提到“图案G”是一个类似于树状结构的无穷图,这可以从“图案G”的展开看出来。
这里联想到树状结构,但是首先树状结构和书中“图案G”的树状图是颠倒的(其实这个问题不大,可以把“图案G”倒着写)。很明显这是一种将阶层式的构造性质,以图像方式表现出来的方法。因为看起来很像是树和树枝分叉,所以以此来命名构造之间的关系。
毫无疑问树形结构就是一层次的嵌套结构,树形结构的外层和内层有相似的结构,所以这就可以用递归来表示。本身树状结构其实只是一个概念,可以用许多不同形式来展现。涉及到数学当中的时候,有关于图论和集合论的探讨课题,而在计算机科学中则涉及树状资料结构的讨论主题。
书中给出的“图案G”在每一个结点扩展的都是自身,而有趣的是当扩展到一定规模的时候就会发现,右侧的结点扩展出来的是斐波那契数列。
有那么巧合的事情吗?当然直接来看斐波那契数列就会明白了。首先是来看看斐波那契数列:
0、1、1、2、3、5、8、13、21、34、55、89、144、233……
在数学上,斐波那契数列就是以递归的方法来定义的。斐波那契数列是由0和1开始,之后的斐波那契系数就是由之前的两数相加而得。斐波那契当初在描述兔子生长的数目时候用上了这个数列:第一个月初有一对刚诞生的兔子,第二个月之后(第三个月初)它们可以生育,每月每对可生育的兔子会诞下一对新兔子,兔子永不死去。
这部分内容我们在高中的数学里就学过了,不算是多深奥的内容(虽然当时学的时候可能没觉得多有意思或者没有想太多——也许也有人感兴趣的)。
FIBO(n)=FIBO(n-1)+FIBO(n-2) 当n>2
这组方程式就可以用前面的递归迁移网来表示,书中给出了图案:
“要想计算FIBO(15),就可以对上面RTN(递归迁移网)定义的过程进行一系列的递归调用。你随着下降的n值倒推到FIBO(1)或FIBO(2)(已明显的给出了),这个递归定义就终止了。这种倒推的计算方法有点笨拙,其实你可以很容易地从FIBO(1)和FIBO(2)开始,一直向前推:不断地加上最新的两个值,直到FIBO(15).这样的话你就无需对堆栈进行回溯了。
图案G还有一些比这更令人惊异的性质。它的整个结构可以仅用一个递归定义来编码,如下所示:
函数G(n)是如何为前述树结构编码的?很简单。对每个n算出G(n),并把计算结果放在n下面以构成一棵树,就可以重新建立起图案G。
……递归几何结构有着优美的规则性,恰好与递归代数结构对应。”
函数可以看作是一种机器或者黑箱,它表现的是一种数学关系。数学领域内的对应、映射、变换通常算是函数的近义词。由于其定义具有一般性,几乎所有的数学分支里函数都是基础概念(初中就学过这些东西了……虽然后来不少可能都忘了)。
递归概念运用到数学领域当中去会产生一系列的神奇现象,比如斐波那契数列等等。看似只是一种单纯的数字排列,但是我们都注意到在这排列当中有着某种规则性,规则性代表的是背后的意义。而特别是类似于这种的形式最引人深思,因为表面上看这种排列杂乱无章,以至于我们并不能理解其意义是什麽,但是在混乱的表面之下一定有深层次的含义和微妙的规律性。通过各个概念之间的串联和发展不断的有新的发现,这可能就是意义之所在。
但是一般具有递归性质的图形或者函数等等,递归定义只是一般,还有另外一半,就是整个结构的起点。书里管这个叫“基底”。比如说斐波那契数列基础设定值为1,从o和1开始,再按照递归定义我们就获得了斐波那契数列(新的数是前两个数之和)0、1、1(基底)、2……。
但是如果改变一下,把基础设定值改为3则变成了2、1、3(基底)、4、7、11、29……这叫卢卡斯数列,由法国数学家爱德华·卢卡斯发明,他以研究斐波那契数列而著名。当时他在研究以他自己的名字命名的整数序列——卢卡斯数,同时他将其与斐波那契数列一起研究推广。卢卡斯数列可以算是一个斐波那契数列,但是由于初始的卢卡斯数和斐波那契数列不同(基底不同),所以卢卡斯数和斐波那契数在性质上是有些不同的。卢卡斯数列中,相邻的两个卢卡斯数之比收敛于黄金分割比。
(这里插一段趣闻:据说当年爱德华·卢卡斯的死亡很不寻常,当初在法国科学进步学会的年度会议的宴会上,一个侍者掉了一个餐盘,碎瓷片把卢卡斯的脸划破了。过几天后,他死于可能由败血病引起的严重皮肤感染。——有人暗杀?)
不论是无限延展的树形图或者是斐波那契数列,或者是递归函数图等等,虽然它们都会无限展开,但是任然有一个“骨架”。按照书中的描述来看,递归更像是一种“生成方式”。通过对自身的变形和嵌套达到了一种接近于“无中生有”的效果。那些递归函数得到的几何图形可以很明显的看出来,在初始的值有了些微改变,则整个图就截然不同。这就是值得注意的神奇之处。
前面说的这种关系甚至可以拓展到物理学领域当中去,涉及到很多粒子物理学方面都值得探讨。同一种基本粒子由于初始值的些微差别加上递归地结构性就创造出了宇宙万物的各种截然不同。这样看似乎是说得通的——当然由于证明问题,现在的任何结论只能看作假说。
:G图来自一个问题的高度理想化形式,这个问题是:“磁场中晶体的容许电子能是什么?”这是一个很有趣的问题,因为它交织了两个非常简单而又基本的物理现象:完全晶体中的电子和均用磁场中的电子。这两个比较简单的问题都得到了充分的理解,它们各自的典型解法似乎是彼此不容的。因此,看看自然如何把它们调和起来,这将会是很有意思的。结果表明,没有磁场的晶体与没有晶体的磁场的确是有一个共同的特征:在两种情形中,电子都表现出周期性。于是,当两种情形合并在一起时,两个周期的比是个很关键的参数。
当然在书里已经指出了,这只是一个理想化的形式,实际上在实验室里面是看不到这种被展开的复杂结构的。G图只对理论物理有所帮助。
这里打算直接摘录一段原文内容:“现在我们来换一种眼光,在这种眼光下,整个世界都是建立在递归之上的,这涉及到了基本粒子的结构:电子、质子、中子、以及被称作‘光子’的微小的电磁辐射量子。我们将看到,粒子——精确的说法要用到相对论量子力学——是彼此嵌套的,对之可用递归来描述,甚至可用某种‘语法’来描述。
……一个粒子如果不涉及所有其它粒子就无法给出定义,而其它粒子的定义反过来又要靠最初那个粒子,等等。这样转来转去,构成了一个永不停止的循环。”
在理论当中可以单独的讨论一个基本粒子,而实际上是不可能的,因为那些基本粒子都互相纠缠到了一起去,有着交互作用。物理学家在讨论这些问题的时候涉及到“重整化”这个概念。
重整化(书里的翻译是重正化,可能是年代问题所以用字不同,不过是同一个概念。)是量子场论、场的统计力学和自相似几何结构中解决计算过程中出现无穷大的一系列方法。在早期量子场论的发展过程中,很多微扰展开的高阶项的计算结果都含有无穷大(没法算了)。重整化是解决这个困难的一个方案,简单来说就是在一个理论中如果有有限的无穷大项,就可以在拉格朗日量(描述整个物理系统的动力状态的函数,对于一般经典物理系统来说通常定义为动能减去势能。如果是在粒子物理当中,则含有更多的项目比如光速、静质量、粒子速度等概念)中引进有限数目的项来抵消这些无穷大项,所以被叫做重整。但如果一个理论中含有无穷个发散项(无穷大),这就变成不可重整了。
“关键在于一个物质粒子——一个重正化的粒子——涉及了(1)一个裸粒子、(2)一大群虚粒子,它们在乱七八糟的递归中紧紧地纠缠在一起。所以,每个真实粒子的存在都涉及到无穷多其它粒子的存在,后者组成一团虚‘云’,在前者传播时围绕着它。当然,云里的虚粒子也拖着自己的虚云,如此下去,以至无穷。”
电磁相互作用的“语法”可以直接用递归迁移网来定义。而随后就发现这些基本粒子的复杂程度就和无穷展开的递归图案一样,炫目又眩晕。(我们只能逼近极限,但是我们到达不了极限。)
任何事物包括人,自身的一部分和自身的关系可以怎么描述?书里提到了音乐体裁的卡农、艾舍尔的作品《鱼和鳞》和《蝴蝶》,包括前面的“G图案”作为例子。——一个东西的部分是这个东西自身的副本。
很多时候自身副本并不能代表自身,就像是集合的元素不等于集合本身。我们身上的一块肉不等于我们自己,卡农的对位变化得到的副题并不等于自身的主题……首先从直观上就能感受到区别,自身的副本之于自身除了原样复刻以外,也存在着大小的变化、扭曲、镜像等待变换。这些变化有些时候甚至可能完全改变了外貌。可是我们依然知道互相之间的关系,在足够抽象的范围内更加明显。因为这是自身的副本和自身的同一性始终保持着。
书中分析了艾舍尔的两部作品《鱼和鳞》和《蝴蝶》,前者表现出了自身副本与自身的关系。鱼鳞不等于鱼的自身,但是当我们把概念抽象到一定层次的时候,紧密的联系就出现了。夸张点说,细化到DNA层次,鱼鳞和鱼身上的一致性就表现出来了。因为鱼鳞当中包含着整条鱼完整而复杂的DNA,但是到这一层面的联系可以说是已经非常抽象了,艾舍尔通过画中的曲线轮廓打破了形态(宏观微观之间)的联系。确实可以说艾舍尔的画中蕴含着某种真理。
书中拿《蝴蝶》和《鱼和鳞》这两幅画一起来举例子,而这表达的含义在副本和同一性这一层面上真好是相对的。《鱼和鳞》在表现同一性的关系上隐喻了宏观和微观之间的差别,而《蝴蝶》当中涉及到的关系更进一步,更加抽象。画面中蝴蝶之间的相似不在于其细节部分,而是在——用书中的话说:“功能块”。蝴蝶的同构关系的抽象性在这里就表现出来了,不是以大小比例或者外部轮廓等等形象化的联系,而是抽象的“功能”关系。
这种对于同一性的延展突破了“规模”的限制,就像递归地展开一样。在形而下层面上我们已经到达了尽头,但是我们却可以从形而上的层面中跨过这一限制(无穷展开)。
“我们会不断的探讨‘异中之同’,以及下面这个问题:
在讨论递归的一章里出现这个问题并不是偶然的,因为在递归这一领域里,‘异中之同’扮演着一个中心角色。递归是以不同层次上同时出现的‘同一’的事物为基础的。但在不同层次上发生的事件并不是完全相同的——确切地说,我们发现了它们中间的某种不变的特征,尽管它们在很多方面都不同。”
这一段内容涉及到了递归运用到计算机编程当中的内容,在计算机科学当中,递归方法就是指通过重复把问题分解为同类的子问题而解决问题的方法。用这种方式可以解决很多计算机科学领域中的问题,所以这个概念十分重要(这也可能是为什么这个章节这么长的原因了)。绝大多数程式语言支持函数的自调用,在程式语言中函数通过自调用来进行递归。所以从计算理论上可以证明,递归的作用完全可以取代循环,因此很多的函数程式语言都是用递归来取代循环的。
电脑科学家尼可拉斯·威尔特说过:“递归的强大之处在于它允许使用者用有限的语句描述无限的物件。因此,在电脑科学中,递归可以用来描述无限步的运算,尽管描述运算的程序是有限的。”
但是要注意递归并不能完全无限地运用,因为程序的堆栈空间终究是有限的,一旦在实际的操作中进行了无限递归,堆栈空间会因为满载而出现异常导致程序强制停止。不过可以设计保护措施,比如python当中可以自身设置限定递归地循环次数,但该次数可以更改。这样就可以不断抛出异常。所以在设计递归程式的时候,就一定要记得设定一个表达式判断来告诉程序是否继续递归下去。
这种程序的运用,比如说前几篇笔记当中提到的关于那个判定“素数”的形式系统,如果拿来编写程序,就可以用一个递归的程序来进行判断。大部分情况下这种“循环”操作都是存在一个终止条件的,一旦程序满足条件(要么得到否定结果,操作终止。要么设定值未知数通过所有测试,得到肯定结果而弹出操作)。
但是无限制循环的情况是存在的,书里管这个叫“自由循环”并且提醒这种情况是很危险的,因为是终止循环的情况会不会出现我们不知道,一旦开动起来可能就停不下来了。把计算机丢在“自由循环”当中,有很大的可能性计算机最后就报销了(程序无限运作,但是硬件怕是吃不消了)。
“有界循环与自由循环之间的差别是计算机科学中最重要的概念之一。我们将来会用一整章来讨论它:‘BlooP和FlooP和GlooP’。”
程序设计当中的递归还可以互相调用,这个在前面是说过的。一个大的递归程序当中的不同结点可以扩展成小的递归程序。用书里的话来说:“这种程序结构很典型……这种嵌套的循环也出现在一一般事务的组合指令中,以及像是编织或挑花这类的工作里——其中,很小的循环在较大的循环中多次重复,而后者也是重复进行的……尽管底层循环的结果或许不过是几针,高层循环的结果会是一大块布。”
后面的“子程序”或“过程”其实这一部分在前面的例子里面已经说了,那个递归迁移网的例子。简明来说,就是程序设计中的模块化,把一组操作集中到一起当作一个整体。
接下来书中说到的这个和递归迁移网(RTN)有所关联的扩展迁移网(ATN)。这种自然语言自动处理的方法,是在1970年由美国人工智能专家W`A`伍兹提出来的。这个相当于是功能有所扩展的递归迁移网,在递归迁移网的基础上附加上若干控制技术。前面的RTN在操作中对通道的选择是没控制的,而ATN中配置了参数等设备,能对通道的选择进行控制。ATN的附加控制可以控制对于语义的制约,这样就不会出现前面递归迁移网里——“那件愚蠢的桌子”这种完全没意义的词语。
ATN在人机对话和机器翻译的研究中得到了广泛的应用,在只能信息检索系统、响应生成系统、言语理解系统等方面都有较广泛的应用。许多自然语言信息处理的专用软件都是根据ATN的原理设计的。但是ATN受语法的制约很严格,所以没有办法接收一些不合语法但有实际意义的语句。
来说说人机博弈的事情,必须强调一点的是,这本书出版的时候(中译本是1997年出版的,但是1985年的时候作者本人才刚刚知道有人准备翻译中译版),深蓝还没有下赢国际象棋(深蓝下赢国际象棋是1996年的事)。所以当书中提到相比计算机下棋人还是要高明得多的时候,请不要嗤之以鼻。(好像设计人工智能方面话题的时候,对人的鄙视似乎是一个普遍态度……)
书中明言:第一流的棋手向前看的步数,与大多数下棋程序相比还是很少的——然而人还是高明得多!
其实下棋程序对于步骤的预判也不是单纯的预测或者计算概率,早期时候的运算也是类似于递归的形式,计算机想自己,把自己想成对手再把对手想成自己。但这个递归层次也是有一个参数作为限制的(否则下不了棋)。书中提出一个叫做:“超前搜索树”的生成。一步棋是自身,出发对手的应招是主枝,自己的在应对是分枝。但是这个“超前搜索树”不能是彻底探索的,因为这么一来就不下棋了,依然要从中选择有限的下棋步骤。
前不久AlphaGO下赢围棋的事情把不少人给“吓着了”,人工智能的话题一度甚嚣尘上。在现在这个时候再回过去看当时这本书当中的内容,有人会表示嗤笑也可以理解(年代的差距)。可是人机博弈这件事情真的有我们以为的差距那么大吗?
1996年2月10日,超级电脑深蓝首次挑战国际象棋世界冠军卡斯帕罗夫,结果以2比4落败。比赛在2月17日结束。之后研究小组对深蓝进行了改良设计,于1997年5月再度挑战卡斯帕罗夫(《集异璧》的中译本刚刚出来,同月的事情),比赛在5月11日结束,最终深蓝电脑以3.5比2.5击败卡斯帕罗夫,是首个在标准比赛时限内击败国际象棋世界冠军的电脑系统,而IBM在比赛后宣布深蓝退役。
1997年的深蓝电脑可以搜索预判往后12步的棋,而一名人类的国际象棋高手可以大概预估出后面10步的棋。深蓝电脑在当时引起了和今天AlphaGO差不多的争议,人们开始恐惧,害怕有一天电脑会战胜人类。然而整件事的争议一直都在。
卡斯巴罗夫在比赛后曾怀疑电脑在棋局中获得了人类的帮助,并要求重赛,但是IBM拒绝了。这件事让人怀这件事让人怀疑IBM背后是不是有什么猫腻(不下评论,只做陈述)。03年有一部纪录片《游戏结束:卡斯巴罗夫与电脑》就是为此而拍摄的。
再来说说AlphaGO,它是以蒙特卡洛树搜索作为基础,结合两个深度神经网络。一个以估值网络来评估选点(大量的),另一个以走棋网络来选择落子。电脑结合树状图的长远推断(这个原理一直都是),启发式的搜索算法加上海量数据的训练提高下棋实力。都知道围棋要比一般的游戏困难得多,电脑程序当中要涉及到的分支因子大大多于一般的游戏,而且每一次落子对于结果的评判也是飘忽不定的。传统的人工智能搜索算法在围棋当中很难有效。
1997年的“深蓝”之后,经过18年的发展,棋力最高的人工智能围棋程序才达到了大约业余5段的围棋水平,而且在不让子的情况下打不赢职业棋手。2012年四台电脑同时运行的Zen程序再让4子和让5子的情况下两次击败日籍九段棋手武宫正树。2013年,Crazy Stone在让4子的情况下击败同段位日籍棋手石田芳夫。
AlphaGO的研究计划启动于2014年,它的表现相比于之前的围棋程序有了显著提升。研究思路有了突破,在和前两个顶尖围棋程序对局中,AlphaGO取得了压倒性的程序。AlphaGO的分布式版于AlphaGO单机版的对抗有百分之七十七的胜率。
2016年3月,通过自我对弈数以万计盘进行自我强化练习之后,AlphaGO以4比1击败李世石。当时的比赛规则采取中国围棋规则。
16年到17年AlphaGO经过再度强化,以匿名账号在网上进行快棋对战,挑战中韩日的一流高手,测试结束时60战全胜。
17年中国乌镇围棋峰会,AlphaGO大展拳脚,获得团战胜利,并且以3比0击败柯洁。比赛结束后AlphaGO宣布退役。
实际上并没有我们想象中的差距那么大,即使战败之后,围棋高手们在复盘时依然觉得不是完全没有胜算。AlphaGO一旦面对没有对弈过的对手时很可能会失去很大优势(AlphaGO匿名下棋时和柯洁已经对弈过)。至于说对于人工智能的恐惧到目前为止还算是处在杞人忧天的情况下,侯世达本人也表示目前的程序仅仅只是做一些很厉害的事情,但并不能等于智能。
人机博弈这一概念很早就已经提出来了,然而现实的进入其实远远低于理论上的预估,套用这一页侯世达给出了一个自己的定律:“做事所花费的时间总是比你预期的要长,即使你的预期中考虑了侯世达定律。”对于人工智能的展望可能也是如此。
这一章节花了极大的篇幅来讲述“递归”这个概念和运用,之前的“递归可枚举集”的概念在这里也有关联。递归可枚举集这个过程是:新的东西按照一定的规则从已有的东西中生成出来。侯世达对此有所期待,因为通过这个过程深想:“复杂到一定程度的递归系统,其能力可能会强有力得足够打破任何事先规定下来的模式。这不就是使智能称其为智能的性质之一吗?与其仅仅考虑由可以递归地调用自身的过程组成的程序,为什么不考虑的更复杂一些,设计出可以修改自身的程序——可以作用于程序本身,扩展、改进、推广、加固程序的程序?智能的核心之处大概就是这种‘交织的递归’之所在”。(目前的深度神经网络等等很厉害的程序看起来表面上是做到了(一部分),但是实质上离这个意思可能还差的挺远)。
果然像之前预感的一样,这一篇的笔记超过上一篇笔记很多很多。因为原书当中这个章节的内容就很多,而且涉及到很多专业化的计算机学科等多方面的内容(错误有多少就不敢想了,就好像拿着不及格的卷子不敢看错题一样)。至于人机博弈这类问题不打算做什么评判,只要涉及到“比较”的问题,现在都会让人争得面红耳赤,但是这其实并不重要。当然笔记那么长,能愿意看下来的这里都表示万分感谢。
到目前为止全书两百多页的内容,算是啃掉了五分之一,照这么看笔记估计能连载到明年(。
评论区
共 18 条评论热门最新