无师之堂,寂静如此?原来是天使飞过
背景
吾辈少年时,亦曾有过此等经历。无师之堂,喧嚣如市;忽闻足音,鸦雀无声。然则,更有趣者,乃是在无师之时,课堂亦能瞬间寂静。此中缘由,颇值得深思。吾称之为,“自发静默之现象”。
群体默契与心理暗示
人皆为群居动物,易受周围环境影响。当一人起立,众人皆随之,此乃人之本性。若课堂中有一二学子率先安静下来,则其他人亦会不自觉地效仿,进而形成一种“群体默契”。
此外,暗示之力亦不可小觑。一句“老师来了”,一个示意安静的手势,皆能引发学子们的心理暗示,使之产生条件反射,迅速安静下来。
复杂系统理论
吾等课堂,可视为一复杂适应系统。学子们即为系统中的个体,彼此互动,共同营造课堂氛围。当先生出现,或有学子率先住嘴,则其他学子亦会随之行动,此乃“从众心理”之显现,亦是复杂适应系统中“涌现”现象之体现。而课堂氛围之变化,亦是系统对内外环境变化之适应。
那么,何谓复杂适应系统? 即是由众多相互作用、不断适应的个体所组成的系统。此类系统中,个体之间并非孤立存在,而是通过种种联系紧密相连,共同构成一个有机整体。而个体在与环境及其他个体互动过程中,不断学习、进化,从而使整个系统呈现出动态平衡和自组织的特性。
何谓涌现?系统整体所表现出的性质,并非个体之简单叠加,而是由个体之间相互作用所产生之新性质。如蚁群之智慧,并非单个蚂蚁所具备,而是由无数蚂蚁协同合作所产生。
建模思路
无师之堂,喧嚣如市。一旦师长身影乍现,则鸦雀无声,莫敢作声。此乃人之常情,亦足见师道尊严之所在。师长之威,常被戏称为学子心中所生之“心理阴影”。
心理学之观,先生于学子心中,具威权之象,犹如规矩与秩序之代言。先生一旦现身,学子潜意识中自觉应守规矩,肃然安静。此乃条件反射,譬若犬闻铃声而唾液自涌。学子精神处于高度警觉(hypervigilance)之境,感官皆动,随时关注课堂之外每一“危险”信号。昔时动物行为学家谓此高度紧张之态及应对未知危险之行为倾向为“冻结反应”(The Freeze Response)云。
若有人误以为从窗户反光中瞥见先生慈颜,则多会噤声自保。随着发声者减少,微小声响渐生,言谈者寡,环境音量因之骤减,反而更引众人警觉,使其效仿而行。此正反馈效应下,课堂内噪声减弱之速愈加加剧,终至于原本喧哗之地,顷刻间在无明显警示之状况下,化为寂然无声。
方法与结果
一维元胞自动机
图中所示者,乃由一列元胞所构成之元胞自动机更新过程。每一元胞各自具备其状态,依循规则,于下一个时间步中更新其状态。
图1. 一维元胞自动机及更新规则
元胞自动机所模拟者,为五十人课堂场景,元胞各自代表一名学子。每学子(元胞)可处“言”与“听”两种状态。当课堂中部分学子言语时,余者则为听众。吾人可用一列元胞模拟此刻课堂中学子之状态,赋予各元胞以数值,正数示“言”,负数示“听”。假设此列元胞状态更新之时间步长为每 0.1 秒,则言语者讲完一语所需时间最长为十秒。继此或续言,或停言而为听众。每元胞随机赋值于 -100 至 +100 之间之整数,每时间步令其状态数值之绝对值减一。若元胞初赋 +100,至百步后减至 0,示一语毕矣,耗时十秒。当数值归零,则于下时间步重新随机赋值于 -100 至 +100 之间之整数。由此,课堂中人声鼎沸之景象可得模拟。
图2. 元胞自动机模拟五十名学子在三十分钟内言语喧嚣之情状,红色示"言",蓝色示"听",自左向右为元胞随时间状态数值之更新
图3. 元胞自动机模拟五十名学子在三十分钟内言语喧嚣之情状,自习课堂之噪音音量随时间变化的折线图
18000 个时间步内,元胞自动机之更新,乃用于模拟三十分钟内五十名学子在自习课堂中之聊天情形。统计当前时刻课堂中发言学子之人数,以此作为当时噪音音量之指示。
冻结反应
考虑学子对先生之“心理阴影面积”及“冻结反应”,为每一学子增设对低音量之警觉性 x(注意,每人对噪音之敏感程度各异,故警觉性亦有所不同)。例如,对学子甲某而言,若课堂内言语人数少于 x 人,则其进入警戒状态,停止言语一秒。有些学子之“心理阴影面积”较大,易将音量下降误解为先生现身所致之“压迫感”,故 x 值相对较高;而胆大之学子,则需待课堂中仅余其一人与同桌交谈时,方能觉察,故 x 值较小。此 x 称为“心理阴影面积最小冻结音量”(简称“最小心冻音量”)。
在现有一维元胞自动机基础上,需添新规:于更新每学子(各元胞)状态数值时,先察上一个时间步(即前 0.1 秒)之噪音音量是否低于该学子之最小心冻音量(即该元胞之 x)。若是,则在下一个时间步将状态数字重置为 -10,示接下来一秒内(十个时间步)该学子将采取“停、看、听”之策略;若否,则按原规则续填数值。每次重置,皆可能致课堂噪音下降,逐渐逼近另一学子之最小心冻音量 x,促使更多人产生冻结反应。
群体默契发生与否,乃与系统规模存在复杂关联,非线性复杂系统对初始参数敏感甚强,故模型之参数化过程需谨慎为之。通过元胞自动机模拟所得数据,吾等可探究学子“最小心冻音量”对“自发静默之现象”之主效应。
此次模拟中,三十分钟内五十名学子在自习课堂中之聊天情形,于引入最小心冻音量后,在一百六十秒左右,出现自发静默之现象。
图4. 元胞自动机模拟五十名学子在三十分钟内言语喧嚣之情状,于引入最小心冻音量后,在一百六十秒左右,出现自发静默之现象
通过统计自习课堂中发言学子之人数,以此作为该时刻课堂内噪音之音量,观之可见,自某一时点起,课堂之噪音始逐渐减小,并迅速下降至无声。
图5. 此次模拟中,课堂内噪音音量随时间变化之折线图,从某一时间点开始(约150s后),课堂之噪音始逐渐减小,并迅速下降至无声
在此模型中,每一元胞之初始状态为随机,仅需对每名学子之最小心冻音量进行参数化设定。
为使模拟更契合实际情形,特设反应迟钝、对先生出现不甚敏感之学子,其最小心冻音量之最小值设为 3($x_{min} = 3$),即当课堂中仅余三名学子言语时,该学子方才进入“冻结”之状态。至于最小心冻音量之最大值,因难以依据现实情境确定,需通过模拟试验来探求。需注意,若无法对模型进行适当之参数化,则难以在有限(可计算之)时间步内观察到自组织现象之发生。
在 $x_{min} = 3$,且 $x_{max} = 17$ 的参数下,进行了一万次模拟,并记录每次模拟中所有学子最小心冻音量之和 $S_x = \Sigma_i^50 x_i$,与自发静默之现象发生时间 T(模拟时间步最大为 18000,即三十分钟)。
Estimate | Std.Error | t | P | Sig. | |
---|---|---|---|---|---|
6.0676688 | 0.0829139 | 73.18 | <2e-16 | *** | |
$S_x$ | -0.0056127 | 0.0001652 | -33.97 | <2e-16 | *** |
表1. “自发静默之现象"发生时间与学子"心理阴影面积"之总和的线性回归
我们将 $x_{max}$ 的最大值设为 15 到 19,分别进行了上千次模拟。随着 $x_{max}$ 增加,自发静默之现象的时间提前。统计这组实验中三十分钟内出现沉默现象之次数,计算频率。通过逻辑斯蒂回归获得拟合方程:
图6. 逻辑斯蒂回归模型 $y=[1+\exp(-1.463x+21.019)]^{-1}$ 及阈值
上述模型可解作:自习课堂上,当同时言语之学子人数降至一定数目以下时,将引发连锁之“冻结反应”,或致课堂在极短时间内趋于寂静。于三十分钟之自习课中,若五十名学子中,最小心冻音量(心理阴影面积之替代变量)之最大值超过临界点 14(tipping point),则自发静默之现象发生之可能性大为增加;若最大值超过 19,则于三十分钟内至少出现一次沉默现象之概率极高。
后记
“冻结、逃跑、战斗”(“Freeze,flight,fight”)三者,似已成为动物与人类面对危险时普遍的行为趋向。科学研究表明,停止活动作为一种本能反应,对被捕食之猎物而言,或为最合理之选择。盖因食肉哺乳动物之视觉皮质与视网膜,在进化历程中,对动态物体之察觉愈加敏锐。故猎物若能善用“停、看、听”以自保,便更有可能逃脱天敌之追捕。在自然选择之下,吾人之大脑边缘系统学会评估周围环境之危险等级,此预警机制之形成与保留,实有助于吾辈之生存与繁衍。
在国外,有一短语专用以描述此突如其来之安静现象,称为“天使飞过”(Angel passing by)。或许有些教师,确为吾辈生命中之天使;待至长大成人,方渐觉教师此职业之伟大。
当吾人发现,凭借自律以养成良好习惯,非易事也,方知昔日其严苛之要求,助吾辈于残酷之升学竞争中克服拖延与懒惰。回首人生最初十余载春秋,有些人仅在吾生命长河中稍纵即逝,然其于吾心真诚关切者,至今难忘。愈长大,愈觉此等良师益友稀少。最后,愿诸位能对那曾令汝学会沉默之“天使”,道一声感谢。
附录:元胞自动机实现
i <- 1
timestep <- 1
timeout <- 18000
students <- 50
t0 = round(runif(students, -100, 100))
ca <- cbind.data.frame(t0)
volume <- vector(mode="numeric")
volume[timestep] <- sum(ca[,timestep] > 0)
mentalshadow <- round(runif(students, 3, 19))
while(volume[timestep] != 0){
for(i in 1:students){
if(volume[timestep] < mentalshadow[i]){
ca[i, timestep + 1] <- -10
}
else {
if(ca[i, timestep] == 0) {
ca[i, timestep + 1] <- sample(-100:100, 1)
}
else if(ca[i, timestep] > 0) {
ca[i, timestep + 1] <- ca[i, timestep] - 1
}
else {ca[i, timestep + 1] <- ca[i, timestep] + 1}
}
}
colnames(ca)[timestep+1] <- paste0("t", timestep)
timestep <- timestep + 1
if(timestep == timeout){volume[timestep] = 0}
else{volume[timestep] <- sum(ca[, timestep] > 0)}
}