5D Library › 社会网络拓扑、结构洞与复杂传染的数学模型 · English
第六章 信息级联及其打破
为什么理性的人会一起走错
两家相邻的餐馆,一家坐满了人,一家空着。你对两家都不了解,只听朋友说过一句空着的那家不错。你多半还是会走进坐满的那家:那么多人选了它,他们也许知道些什么。问题在于,那些人可能也是这样想的。
比克昌达尼、赫什莱弗与韦尔奇在 1992 年用一个简单的模型说明了这种现象 (Bikhchandani, Hirshleifer, and Welch 1992);班纳吉同年独立提出了类似的「羊群行为」模型 (Banerjee 1992)。设想一件事有好坏两种可能,每个人私下得到一个信号,以概率 正确;人们依次做出选择,每个人都能看到前面所有人的选择,但看不到他们的信号。每个人都按贝叶斯规则做出对自己最有利的选择。
关键在于:一旦前面的选择中某一方领先两票,后来的人无论自己的信号是什么,都会跟随多数,因为两票的公开证据已经压过了一个私人信号。从这一刻起,每个人的选择都不再透露他的信号,后来的人从前面的选择中也学不到任何新东西。这就是信息级联。它可以在很早的时候就形成,而且可以是错误的:如果最先的两个人恰好都得到了错误的信号,所有后来的人都会跟着错下去。
5D Library 第 6 本《注意力的经济学》已经实现了这个模型的基本形式。本章计算级联与错误级联的确切概率,并比较几种打破错误级联的办法。
推导
用状态转移精确计算。在级联形成之前,每个选择都透露一个信号,状态是公开信号的「领先票数」; 时级联形成。一个人自己的信号恰好抵消领先时,他是无差别的:「coin」规则如比克昌达尼等人的原文,抛硬币决定;「own」规则跟随自己的信号(安德森与霍尔特实验中的计数规则)。最后用 20 万次模拟核对精确计算。
# Information cascades in the Bikhchandani-Hirshleifer-Welch (1992) model.
# The true state is "good" (assumed here; the other case is symmetric). Each
# person privately gets a signal that is right with probability p, sees all
# earlier choices, and chooses by Bayes' rule. Before a cascade every choice
# reveals a signal, so the state is the lead d = (good signals) - (bad signals)
# shown so far. Once |d| = 2 everyone imitates: an up (correct) or down (wrong)
# cascade. A person whose own signal exactly cancels the lead is indifferent:
# "coin": flips a coin, as in BHW; "own": follows the own signal.
import random
def cascade_probs(p, n, rule):
st = {-1: 0.0, 0: 1.0, 1: 0.0, "up": 0.0, "down": 0.0}
for _ in range(n):
new = {-1: 0.0, 0: 0.0, 1: 0.0, "up": st["up"], "down": st["down"]}
new[1] += st[0] * p; new[-1] += st[0] * (1 - p)
h = 0.5 if rule == "coin" else 0.0 # chance an indifferent person herds
new["up"] += st[1] * (p + (1 - p) * h); new[0] += st[1] * (1 - p) * (1 - h)
new["down"] += st[-1] * ((1 - p) + p * h); new[0] += st[-1] * p * (1 - h)
st = new
return st["up"], st["down"]
def limit_wrong(p, rule):
if rule == "coin":
return 1 - p * (1 + p) / (2 * (1 - p + p * p))
return (1 - p) ** 2 / (p * p + (1 - p) ** 2)
for rule in ("coin", "own"):
print(f"rule '{rule}': P(cascade started) / P(wrong cascade) after n people")
print(" p n = 2 n = 4 n = 10 n = 20 limit (wrong)")
for p in (0.6, 0.7, 0.8):
cells = []
for n in (2, 4, 10, 20):
up, down = cascade_probs(p, n, rule)
cells.append(f"{up + down:.2f}/{down:.3f}")
lim = limit_wrong(p, rule)
print(f" {p:.1f} " + " ".join(cells) + f" {lim:.3f}")
rng = random.Random(12)
def simulate(p, n, rule): # check by brute force with explicit counting
d = 0
for _ in range(n):
good = rng.random() < p
if d >= 2 or d <= -2:
continue
s = 1 if good else -1
if d + s == 0 and d != 0:
herd = rule == "coin" and rng.random() < 0.5
d = d + (2 * d if herd else s) # herd: |d| becomes 2 (cascade)
else:
d += s
return d <= -2
sims = 200000
wrong = sum(simulate(0.7, 20, "coin") for _ in range(sims)) / sims
print(f"Monte Carlo check (p = 0.7, n = 20, coin): wrong cascade {wrong:.3f},"
f" exact {cascade_probs(0.7, 20, 'coin')[1]:.3f}")
# rule 'coin': P(cascade started) / P(wrong cascade) after n people
# p n = 2 n = 4 n = 10 n = 20 limit (wrong)
# 0.6 0.76/0.280 0.94/0.347 1.00/0.368 1.00/0.368 0.368
# 0.7 0.79/0.195 0.96/0.236 1.00/0.247 1.00/0.247 0.247
# 0.8 0.84/0.120 0.97/0.139 1.00/0.143 1.00/0.143 0.143
# rule 'own': P(cascade started) / P(wrong cascade) after n people
# p n = 2 n = 4 n = 10 n = 20 limit (wrong)
# 0.6 0.52/0.160 0.77/0.237 0.97/0.300 1.00/0.307 0.308
# 0.7 0.58/0.090 0.82/0.128 0.99/0.153 1.00/0.155 0.155
# 0.8 0.68/0.040 0.90/0.053 1.00/0.059 1.00/0.059 0.059
# Monte Carlo check (p = 0.7, n = 20, coin): wrong cascade 0.246, exact 0.247以 、抛硬币规则为例:只要两个人做出选择,级联已经形成的概率就是 0.79,错误级联的概率是 0.195;到第 10 个人时,级联几乎必然已经形成,错误级联的概率是 0.247,之后不再改变。也就是说,即使每个人的私人信息有七成的准确率,整个群体仍有约四分之一的机会集体走错,而且一旦走错就不会自己纠正。跟随自己信号的规则让错误级联少一些(0.155),因为无差别的人仍然透露了信号,级联形成得慢一些。信号越准确,错误级联越少,但即使 ,抛硬币规则下仍有 14% 的错误级联。模拟的结果(0.246)与精确计算(0.247)一致。
模型同时说明了级联的另一个性质:脆弱。级联中的人并不是因为确信而跟随,而是因为两票的公开证据刚好压过一个私人信号;只要出现一点新的公开信息,例如一份独立的报告,级联就可能被打破,甚至反转 (Bikhchandani, Hirshleifer, and Welch 1992)。
实验证据
证据
罐子实验。 安德森与霍尔特在实验室中再现了这个模型:两个罐子,一个装两个 a 球和一个 b 球,另一个装一个 a 球和两个 b 球,随机选中其中一个;六名参与者依次私下从罐中抽一个球(因此信号的准确率是 2/3),然后公开宣布自己认为是哪个罐子,猜对有奖金。在前面的宣布出现足以形成级联的不平衡的 56 次中,有 41 次形成了级联 (Anderson and Holt 1997)。
证据
级联会自我纠正。 戈里等人用更长的序列重复了这类实验,并改变信号的准确率。他们发现级联常常形成、破裂、再形成;当级联反转时,多半是从错误的方向转向正确的方向。他们用一个允许人们偶尔犯错的「量子反应均衡」模型解释这些结果 (Goeree et al. 2007)。
这两项研究给出了一个比纯理论更温和的图景:级联确实会形成,但真实的人不总是严格地跟随,有人会根据自己的信号「逆流而动」,这些偏离反而为后来的人提供了新信息,使群体有机会纠正错误。
证据
社会影响与不可预测性。 萨尔加尼克、多兹与瓦茨建立了一个在线「音乐市场」,一万四千多名参与者可以试听和下载 48 首不知名乐队的歌曲。在「独立」条件下,参与者看不到别人的下载数;在「社会影响」条件下,参与者被随机分到八个彼此独立的「世界」之一,能看到本世界中每首歌的下载数。社会影响使成功更加不平等,也更加不可预测:同一首歌在不同的世界里,排名可以相差很远 (Salganik, Dodds, and Watts 2006)。
证据
群体的智慧与社会影响。 洛伦茨等人让参与者回答有客观答案的估计问题,并在几轮之间告诉他们别人的估计。知道别人的估计使群体的估计范围迅速缩小,却没有让群体的平均值更准确,参与者的信心反而提高了 (Lorenz et al. 2011)。贝克尔、布拉克比尔与森托拉的实验给出了一个补充:在没有中心人物的分散网络中,相互影响可以提高群体估计的准确性;而在一个人处于中心、影响所有人的集中网络中,群体的准确性取决于这个中心人物的初始估计 (Becker, Brackbill, and Centola 2017)。
怎样打破错误级联
级联的根源是信息的丢失:前面的人的选择被看到了,他们的理由没有被看到。这提示了几种办法。
推导
比较三种程序。一个 人的群体,每人有一个准确率为 0.7 的独立私人信号。A:依次表态,每个人听到前面所有人的选择后再选,群体采纳多数人的选择;B:每人先私下写下选择,封存后统一计票;C:依次表态,但每个人说出的是自己的信号(理由),最后发言的人掌握全部 个信号。然后考虑另一种情形:错误级联已经形成,此时公开 个新的独立信号(例如 份互不知情的盲评),群体最终进入正确级联的概率是多少。
# How to stop a wrong cascade: three procedures for a group of n people who
# each hold an independent private signal that is right with probability p
# (same model as p11, indifferent people follow their own signal).
# A speak in turn, each choosing after hearing all earlier CHOICES;
# the group adopts the majority of the choices
# B write a private vote first, count the sealed votes (majority)
# C speak in turn but each person states his or her SIGNAL (the reason),
# so nothing is lost; the last speaker then knows all n signals
# Then: a wrong cascade is under way; k fresh independent signals (say, blind
# reviews) are made public. How often does the group end up right?
import math, random
P = 0.7
rng = random.Random(13)
def run_sequential(n, p):
d, choices = 0, []
for _ in range(n):
s = 1 if rng.random() < p else -1
if d >= 2: c = 1
elif d <= -2: c = -1
else:
c = 1 if d + s > 0 else -1 if d + s < 0 else s
d += c # choice reveals the signal
choices.append(c)
return sum(choices) > 0
def majority_exact(n, p):
return sum(math.comb(n, k) * p ** k * (1 - p) ** (n - k)
for k in range(n // 2 + 1, n + 1))
SIMS = 100000
print(f"signal accuracy p = {P}; share of groups that reach the right answer")
print(" n A: choices in turn B: sealed votes C: reasons in turn")
for n in (5, 9, 15):
a = sum(run_sequential(n, P) for _ in range(SIMS)) / SIMS
b = majority_exact(n, P)
print(f" {n:2d} {a:.3f} {b:.3f} {b:.3f}")
def eventual_up(lead, p, people=60):
st = {lead: 1.0}
for _ in range(people):
new = {}
for d, pr in st.items():
if abs(d) >= 2:
new[d] = new.get(d, 0) + pr; continue
for s, ps in ((1, p), (-1, 1 - p)):
nd = d + (1 if d + s > 0 else -1 if d + s < 0 else s)
new[nd] = new.get(nd, 0) + pr * ps
st = new
return sum(pr for d, pr in st.items() if d >= 2)
print("a wrong cascade is under way (lead -2); k fresh signals are made public:")
for k in (1, 2, 3, 5, 9):
tot = 0.0
for g in range(k + 1):
w = math.comb(k, g) * P ** g * (1 - P) ** (k - g)
lead = -2 + g - (k - g)
if lead >= 2: up = 1.0
elif lead <= -2: up = 0.0
else: up = eventual_up(lead, P)
tot += w * up
print(f" k = {k}: chance the group ends in the correct cascade {tot:.3f}")
# signal accuracy p = 0.7; share of groups that reach the right answer
# n A: choices in turn B: sealed votes C: reasons in turn
# 5 0.821 0.837 0.837
# 9 0.843 0.901 0.901
# 15 0.843 0.950 0.950
# a wrong cascade is under way (lead -2); k fresh signals are made public:
# k = 1: chance the group ends in the correct cascade 0.414
# k = 2: chance the group ends in the correct cascade 0.414
# k = 3: chance the group ends in the correct cascade 0.588
# k = 5: chance the group ends in the correct cascade 0.694
# k = 9: chance the group ends in the correct cascade 0.819依次表态时,群体答对的概率停在约 0.84:5 人时 0.821,9 人与 15 人时都是 0.843,扩大群体几乎没有帮助,因为级联形成之后,后来的人只是重复前面的人。封存投票时,群体越大越准确:5 人 0.837,9 人 0.901,15 人 0.950,这正是孔多塞陪审团定理所要求的条件:判断彼此独立。说出理由而不是只说结论(C)保留了全部信息,最后发言的人做出的判断与封存投票的多数一样准确。
如果错误级联已经形成,公开一份新的独立信号只能把正确的机会提高到 0.414,因为一份信号只能抵消两票领先中的一票;公开 3 份时为 0.588,5 份时为 0.694,9 份时为 0.819。打破一个已经形成的错误级联,需要的独立信息比最初形成它的要多。所以,事前的独立比事后的纠正便宜得多。
注
模型的限度。 这里的人都是同质的、理性的,信号的准确率相同;真实的群体中,有人更有经验,有人更爱表现,先发言的往往是资历最深或最自信的人。这些差异既可能让级联更容易形成(大家更愿意跟随资深者),也可能让它更容易被打破(有人坚持己见)。第八章的试验正是要在真实的团队中检验,「先独立写下判断再公开」的程序是否真的减少了群体对最先发言者的锚定。
假说 · 尚未验证
理由比结论更难形成级联(尚未确立)。在依次表态的群体中,如果每个人在说出结论的同时必须说出至少一条支持它的具体证据,后来的人跟随多数的比例会下降,群体的准确率会提高。可以检验的预测:在有客观答案的判断任务中,「结论 + 证据」组的群体准确率高于「只说结论」组,且差别在后发言者中最大。如果两组的准确率没有差别,或者说出理由只是让后发言者更自信地跟随,这一假说就被削弱。
本章小结
信息级联来自信息的丢失:人们看到前面的人的选择,却看不到他们的理由;一旦某一方领先两票,后来的人就会无视自己的信号而跟随,级联可能在最初几个人中就锁定错误的方向。精确计算显示,即使每个人的信号有七成的准确率,群体仍有约四分之一(抛硬币规则)或约七分之一(跟随自己信号的规则)的机会集体走错。实验显示级联确实会形成,但真实的人会偏离,级联也会自我纠正;社会影响使结果更不平等、更难预测,也可能缩小意见的多样性而不提高准确性。封存投票与说出理由保留了独立的信息;已经形成的错误级联,需要多份新的独立信息才能打破。
参考文献
Fan, Y. (2026). Social Network Topology, Structural Holes and Complex Contagion: From the Strength of Weak Ties and Preferential Attachment to Information Cascades, Read Beside Classical Chinese Diplomacy [社会网络拓扑、结构洞与复杂传染的数学模型] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23764990 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).