5D Library › 行动的经典与统计力学 · English
第五章 社会耦合与「教中学」
别人作为外力
第三、四章的模型里,有一种力量反复出现:持续的外部拉力,它把地形朝新状态倾斜,并且只要它在,复发就很慢。对人来说,最常见的持续外力来自别人:有人在等你的结果,有人和你一起练,你要教别人。本章考察两类证据:为教而学对学习本身有什么作用;以及一种行为怎样在人际网络中传播。然后用一个模型检验一条具体的课程规则:「必须辅导两位同伴才能解锁下一阶段」。
为教而学
证据
巴格与舒尔在 1980 年的实验中让大学生学习一段材料,一组以为学完后要教给另一位学生,另一组以为学完后要接受测验;结果「准备去教」的一组在保持测验中表现更好 (Bargh and Schul 1980)。菲奥雷拉与梅耶的四项实验把「预期要教」与「真的去教」(对着摄像机讲解)分开:准备去教在即时测验中带来优势(d 约 0.55–0.59),但一周后的延迟测验中,这种优势消失了;只有真正讲解过的学生在延迟测验中保持领先(d 约 0.79–0.90)(Fiorella and Mayer 2013)。期待去教还会让学习者更好地组织所学内容 (Nestojko et al. 2014)。
证据
小林敬一对 28 项研究的元分析估计,「准备去教」相对于普通学习的效应量 g 约为 0.35,「准备后真的去教」约为 0.56;互动式的教(有真实的学习者提问)效果大于单向讲解 (Kobayashi 2019)。一项关于「为他人编写教学材料」的元分析得到的平均效应较小,g 约为 0.17 (Ribosa and Duran 2022)。早期对辅导项目的元分析发现,不仅被辅导者受益,担任辅导者的学生自己的成绩也有提高,效应量约 0.33 (Cohen et al. 1982)。在「可教代理」研究中,学生为一个需要他们去教的电脑角色学习时,比为自己学习更努力,研究者称之为「门生效应」(Chase et al. 2009)。
这些证据支持「教别人有助于自己学习」,尤其是真实、互动的教。但「教别人是最好的学习方法」这一说法并没有得到支持。广为流传的「学习金字塔」(听讲保留 5%、教别人保留 90% 之类)找不到可靠的原始研究出处 (Masters 2013)。本书只采用有出处的效应量。
一种行为如何在网络中传播
疾病和消息只要接触一次就可能传开,这叫简单传染。很多行为不同:要不要开始跑步、加入一个学习小组、采用一种新工具,人们往往要看到不止一位熟人这样做才会跟进。格兰诺维特用阈值模型描述这种集体行为:每个人有一个阈值,周围采纳的人数超过阈值才采纳 (Granovetter 1978)。森托拉与梅西把需要多个来源强化的传播称为复杂传染,并指出,对简单传染有利的「长距离弱连接」,对复杂传染反而不利 (Centola and Macy 2007)。
证据
森托拉在 2010 年做了一项在线实验:把参与者放进人为设计的网络,一种是高度聚簇的格子网络(朋友的朋友常常也是朋友),另一种是同样人数、同样联系人数的随机网络,然后观察一种健康行为(登记加入一个健康论坛)如何传播。当参与者从多个网络邻居那里收到信号时,采纳的可能性高得多;这一行为在聚簇网络中传播得更远、更快 (Centola 2010)。
推导
400 人,每人 8 位联系人。聚簇网络:每人认识环上左右各 4 位邻居;随机网络:把同样的联系通过保持人数不变的交换打乱。从一个人和他的 8 位联系人开始,比较需要 1 位、2 位、3 位采纳者才跟进的三种情况。
# Simple vs complex contagion (Centola & Macy 2007; Centola 2010).
# 400 people, each with 8 contacts. Clustered network: a ring where everyone knows their 4 nearest
# neighbours on each side. Random network: the same contacts shuffled by degree-preserving swaps.
# Simple contagion: adopt after 1 adopting contact. Complex contagion: adopt only after 2 or 3 (a behaviour
# that needs reinforcement from more than one person). Simplified model.
import random
random.seed(5)
N, K = 400, 4
def ring():
return {(min(i, (i + j) % N), max(i, (i + j) % N)) for i in range(N) for j in range(1, K + 1)}
def shuffled(edges, swaps=20000):
e = list(edges)
s = set(e)
for _ in range(swaps):
i, j = random.randrange(len(e)), random.randrange(len(e))
(a, b), (c, d) = e[i], e[j]
if len({a, b, c, d}) < 4:
continue
n1, n2 = (min(a, d), max(a, d)), (min(c, b), max(c, b))
if n1 in s or n2 in s:
continue
s -= {e[i], e[j]}
s |= {n1, n2}
e[i], e[j] = n1, n2
return s
def spread(edges, threshold):
nb = {i: set() for i in range(N)}
for a, b in edges:
nb[a].add(b)
nb[b].add(a)
adopted = {0} | nb[0] # one person and their contacts start
steps = 0
while True:
new = {i for i in range(N) if i not in adopted and len(nb[i] & adopted) >= threshold}
if not new:
return len(adopted) / N, steps
adopted |= new
steps += 1
lattice = ring()
print("threshold clustered network random networks (20): mean reach, networks reaching > 90 %")
for threshold in (1, 2, 3):
f_lat, s_lat = spread(lattice, threshold)
runs = [spread(shuffled(lattice), threshold) for _ in range(20)]
mean = sum(r[0] for r in runs) / len(runs)
full = [r[1] for r in runs if r[0] > 0.9]
speed = f" (in {sum(full) / len(full):4.1f} rounds)" if full else ""
print(f"{threshold:5d} {100 * f_lat:5.1f} % in {s_lat:3d} rounds {100 * mean:5.1f} %, {len(full):2d} of 20{speed}")
# threshold clustered network random networks (20): mean reach, networks reaching > 90 %
# 1 100.0 % in 49 rounds 100.0 %, 20 of 20 (in 3.9 rounds)
# 2 100.0 % in 65 rounds 71.1 %, 14 of 20 (in 11.9 rounds)
# 3 100.0 % in 98 rounds 2.3 %, 0 of 20结果再现了理论的要点。简单传染在随机网络中最快,不到 4 轮就覆盖所有人。需要 3 位联系人强化的复杂传染,在 20 个随机网络中没有一个传开,平均只到 2% 左右;在聚簇网络中则一圈一圈地扩散到所有人。需要 2 位时介于两者之间,结果取决于具体网络。对需要强化的行为,紧密的小圈子比广泛的弱联系更能让它传开。
「教两人解锁」规则:一个算术难题
原先的设想是:要求每位学员必须辅导 2 位同伴通过考核才能解锁下一阶段,这条规则既能充当防止滑回旧势阱的棘轮,又能成为指数级传播的引擎。核对之后,这个设想需要较大修正。
推导
一个 30 天、4 个阶段的课程,每组 120 人。A 组独自学习;B 组每通过一个阶段,必须帮助 2 位同学才能开启下一阶段(如果这一阶段已经没有同学在学,就自动开启)。比较三种计算「帮助 2 人」的方式,以及「教」使每日放弃概率下降 0%、30%、60% 三种假设。所有数字都是假设,只用来展示机制。
# A 30-day course in 4 stages, 120 learners per arm. Arm A: study alone. Arm B "teach to unlock":
# after passing a stage you must help 2 classmates before the next stage opens (if no classmate is
# left on that stage, it opens anyway). Three ways of counting "help 2":
# B1 2 classmates must PASS while you are their tutor; one tutor per classmate
# B2 the same, but a classmate may have two tutors at once (a learning trio)
# B3 2 logged tutoring sessions with different classmates, whether or not they have passed yet
# Simplified model; every number is an assumption, chosen only to show the mechanics.
import random
random.seed(2)
DAYS, STAGES, COHORT, REPS = 30, 4, 120, 40
P_ALONE, P_HELPED = 0.22, 0.30 # daily chance of passing the current stage: alone / with a tutor
QUIT = 0.02 # daily chance of quitting, arm A
def run(rule, quit_cut):
q = QUIT * (1 - quit_cut) if rule != "A" else QUIT
max_tutors = 2 if rule == "B2" else 1
passed, teaching, credit = [0] * COHORT, [False] * COHORT, [set() for _ in range(COHORT)]
out = [False] * COHORT
for _ in range(DAYS):
live = [i for i in range(COHORT) if not out[i] and passed[i] < STAGES]
for i in live:
if random.random() < q:
out[i] = True
live = [i for i in live if not out[i]]
studying = [i for i in live if not teaching[i]]
tutors = {s: [] for s in studying}
if rule != "A":
for t in (i for i in live if teaching[i]):
pool = [s for s in studying if passed[s] == passed[t] - 1
and len(tutors[s]) < max_tutors and s not in credit[t]]
if pool:
s = random.choice(pool)
tutors[s].append(t)
if rule == "B3":
credit[t].add(s) # a session counts as help
for s in studying:
if random.random() < (P_HELPED if tutors[s] else P_ALONE):
passed[s] += 1
if rule in ("B1", "B2"):
for t in tutors[s]:
credit[t].add(s) # only a pass counts as help
if rule != "A" and passed[s] < STAGES:
teaching[s], credit[s] = True, set()
if rule != "A":
for t in live:
if teaching[t]:
left = [s for s in live if not teaching[s] and passed[s] == passed[t] - 1]
if len(credit[t]) >= 2 or not left:
teaching[t] = False
return sum(1 for p in passed if p >= STAGES) / COHORT
def mean(rule, cut=0.0):
return sum(run(rule, cut) for _ in range(REPS)) / REPS
a = mean("A")
print(f"A study alone: {100 * a:4.1f} % complete by day 30")
print("rule quitting reduced by: 0 % 30 % 60 %")
for rule in ("B1", "B2", "B3"):
row = " ".join(f"{100 * mean(rule, c):6.1f} %" for c in (0.0, 0.3, 0.6))
print(f"{rule} {row}")
print(f"why B1 jams: on each stage, {COHORT} learners need 2 x {COHORT} = {2 * COHORT} credited passes,")
print(f"but at most {COHORT - 1} classmates can pass after someone else - so most tutors wait for the slowest")
# A study alone: 65.6 % complete by day 30
# rule quitting reduced by: 0 % 30 % 60 %
# B1 5.6 % 6.4 % 6.7 %
# B2 10.9 % 11.2 % 12.8 %
# B3 56.4 % 62.8 % 70.8 %
# why B1 jams: on each stage, 120 learners need 2 x 120 = 240 credited passes,
# but at most 119 classmates can pass after someone else - so most tutors wait for the slowest结果的关键在最后两行。如果「帮助」以「被辅导的同学通过考核」来计算,而每次通过只能算在一位辅导者名下(B1),那么在一个封闭班级里,这条规则在算术上就无法让所有人满足:每个阶段 120 人需要 240 次被认可的通过,但能在别人之后通过的同学最多只有 119 人。多数学员只能等到这一阶段最慢的同学也通过、规则自动放行,课程因此严重阻塞,完成率从独自学习的约 66% 跌到 6% 左右。允许两位辅导者共同辅导一位同学(B2)也不能解决问题:学得最慢的人仍然卡住所有人。只有把「帮助」定义为两次有记录的辅导时段、不论对方是否已经通过(B3),规则才不造成阻塞;而它是否胜过独自学习,取决于「教」能把放弃率降低多少——在这些假设下,放弃率降低 30% 时仍略低于独自学习,降低 60% 时才明显胜出。
注
关于「指数级传播」:在一个人数固定的班级里,任何辅导规则都不会让人数增加;所谓指数增长,只有在每一代学员都必须引入新的学员时才会出现。如果这种引入与付费挂钩,结构就变成了推荐链,其伦理与法律风险是另一回事。本书不检验、也不建议这种做法;第八章的试验只在已经入组的学员之间安排辅导,不要求任何人招募新人。
棘轮需要能量
棘轮是一种只允许单向转动的装置。费曼在《物理学讲义》中用「棘轮与棘爪」说明:仅靠随机热运动,棘轮不能持续地单向转动并对外做功;在同一温度下,棘爪本身也会被热运动抖开 (Feynman et al. 1963)。棘轮要工作,需要外界持续供给能量或维持温度差。这个物理事实对本章的类比是一个有益的提醒:同伴辅导可以充当防止滑回的棘轮,但它本身需要组织、时间和精力来维持;一旦无人维护,它就会和第三章的外部拉力一样失效。
假说 · 尚未验证
尚未确立。 在一个 30 天课程中,采用「完成两次有记录的同伴辅导时段才能解锁下一阶段」规则的学员,与独自学习的学员相比,30 天完课率至少高 10 个百分点,盲评期末测验成绩至少高 0.25 个标准差。如果第八章的随机试验显示两项结局都没有达到这一幅度,或者任一结局显示该规则有害,这一假说就被推翻。
本章小结
为教而学有实证支持,真实而互动的教效果更好,但「最好的学习方法」与「学习金字塔」没有可靠依据。需要强化的行为在紧密的小圈子里传播得更好。把这两点合成一条课程规则时,细节决定成败:以「同伴通过」计数的「教两人解锁」在封闭班级里必然阻塞;以「辅导时段」计数则可行,但效果取决于它能否真正降低放弃率——这正是第八章试验要回答的问题。
参考文献
Fan, Y. (2026). Classical and Statistical Mechanics of Human Action: Psychological Inertia, Static Friction Thresholds, Kramers Escape Rate in Double-Well Potentials and Habit Phase Transitions, Read Beside East Asian Philosophy of Practice [行动的经典与统计力学] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23738774 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).