从模仿游戏看机器的智慧
陈凯 王嘉忱
20世纪50年代,阿兰·图灵发表了在人工智能发展史上具有里程碑意义的《计算机器与智能》一文,著名的“图灵测试”就源自此文,图灵认为,若测试者无法通过对话的行为区分出机器和人,便可作为机器具有智能的判定标准,这个观点引发了科学界和哲学界广泛和持久的讨论。本文的重点,是想说明所谓的“图灵测试”不只是一个思想实验,“图灵测试”中提出的模仿游戏,对于理解机器何以能够借由运行程序而拥有通用计算的能力,具有很强的启发作用。
● 用人来模仿人
图灵的论文中,在提及“图灵测定”之前,先引出了以判别性别为目标的模仿游戏,经笔者实践检验,是完全能在课堂中照样实施的。实施大致过程如下:在班级中各选择一位男生和一位女生,随机称为甲和乙,将他们请到教室外的走廊中,班级中所有同学都可以是测试者,由教师作为中介将测试者的问题传达给被测试者甲或乙,甲和乙的回答由教师代为转达给留在教室中的测试者,在一系列的对话结束后,由测试者判定甲和乙的性别。对话时要注意,不能询问只有被测试者自己知道的隐私问题。
根据图灵的论文,被测试者要做的,并不是证明自己的性别,而是尽量让测试者产生难以分辨的混淆,所以,在正式开展实验前,可以先示范性地给出一些对话的例子,如作为男性的被测试者,可以这样参与对话来掩饰身份:
测试者:请问甲,我们班中哪个男生是最帅的?
被测试者甲:当然是我们老师了。
测试者:请问甲,你认为自己漂亮吗?
被測试者甲:你觉得我可爱吗?
类似的例子有助于提高教学活动的效率,因为笔者曾在活动中遇到这样的情况,有学生提出的第一个问题是:“请问甲,你认为自己漂亮吗?”被测试者甲回答:“我很漂亮!”于是全班一致认定某甲是男生。模仿游戏大约要持续半节课的时间,虽然耗时较长,但对于人工智能教学后续内容——尤其是普适计算对人工智能实现的重要性——的顺利开展,具有很重要的铺垫作用。
● 用机器来模仿机器
图灵的论文中,在介绍完判别性别的模仿游戏后,就开始讨论关于机器参与到模仿游戏对话中这一问题。考虑到在这个地方,图灵的思维跳跃可能大得让普通人难以接受,所以在教学中,可以补充一些有趣的实验,逐步引导学生思维走向深入。
实验要用到Notepad++这个文本编辑工具,Notepad++具有的宏的功能,就使得教学过程中,即便不编写程序代码,也能体会到人工智能实现中的一些关键性的思想方法,适用于程序算法学习水平较低或水平不一致的学习群体。当然,使用其他带有宏功能的文本编辑软件也一样能达到目的。
机器模仿实验1:用查找和替换模仿搬木头
实验很简单,就是通过反复执行查找和替换操作,将一串只有0和1字符串中的所有的1,聚集到字符串的一端,如初始时字符串是0100100010,最后需要达到的效果是0000000111。
在这个实验中,查找和替换的规则很简单,就是查找“10”,替换成“01”,在反复执行替换时,能看到某种动画片一样的效果。所以,也可以称为搬运木头游戏:用查找和替换操作,来模仿木头的搬运。
机器模仿实验2:用跳舞恐龙模仿查找和替换
这个实验仍然采用初始字符串:0100100010。然而这一次,是将这些数字想象成一群在跳舞的恐龙,其中有的在快速转圈,用俯瞰的角度就是“0”的形状,有的没有转圈,用俯瞰的角度就是“1”(这里自然需要一些想象力)。但在舞蹈家恐龙的队列旁边,还有一只指挥家恐龙,指挥家恐龙也通过跳舞来指示跳舞恐龙的行为,指挥家恐龙用字母q表示,其状态也用数字表示,为了看起来方便,就做成表格的样子(如表1)。
指挥家恐龙是这样工作的,如果它转着圈,并且它所面对的恐龙也转圈,那么,它自己就继续转圈,它对面的恐龙也继续转圈,然后指挥家恐龙右移一个位置。指挥家恐龙的这一系列动作可以用一串符号来表示:q0,0:q0,0,>。
其中,q开头的数字代表指挥家恐龙的动作,没有q开头的数字代表普通舞蹈恐龙的动作,右箭头表示指挥家恐龙向右移动。动作完成后,跳舞的队列就变成如表2所示的样子了。
指挥家恐龙总共有4套指挥动作,除了q0和q1,可以将q2看成是恐龙甩脑袋,q3看成是恐龙摇头摆尾,如果预先设定好指挥家,遇见普通舞蹈家后动作变化情况如图1所示。
举例说,q1,0:q2,1,<这串符号的意思是,不转圈的指挥家遇见转圈的舞蹈家,则指挥家变成甩脑袋,舞蹈家变成不转圈,然后指挥家向左移动。
可以看出,某一特定时刻,总能匹配到其中的一组规则,所以接下来舞蹈队列的变化如表3~表5所示。
这里就能看出,这群恐龙只是看上去在跳舞,其实它们是在查找所有的“10”并将其变成“01”,如果有耐心一直观看节目到最后,这列跳舞恐龙最终就变成了这样:0000000111。
仔细想想,这些跳舞恐龙只是看上去在跳舞,其实它们在执行着查找替换的操作,并且,它们只是看上去在执行查找和替换的操作,其实正在表演搬木头。如果把恐龙跳舞模型真的用实物制作出来并运行起来,那么它其实拥有一个很响亮的名字,叫做图灵机。
机器模仿实验3:用查找和替换来模仿跳舞恐龙
接下来又是Notepad++出场的时候了,可以在Notepad++中设置初始字符串如下:
_q00000000111_
其中,下画线表示没有恐龙,而列首的q0当然就代表指挥家恐龙了,因为字符串是一维的,所以只能把指挥家和舞蹈家并列在一起了,但这并不影响指挥家的工作。
然后,可以做一系列的查找替换操作,由于操作数量有点多,所以可以在教学前,将这些查找和替换操作预先设置成宏,然后就可以在Notepad++自动执行了(如图2)。
如果反复执行上述查找替换操作,那么最后字符串就变成了:_q00000000111_。如果没有被绕晕,那么就能发现,上述字符串的查找替换动作,实际上模仿了恐龙的舞蹈动作,然后,恐龙的舞蹈动作,实际上模仿了查找替换动作,然后,查找替换动作又模仿了搬木头的工作。
到这里可以解释一个问题,程序的本质是什么?用比喻的方式说,程序就是一系列的规则,一个机器可以根据这些规则模拟出一个执行某特定任务的虚拟的机器,这样,这个机器就具有普适计算的能力了。
● 用机器来模仿人
接下来是思考一个可能让人对自己智能产生怀疑的问题,假如让人在头脑中玩一个用字符串模仿搬木头的游戏,并将整个字符串变化的过程在头脑中依次显现,那么,为什么人的头脑能够做到这一点?尽管搬木头很简单,但问题的关键是,人的头脑是如何完成这个模拟和想象工作的?这可不是能够简单回答的问题。
参考上述机器模仿实验3,所谓的搬木头只是一种模仿的表象,而实质只是一种查找替换操作,问题是这个查找替换操作其实也是表象……图灵认为,所谓的智能其实是一系列模仿过程的计算结果(但哥德尔并不同意这一点,这里就不进一步展开讨论了)。
简单来说,人是具有玩搬木头游戏的智能的,但那其实是神经元进行计算和模仿操作的结果。同样,机器也可以借助计算和模仿,达到与人同等的搬木头游戏的智能。那么扩展想一下,人所能做的每一个看上去有智能的活动,其实机器都能模仿。围绕这个观点,可以产生出一系列有趣的问答,这些开放性的讨论未必一定要有标准的结论,讨论的目的是激发学习者积极主动的思辨,例如:
问:为什么能模仿有智能的行为,就判定它有智能?
答:那么,除此以外还有其他判定办法吗?
问:我认为我的行为是真的有智能的,不是模仿出来的,这怎么解释?
答:你怎么可能证明这一点?
问:我能知道自己在搬木头,机器知道吗?
答:你通过观察自己的思维变化才知道这一点,何以确定将来的机器做不到这一点?另外,你是否想过你头脑的神经元是否知道它們正在搬木头呢?
……
若是能引发激烈的交锋,那便是十分理想的课堂状态了。但教师终究还是要从纷繁的观点中找出共识,为教学活动进行总结。笔者自己的总结是:①可以用一个机器,来模仿出另一个完整的机器的行为(这其实是图灵论证的结果)。②被模仿出来的机器,不会思考自己是否是模仿的结果,也并不会思考,自己的行为有可能进一步模仿了其他机器,到目前为止,这是机器和人不同的地方。