计算思维的方法观
2016-05-14王荣良
王荣良
思维与意识:计算思维无法绕开的话题
2016年1月28日,一则谷歌新闻刷爆朋友圈:谷歌旗下DeepMind公司研发的围棋程序AlphaGo击败了法国国家围棋队总教练、欧洲围棋冠军樊麾,AlphaGo五战全胜。这是人工智能领域的重要进展。(截至发稿,AlphaGo与李世石的围棋大战落下帷幕,人工智能以4:1赢得了胜利——编者注)
计算机和人类在棋类中的较量已不罕见,在三子棋、跳棋和国际象棋等棋类上,计算机都先后完成了对人类的挑战。值得一提的是,1997年的人机大战,当时IBM公司研发的超级计算机“深蓝”战胜了国际象棋冠军卡斯巴罗夫。不过国际象棋的算法要比围棋简单得多,国际象棋中取胜只需“杀死”国王,而围棋中则用数子或比目的方法计算胜负,并不是简单地杀死对方棋子。
AlphaGo的获胜震惊了围棋界,对拥有2500多年历史的围棋而言,计算机在此之前从未战胜过职业棋手。AlphaGo的获胜也震惊了计算机人工智能领域,围棋看起来棋盘简单、规则不难,纵横各19条等距离、垂直交叉的平行线,比赛双方交替落子,目的是在棋盘上占据尽可能大的空间,但围棋比起国际象棋的困难点在于,它要求学会察觉棋盘上布局的微妙模式,而不是仅仅计算不同棋局状态下的权值。DeepMind公司宣称其采用了政策网络(policy network)和价值网络(value network)两种深度神经网络,支持机器深度学习,人工智能变得更强大了。
计算机技术正在节节逼近拥有高级智慧的人类。然而,大多数人至今仍在怀疑计算机是否真的能“看清”摄像头前形形色色的真实世界,或者通过麦克风“听懂”说话声。尽管计算机处理数据的速度极快,但对外界的感知能够与有意识的人类一样吗?
“深蓝”计算机可以战胜国际象棋大师卡斯帕罗夫,AlphaGo可以战胜欧洲围棋冠军樊麾,但是,这些计算机不一定能够对我们生活中习以为常的现象进行合理的判断。例如,让计算机“看”一幅蓝鲸蹲在东方明珠塔顶的图片,它不一定能及时发现错误。而这些问题对一个学龄前儿童来说,却不是一个难题。
这就说明,人的意识及其对应的思维活动与计算机所采用的方法有很大的不同,计算机并不能具备意识,远没有达到能够思维的程度。计算机所表现出来的智能,是靠人类赋予它的方法来实现的。
人类具有意识和思维。街上走着一位美女,男士一般都会回头多望几眼,这种行为往往是不由自主的,是一种本能,也是一种潜意识。这种潜意识是非常直接的,一般不经过大脑思考,是由感知造成的第一反应。潜意识的形成来自于人的自然属性,是物种进化与长期文化认同后内化的结果。当外部环境造成的刺激直接迎合上自身内在的需求与认同时,脑部有关神经元放电刺激行为神经与内分泌神经,后面的行为便自然产生了,其反应时间几乎为零。
除了潜意识外,人类还具有后建意识,就是高层次的理性意识,这是与地区文化背景和本人知识储备有关系的。例如,一个人在商店里买一件衣服,首先要选喜欢的颜色、式样,这是审美问题,其次要看价格是否能承受得起、是否合身等,这里面有一整套思维模式,包括辩证取舍、价格比较、购买缘由等,到最终决定是否购买再到执行。这一过程是理性意识支撑下的思维决策过程。可以想象,人的思维决策系统是一个立体网状结构,也可以比喻成知识体系的信息通道。当人根据目的开始建立理性意识时,思维系统就高速运转,像计算机的CPU一样开始在硬盘里搜索需要的信息,即在个人的知识体系中不断比较筛选后建立起意识,在符合心理认同后开始执行。这里,心理认同是很重要的一个环节,当心理不能认同时,这种意识只能成为一种一闪而过的意念,不会付诸行为。
现在回到计算思维。从对AlphaGo的讨论可以发现,计算机并不具备意识和思维,但AlphaGo的出现之所以在业界引起震惊,正是因为它采用了深度学习技术,向着人类的意识与思维逼近,其表现更为接近人类的实际问题解决方法,尽管这与“人类级别的人工智能”还相距甚远。而从有关人类的意识与思维的讨论中,我们可以发现,计算思维应该是人类的思维,是一个人储备了计算学科相关知识以后在理性意识支撑下的活动。
计算思维方法:计算思维教育的内容
人们很难描述自己的思维。在完全清醒的时候,我们通过大脑考虑一些事情,这是在思维;当我们睡着的时候,有些事情也仍会萦回脑际,我们把这种现象称为梦境;我们也会做白日梦,是一些杂乱无章的思绪;或者有时候在我们头脑中出现不能控制的一系列观念或想法,这是不是思维,却很难讲。
杜威在《我们怎样思维》一文中提出反省思维(reflective thinking),这种思维是对某个问题进行反复的、严肃的、持续不断的深思。其一,反省思维是由一系列连续的被思考的事情组成的,反省思维是一个过程,这些事情不是偶发的,而是有前后关系的,前者事件决定后者,后者是前者正当的结果,受前者的制约;其二,反省思维所涉及的事情通常不是对事物的看见、听到、触摸等直接观察记录,而是通过思考获得的,这也符合思维间接性的特征;其三,反省思维不只是在头脑中反映一系列的虚构故事,而是有目的的,它必须得出一种结论,这一结论必须是通过思考得以证实。通过专心的思考,把一团乱麻似的思考弄得顺理成章,把含混不明的思绪弄得一清二楚。
那么,思维是如何在大脑中形成一系列的事情,从一件事情连接到另一件事情的呢?这就需要方法。方法是人类认识客观世界和改造客观世界应遵循的某种方式、途径和程序的总和。在思维过程中运用的方法可称为思维方法,是人们通过思维活动为实现特定思维目的所凭借的途径、手段或办法,也就是思维过程中所运用的工具和手段。例如,三角形内角之和,我们反复测量不同形状三角形的内角,发现三个角之和约等于180度,我们可以推断出:任意三角形的内角和可能都等于180度。这里,大脑使用的方法是归纳法,是从个别事实推演出一般的逻辑思维方法。如果我们要严格证明“任意三角形的内角和等于180度”(如下图),需要采用演绎的证明方法,运用已知的定理,先证明“∠1=∠A”、“∠2=∠B”,从而一步一步推演证明“三角形内角和等于180度”。
抬起头,观察天空,从云朵的变化可以推测天气的变化。作为探索活动,通过观察,然后对观察的数据进行分析,这是经典物理最常用的方法。例如,开普勒通过长期天文观察和数据分析,发现了火星的运动规律:火星画出一个以太阳为焦点的椭圆(开普勒第一定律);由太阳到火星的矢径在相等时间内画出的面积相等(开普勒第二定律)。
回到日常生活中的一个平凡的事例:当一个不熟悉当地道路的旅行者走到道路的分岔口时,犹豫不决,究竟走哪一条路才对呢?他有两种办法可以选择:观察周边环境,作出判断,选择一条路径;或者从左到右依次对每条岔路进行尝试,发现错误,退回来探索下一个岔口,从而找到正确的路径。第一种方法依据预判断,有一定的运气成分。第二种方法是一种典型的回溯搜索法,在计算机中经常应用,尽管可能花费更多的精力,但可以保证得到正确的或者最佳的答案。第二种方法还蕴涵了这样一个核心思想:给出一个从左到右的搜索规则,经过有限次的操作,一定能得到最终结果,这就是计算的思维方法。
大部分思维,特别是科学类思维,都是由以下两种方法支持其思维活动的:一种是基本方法,即逻辑,这是推演思维活动的最基本工具,否则,人们就可评价说“思维不合逻辑”,即推演是不合理的;另一种就是其对应的学科方法。计算思维体现的是机械计算,是人脑对实现机械计算的计算装置及其计算实现过程的反映。人脑对计算实施原理与过程的思考,必定需要由计算的方法来规范,这样,人们才能理解计算,并运用计算来设计系统、解决问题、指导人们的行为,这就是计算思维。而方法是计算思维的具体内容表达,方法学习是计算思维教育的有效途径。
构造与简洁:计算思维方法的特征
人类能够通过文字、音乐以及计算机等信息载体把获得的知识和经验储藏在外界环境中,再以学习的形式把这些信息转化为储存在大脑中的记忆并加以利用。目前的计算机鲜有主动的学习功能,也不可能主动将储藏在外界环境中的知识和经验转化为可记忆的信息。
AlphaGo的出现之所以在业界引起震惊,还在于它具有自主学习方法的雏形。目前的计算机几乎完全依靠机械方式把信息精确地记录下来,而不善于利用记忆的信息自发地进行归纳推理等信息活动。因此会有这样一种情况出现,人们要记住一张脸,通常要比记住一个外语单词容易,而计算机则相反,计算机识别、记忆一张人脸要比记住一个城市的电话簿还要困难,这是因为机械般的精确记忆是计算机的强项。因此,把握计算思维的方法,首先需要理解基于机械计算的方法特征。
计算思维方法的特征之一是构造性。构造性主要体现在两个方面。
其一,方法是可以表达的,并且是准确的、无歧义的表达,能表达出明确的操作,其对应的方法就是“形式化”,用约定的格式、文字或语法表达计算操作。形式化表达有不同的层次,在计算装置内部核心,用电流、电压讯号或者字符“0”和“1”表示;在计算机开发应用层次,人们可以用操作命令、计算机语言来表示;对于系统开发人员,还可以用流程图来表达,这一层次只是用于表达开发人员的设计思想,规范设计行为。从外向内,从人向计算机,每一层次的形式化表达都可以向内层转换。每一层向内层的转换都需要经历抽象和形式化,即将外一层的功能描述经抽象以后,按当前层的格式要求形式化表达。例如,开发人员可以将用户需求经抽象之后用例图或流程图表示;计算机可以将程序设计高级语言转换为机器语言执行。其二,每一个操作环节构成的操作步骤是相关的,即每一步操作都是有目的的,前一步操作为后一步操作提供依据,所有操作组合在一起,完成一个特定的算法,并且是在有限次的操作中完成的。当我们把一系列设定的操作递交给计算机以后,计算机可以以此序列执行,类似于人脑的思维是由一系列有序的事情组成,我们也可以说计算机也在“思维”,显然这种思维不是真正的思维,而是计算机执行固定的操作序列。不同的操作序列组合,实现了不同的算法,如枚举法、冒泡排序法等,体现的是不同的计算方法和计算目标。上例中的旅行者,采用从左至右有规律地依次尝试每一种道路的走法,并保证一定能够得到最终解,就是典型的构造特性。
简洁是计算思维方法的另一特征,它也体现在两个方面。其一,基本操作尽可能简单,复杂操作可以转化为简单操作执行。例如,乘法操作可以用若干个加法操作来完成。实际上,实现机械计算的计算机并不“聪明”,只适合做简单的工作,只是以它的速度优势,通过快速处理简单的事,来完成复杂的工作。因此,机械计算是适合做简单操作的重复执行,这也是计算思维的方法特征。其二,简洁同样体现在形式化表达方式上。用循环结构表示重复执行操作,不仅可以节省大量的表达空间,而且简单明了,是人脑思维概括性和间接性的典型表现。按功能划分模块,是结构化程序设计的基本思想,对写入的程序使用逻辑结构,使得理解和修改更有效、更容易。至于面向对象的方法,将数据和操作封装在一起,将接口与实现分离,可以将现实世界以对象的形式进行更简洁和直观的表达。
理解本质:计算思维方法教育的核心
计算思维是人的思维,是人指示计算机工作的思维。计算思维的方法指导着思维过程与走向,因此,对方法的学习,是计算思维教育的有效途径。
从计算思维对应的计算学科来看,是源于数学,同时又有工程属性。因此,计算思维的方法可以从两个维度描述:数学方法和工程方法。计算思维的数学方法包括抽象、构造、递归、形式化等,计算思维的工程方法包括系统方法、分治法、结构化方法、面向对象方法等。
计算是为了数据处理。从数据处理角度来看,计算思维的方法有三类:其一,物理世界与计算机世界数据转换的方法,如用二进制数对物理世界和现象进行编码以便计算处理,用可视化的方法表示各种对象等。其二,数据的管理方法,如先将信息聚焦成“库”,再对基于“库”所聚焦的大量信息进行管理、分析与研究。其三,数据加工的方法,如用算法的思维确定数据加工的有效步骤。
计算机原理以及相关计算方法的学习,是计算思维教育的有效途径。计算思维的方法教育不能仅停留在利用计算机解决问题上,而应该通过方法理解人与计算机的关系。算法与计算机有着不可分割的关系,计算机无法独立于算法而存在,算法却不一定要依赖计算机才能存在,但离开了计算机,算法的实际作用就要大打折扣。以枚举法为例,逐个考察了某类事件的所有可能情况,因而得出一般结论,这是枚举法的基本教学要求,并在此基础上构造循环结构。但是,如果不阐述枚举法是通过牺牲时间来换取答案的全面性,学生也就没有进一步思考的动力,包括思考计算机的速度优势,枚举法的进一步优化,等等。
计算思维的方法教育要体现计算的核心思想,而不能流于形式。以递归为例,递归是一个重要的概念,也是教学难点,一层层的嵌套调用会让初学者犯晕。“从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事:从前有座山,山里有座庙……”老师们通常都用这个古老的故事来帮助学生理解递归,这其实是对递归的一种误读,最多只是让学生在形式上有想象,但会陷入到无限的循环之中,与计算学科解决问题能行性是不一致的。从递归所体现的核心思想来看:其一,反映了将一个复杂的问题简单化处理方式,这反映了计算思维简洁的特性;其二,每次简单化后的问题表达方式与原方式是一致的,这也反映了计算思维简洁的特性;其三,是有终止的,问题简化到一定程度,一定是可以解决的,这反映了计算思维的构造特性;其四,递归是一种漂亮的形式化表达,可以用有限的步骤描述实现近于无限功能的方法。最后需要说明的是,在计算学科递归应用相当广泛,程序的自我调用只是其中之一。
结论
AlphaGo的出现,不仅反映了计算机人工智能专家在机器学习方面的研究逼近人类智慧的努力,同时也引发了哲学家们对计算机发展到何等水平才能算是拥有意识与思维的讨论。对于人类而言,在简单记忆和机械计算方面明显不如计算机的情况下,人们的学习重点不应放在简单知识的记忆和方法的模仿,而应是通过知识与方法的学习形成思维与意识。
我们无法凭空开展计算思维教育,计算学科的基础知识和基本方法是计算思维教育的基石,尤其是计算思维方法,是计算思维的一种外显形式。所以,通过计算思维方法的教学是开展计算思维教育的有效途径。但是,计算思维方法的学习,不是计算思维教育的根本目标,而是应该通过对方法的学习,形成计算思维及相关意识。因此,在计算思维方法的教学中,一定要把握计算思维方法的特征和本质,而不是方法的形式。
在中小学,与算法相关的方法教学已实施多年,计算思维的提出,对相关方法教学提出了新的要求。同时,依据不同学段学生的年龄心智特征,梳理计算思维的方法教育内容,是一项有意义也有挑战性的工作。