问题驱动  计算落地

2022-06-18 14:28李晓明
中国大学教学 2022年4期
关键词:新文科问题驱动计算思维

李晓明

摘 要:信息技术应该在新文科建设中发挥显著的作用,其中一个重要的方面就是加强文科学生计算思维的培养,一个正在兴起的交叉学科就是计算社会科学。本文介绍了一门全新的文科课程的教学实践,该课程以若干社会科学经典问题为抓手,从计算思维的视角展开讨论,落实到实际编程进行相关模型的模拟分析,展现了在文科开设具有深度计算要求课程的潜力。

关键词:新文科;计算思维;教学实践;问题驱动

文科学生需要加强计算思维的培养,已成为一种普遍的共识。《新文科建设宣言》中所倡导的“融入现代信息技术赋能文科教育”“主动适应并借力现代信息技术手段,实现文科教育高质量高水平发展”就包含这样的指向。同时,《新文科建设宣言》指出要“紧紧抓住课程这一最基础最关键的要素,持续推动教育教学内容更新”“鼓励支持高校开设跨学科跨专业新兴交叉课程、实践教学课程,培养学生的跨领域知识融通能力和实践能力”,强调了课程建设的重要性。

过去几十年来,文科计算机教育在我国高校是得到重视的,每个学校至少有一门专门的必修课,名为“计算机文化基础”或“大学计算机”等。然而,随着信息技术的发展,经济社会数字化转型浪潮的兴起,仅一门那样的课程已不能满足要求,人们呼吁更有深度的文科计算机课程的建设。作为对这种需求的响应,北京大学在2021年秋季新开出了一门选修课“社会科学研究问题的计算实践”,面向社会科学专业二年级以上本科生,计2学分。

课程的初衷,是希望让有兴趣和志趣的文科生在常规的文科计算机课程之外,有机会对计算在社会科学问题研究中的作用,从体验和认识上达到一个新的高度。

一、课程设计思想

“社会科学研究问题的计算实践”课程描述中的学习目标是这样写的:通过本课程,预期学习者可以在问题抽象、计算抽象、算法设计,以及Python编程实现等方面,达到一定成熟度,初步形成一种通过计算的途径来分析研究社会科学问题的态度和技能。

为达成上述学习目标的课程设计可能有多种方案。例如可能是以实验课的形式指导学生完成几个大作业,还可能是直接带着学生分小组做几个基于大数据的研究项目,等等。由于这些都还没有现成的东西可参照,很大程度就看教师自己的偏好和积累了。

我们采用的是一种“问题驱动,计算落地”的做法。这里的“问题”,主要指社会科学经典研究问题,而不是应用问题。在课程说明中是这样写的:基于若干经典社会科学问题研究成果,从计算的视角展开讨论,强调通过编写和运行计算机程序,观察、推理和评估相关模型所展现的性质和特征,探索相关社會现象的机制、原理和原因。所涉及的问题包括(但不限于)社会网络结构分析、社会网络演化规律、博弈现象、匹配市场机制、网络结构平衡的判别、网络级联的过程,以及富者愈富模型的仿真与验证、表决机制等方面。

总结起来,有十多个这样的问题。所谓“问题驱动”,指的是在课堂上我们总是从这些问题所体现的社会现象或社会机制开始,进行适当的抽象,形成一个研究问题的表达,进而建立可供严谨分析讨论的模型。对此,下一节分别有较为详细的论述。

所谓“计算落地”,这里就是指对每个问题的学习和理解,最后都要以一个计算机程序的形式予以体现。也就是说,对于所形成的模型,都要通过计算得到一种“解”。这样,课上对每个问题的讨论基本都遵循图1所示的框架。

不过,特别值得强调的是,我不认为这是一门单纯的“编程课”,它是问题和方法的学习和研究课。编程只是为了更好地学习。体现在具体教学实践的时间安排上,就是每次课前面用大约80分钟讲问题,后面20分钟布置作业。总结起来,学生需要完成如下所列的作业。

HW0:节点聚集系数和边嵌入性的计算;

HW1:友谊悖论的验证;

HW2:同质性作用下的网络演化过程;

HW3:极化关系网络的结构平衡检测;

HW4:重复囚徒困境博弈的循环赛;

HW5:匹配市场的实现;

HW6:网络效应下的价格策略比较;

HW7:网络级联过程的仿真;

HW8:富者愈富过程的性质验证;

HW9:网络中影响力与共识的关系;

HW10:孔多塞模型下的表决综合。

二、课程主要内容

下面简要介绍所讨论的社会科学问题以及相关计算实践作业的要求,每一个问题用两个学时,每次作业要求在一周内完成。下面的顺序也就是教学展开的顺序。

1.图论与社会网络基础

这里讲的图论完全是“实用主义”的,即只是包括一些为社会网络相关主题的学习所需要的基本术语概念。同时,强调了邻接矩阵(A)及其幂次在网络结构意义下的解释,例如A2[i, j]表达的是节点i和j之间长度为2的路径的条数。在社会网络的语境下,就是i和j的共同朋友的个数,等等。它们是通常图论课不涉及的。这样做一是让学生能学习矩阵运算与网络结构信息的对应关系,二是由于矩阵乘幂很容易用程序实现,作为起步是比较合适的。

这一课布置了两个作业(HW0和HW1)。HW0从程序设计的要求来看很简单,基本上就是矩阵乘幂的直接应用,算是“预热”。HW1通过随机生成一些社会网络图验证“友谊悖论”——节点的度小于邻居节点度的均值,则是一个非平凡的任务了。

2.同质性及其在社会网络演化中的作用

关于同质性的讨论是社会科学中的一个常见话题,它对网络结构演化的影响可以抽象归结为三元闭包、社团闭包和会员闭包三种机制。这样,如果说上一次课讨论的是社会网络的静态特征问题,这一次课讨论的就是网络的动态过程了,而这个过程正好也是可以用矩阵相乘的结果来驱动的,于是我们再一次看到了矩阵运算可以揭示网络结构的意义。

这一课的计算实践问题(HW2)就是利用同质性原理,在三个门槛值(分别对应三元闭包、社团闭包和会员闭包)的控制下,采用两个矩阵,按时间步模拟仿真一个社会归属网中边的变化,也就隐含了其中社会网络的变化。

3.极化关系下网络结构的稳定性

所谓“极化关系”,指的是网络中的关系分为“友好”和“敌对”两种,这在人际关系和国际关系的一些特定时期都是显著的。在这样的模型中,结构的稳定性是关注的重点,即一个网络结构中的各个关系性质是趋向于不变,还是趋向于改变?例如下面这个网络,用实线边表示“友好”,虚线边表示“敌对”,我们关心它是否稳定。这里涉及一个相当不简单的判断算法,落实到计算问题上,就是要检测图中是否存在包含奇数个敌对边的圈。课上我们证明了:结构稳定,当且仅当不存在那样的圈。在图2中,就有一个2-5-6-11-10-12-9-4-2。包含5条敌对边,因此是不稳定的。

这一课的作业任务(HW3)就是要实现这个算法。尽管不简单,不只是矩阵相乘了,还要用到广度优先搜索等过程,但当课程进行到第4周的时候,学生们不但已经能理解这个算法,而且也都能够编程实现了。课程中对问题的深入讨论和理解,鼓舞了计算实践的热情。

4.博弈论基础

类似于对图论的处理,系统学习博弈论也不是本课程的目标。我们只是通过一些例子,简略介绍博弈的基本术语,参与人、策略和回报,以及博弈中参与人互动的含义,强调博弈均衡的概念——互为最佳应对策略组。

这一课的作业(HW4)是举行一个由班上所有学生参与的重复囚徒困境的循环赛,针对的是如图3所示的囚徒困境博弈收益矩阵。

作业分为两个阶段:第一阶段,每个学生提供一个策略函数,教师收集后统一发给所有人;第二阶段,每人基于前面得到的策略函數集,完成一个竞赛过程管理程序,两两循环比赛并积累积分,最后分析每个参与人总分的情况,观察在重复多次的囚徒困境博弈中,人们的长期行为是否基本都是倾向于合作的。

5.清仓价格与匹配市场

这个问题可以看成是博弈论的一种应用。考虑n个商品和n个买家之间如何匹配,采用“物以稀为贵”的原理,发展出一个通过清仓价格的形成,达成最优匹配的算法。课程不仅导出该算法的步骤,而且也证明算法的性质。由于这个算法是一个框架性质的,相关步骤和应用层的操作关联密切,因而可能在这样的课中学习。为了展现算法的实际意义,我们还采用了书籍拍卖的活动,提供一批书籍,让同学们通过出价参与拍卖,目标是形成一个书籍和学生之间的匹配。

这一课的作业(HW5)就是实现利用“物以稀为贵”原理的匹配市场算法,并基于前面学生给出的出价矩阵,算出匹配关系,并按照该关系进行书和学生的分配。也就是说,每个人能算出自己该得哪本书,而且大家算出的还不冲突。注意到这个算法的一个核心操作是检测二部图是否存在完整匹配,但该操作对应的子算法比较复杂,不太可能在本课程中要求学生掌握,于是我们提供一个函数,将接口交代清楚,让学生可以进行算法调用。这样一种方式,不仅让学生完成了一个很有获得感的程序,而且也具体体会了一种方法——设计并实现应用层框架性算法,认识到一些子过程的必要性,但不一定都自己实现,可以通过调用已有函数达成目标。

6.网络效应

这个问题与当下的平台经济相关。讲的是某些产品或服务具有这样的性质:其对于每个客户的价值,与已有客户的总量正相关。例如微信这样的平台,参与的人越多,每个人感觉到的价值就越大。课上所要讨论的就是这种正相关关系的具体特征,体现在几个不同性质的博弈均衡点上。对它们性质的理解,有助于制订合适的产品推广策略,其基本追求,就是要让市场规模尽快通过不稳定均衡点,从而启动市场自身的增长过程。

这一课的作业(HW6),就是要在一个设定的网络效应模型下,从企业的视角出发,比较几种不同的价格策略,追求较大的利润。从数学上看,这是一个多变量非线性优化问题,不是这门课上合适的内容,但从应用背景的角度将模型说清楚后,通过程序的模拟,学生们都能得到不错的结果。

7.网络级联

一种新事物会如何在网络中得到传播,或者说传播的效果将会如何,在鼓励创新的年代,是一个尤为值得关心的问题。网络级联,即人们通过与有关系的人之间的互动决定是否采纳一项新事物(例如某一款新手机),是学界已经形成的一类基本模型,其形象化的表现就是新事物在网络中从一些点开始,逐步向周边扩散,直至完全覆盖所有节点,或者到某个程度后再也不会扩散了。作为课堂学习的内容,我们会讨论停止扩散的充要条件。

这一课的作业(HW7),就是要编一个程序,在给定网络结构、初始节点集合和门槛值的条件下,模拟扩散过程,一步步看哪些节点“接受了”新事物,直到不再有扩散的可能。

8.流行性

一类事物的不同实例在社会中得到关注程度的分布,是信息社会和数字经济的中心话题之一。从学理上,涉及幂律、无标度、“长尾”、齐普夫律,2/8律,“富者愈富”等概念。教学目标是梳理这些概念之间的一种关系,它们分别对应流行性这种普遍现象背后的“规律”“性质”和“机制”。我们也讨论这些认识的实用价值,即利基产品在长尾市场中的意义。

这一课的作业(HW8),则是要仿真一个“富者愈富”过程,观察所得到的数据是否呈现出幂律分布。课程进展到这里,学生们对于完成编程所要求的任务已经比较自如了,于是我们进一步要求用尽量少的数据存储空间来解决这个问题。

9.社会网络中的影响力和共识

在讨论“一个人认为哪些人在某个话题上的认识比较靠谱,从而对他的认识会产生影响”的语境下,有向图模型就会自然地出现。于是我们在“实用主义”地对有向图概念做一个简单介绍后,马上转到一个人影响力的计算上,也就是PageRank,认识到它(P)是一个任意规格化正行向量左乘邻接矩阵的一种变形(A*)直至收敛的结果。然后讨论一个初始列向量V右乘A*的含义,按照DeGroot模型,这对应一个共识的形成过程,即收敛到一个相同的值c上。按照现实中的朴素认识,社会中一个人的影响力越大,他的认识在社会共识形成中的作用也会越大。这样一个朴素认识通过PageRank和DeGroot模型得到了生动阐释。

尽管上述关系的数学证明也是可能在这门课上做的,但我选择了让同学们用程序(HW9)来验证。即他们的程序要先分别用PageRank算法算出P,再用DeGroot算法基于V算出c,然后看上述关系是否成立。

10.表决问题

从孔多塞原则(少数服从多数)开始,看到孔多塞悖论现象,然后讨论议程设置和波达计数法,它们一方面作为避免孔多塞悖论的方法,但另一方面又带来了新的问题,即组织者操纵和策略性投票的问题。在简略提到阿罗不可能定理后,转到对投票人单峰偏好的要求,进而提出并证明了中位项定理,即如果每个人的投票都满足相对于一种特征序的单峰偏好,则不会有孔多塞悖论出现。并且,群体排序可以按中位项定理的操作获得。

这一课的作业(HW10),实际上就是课堂涉及内容的一个综合练习。给定m个人对n个项目按排序的投票,程序要确定其中是否隐含有孔多塞悖论。如果没有,就直接给出群体序;如果有,就按照一个特定的属性序,指出哪些投票是不满足单峰性质的,认为它们是“废票”,剔除后按照中位项定理给出群体排序。

为什么选择这样一些问题?主要有如下考虑。第一,希望能触及社会科学的多个领域。从上面列举的能看到,问题涉及社会学、经济学、政治学、传播学等。第二,希望所讨论的是经典学术问题,而不是应用解决方案,尽管它们都有实际的背景。可以看到,这些问题都对应有过去几十年甚至几百年前的研究成果。第三,便于从本科生课程教学的层面,对问题进行建模,并有相适应的计算方法。

加州大学的Martin Hilbert教授在他的计算社会科学慕课上展示了如图4这样的图,表示的是计算社会科学的学理框架。其中,“模型”是中心概念,对此我是认同的,因此在本课程的设计中也特别强调了模型,涉及编程的计算实践在一定模型基础上才可能展开。

三、教学实践体会

这样一门课教下来,作为教师的第一感触就是学生们的潜能真是很强。对于有兴趣和动力学习的内容,尽管目标初看起来很难达到,只要教师给搭上适当的“脚手架”,他们就能攀登上去。这门课作为一门选修课,最初有14個同学,来自哲学、社会学、经济学、法学、政府管理等多个领域,从大二到大四都有。前三次课下来,有4个同学觉得不适应,选择了退课,剩下的10个一直坚持到最后。10个学生,似乎受益面很小,我也的确认为这样一种要求的课不太可能适应大面上的教学。但我想大学应该提供各种有特色、有深度的课程,让有兴趣有能力的学生有机会去展现他们的潜力。

一个很明显的现象是,在前几周,多数同学感觉颇有挑战,毕竟他们以前没有写过需要几十行Python代码才能解决问题的程序。为此,在开始两周增加了两次自愿参加的补课,指导他们如何写出算法程序。在那之后,一些同学依然有困难,但已经知道怎么去自己克服了。课程结束之际,问学生在这课程的教学中哪些做法应该保持,有同学说那两次补课的安排应该保持。看来对他们真有帮助了。

回到前面提到的本课程的学习目标,一轮教学实践下来,我感到有较高的达成度,学生们明显成长了。后面几个作业,即便布置给计算机类专业的学生做,也不算是很简单的。这一批文科学生能完成,很大程度是因为教学让他们了解了作业背后问题的意义,以及建模的过程,从而有兴致去做。一个学生谈体会说,这门课的作业与课堂内容紧密相关,是其他很多课程没有的特点。在我看来,那就是“问题驱动”教学应有的效果。

猜你喜欢
新文科问题驱动计算思维
新文科建设背景下的高校图书馆服务研究
新文科建设的理路与设计
新文科背景下公共管理学科大类人才培养模式的优化
“新文科”背景下新闻传播教育的新形势与新进路
以问题驱动改进随机变量分布的教学
以计算思维为中心的数据结构教学方法探讨
“问题驱动式”生物高效课堂打造的做法
“问题驱动+能力提升”卓越课程建设与实践
程序设计课程中计算思维和应用能力培养问题研究
民族高校C语言程序设计课程教学改革的研究