5D Library › 社会网络拓扑、结构洞与复杂传染的数学模型 · English

第六章 信息级联及其打破

为什么理性的人会一起走错

两家相邻的餐馆,一家坐满了人,一家空着。你对两家都不了解,只听朋友说过一句空着的那家不错。你多半还是会走进坐满的那家:那么多人选了它,他们也许知道些什么。问题在于,那些人可能也是这样想的。

比克昌达尼、赫什莱弗与韦尔奇在 1992 年用一个简单的模型说明了这种现象 (Bikhchandani, Hirshleifer, and Welch 1992);班纳吉同年独立提出了类似的「羊群行为」模型 (Banerjee 1992)。设想一件事有好坏两种可能,每个人私下得到一个信号,以概率 p>1/2p > 1/2 正确;人们依次做出选择,每个人都能看到前面所有人的选择,但看不到他们的信号。每个人都按贝叶斯规则做出对自己最有利的选择。

关键在于:一旦前面的选择中某一方领先两票,后来的人无论自己的信号是什么,都会跟随多数,因为两票的公开证据已经压过了一个私人信号。从这一刻起,每个人的选择都不再透露他的信号,后来的人从前面的选择中也学不到任何新东西。这就是信息级联。它可以在很早的时候就形成,而且可以是错误的:如果最先的两个人恰好都得到了错误的信号,所有后来的人都会跟着错下去。

5D Library 第 6 本《注意力的经济学》已经实现了这个模型的基本形式。本章计算级联与错误级联的确切概率,并比较几种打破错误级联的办法。

推导

用状态转移精确计算。在级联形成之前,每个选择都透露一个信号,状态是公开信号的「领先票数」dd;|d|=2|d| = 2 时级联形成。一个人自己的信号恰好抵消领先时,他是无差别的:「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

以 p=0.7p = 0.7、抛硬币规则为例:只要两个人做出选择,级联已经形成的概率就是 0.79,错误级联的概率是 0.195;到第 10 个人时,级联几乎必然已经形成,错误级联的概率是 0.247,之后不再改变。也就是说,即使每个人的私人信息有七成的准确率,整个群体仍有约四分之一的机会集体走错,而且一旦走错就不会自己纠正。跟随自己信号的规则让错误级联少一些(0.155),因为无差别的人仍然透露了信号,级联形成得慢一些。信号越准确,错误级联越少,但即使 p=0.8p = 0.8,抛硬币规则下仍有 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)。

怎样打破错误级联

级联的根源是信息的丢失:前面的人的选择被看到了,他们的理由没有被看到。这提示了几种办法。

推导

比较三种程序。一个 nn 人的群体,每人有一个准确率为 0.7 的独立私人信号。A:依次表态,每个人听到前面所有人的选择后再选,群体采纳多数人的选择;B:每人先私下写下选择,封存后统一计票;C:依次表态,但每个人说出的是自己的信号(理由),最后发言的人掌握全部 nn 个信号。然后考虑另一种情形:错误级联已经形成,此时公开 kk 个新的独立信号(例如 kk 份互不知情的盲评),群体最终进入正确级联的概率是多少。

# 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
左:错误级联的概率随已选择人数的变化(跟随自己信号的规则),信号准确率 p 为 0.6、0.7、0.8。错误级联在前几个人中就已锁定。右:信号准确率 0.7 时,群体答对的概率随群体规模的变化。封存投票时,群体越大越准确;依次表态时,准确率停在约 0.84,扩大群体没有帮助。

依次表态时,群体答对的概率停在约 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。打破一个已经形成的错误级联,需要的独立信息比最初形成它的要多。所以,事前的独立比事后的纠正便宜得多。

注

模型的限度。 这里的人都是同质的、理性的,信号的准确率相同;真实的群体中,有人更有经验,有人更爱表现,先发言的往往是资历最深或最自信的人。这些差异既可能让级联更容易形成(大家更愿意跟随资深者),也可能让它更容易被打破(有人坚持己见)。第八章的试验正是要在真实的团队中检验,「先独立写下判断再公开」的程序是否真的减少了群体对最先发言者的锚定。

假说 · 尚未验证

理由比结论更难形成级联(尚未确立)。在依次表态的群体中,如果每个人在说出结论的同时必须说出至少一条支持它的具体证据,后来的人跟随多数的比例会下降,群体的准确率会提高。可以检验的预测:在有客观答案的判断任务中,「结论 + 证据」组的群体准确率高于「只说结论」组,且差别在后发言者中最大。如果两组的准确率没有差别,或者说出理由只是让后发言者更自信地跟随,这一假说就被削弱。

本章小结

信息级联来自信息的丢失:人们看到前面的人的选择,却看不到他们的理由;一旦某一方领先两票,后来的人就会无视自己的信号而跟随,级联可能在最初几个人中就锁定错误的方向。精确计算显示,即使每个人的信号有七成的准确率,群体仍有约四分之一(抛硬币规则)或约七分之一(跟随自己信号的规则)的机会集体走错。实验显示级联确实会形成,但真实的人会偏离,级联也会自我纠正;社会影响使结果更不平等、更难预测,也可能缩小意见的多样性而不提高准确性。封存投票与说出理由保留了独立的信息;已经形成的错误级联,需要多份新的独立信息才能打破。

参考文献

Anderson, Lisa R., and Charles A. Holt. 1997. “Information Cascades in the Laboratory.” American Economic Review 87 (5): 847–62.
Banerjee, Abhijit V. 1992. “A Simple Model of Herd Behavior.” Quarterly Journal of Economics 107 (3): 797–817. https://doi.org/10.2307/2118364.
Becker, Joshua, Devon Brackbill, and Damon Centola. 2017. “Network Dynamics of Social Influence in the Wisdom of Crowds.” Proceedings of the National Academy of Sciences 114 (26): E5070–76. https://doi.org/10.1073/pnas.1615978114.
Bikhchandani, Sushil, David Hirshleifer, and Ivo Welch. 1992. “A Theory of Fads, Fashion, Custom, and Cultural Change as Informational Cascades.” Journal of Political Economy 100 (5): 992–1026. https://doi.org/10.1086/261849.
Goeree, Jacob K., Thomas R. Palfrey, Brian W. Rogers, and Richard D. McKelvey. 2007. “Self-Correcting Information Cascades.” Review of Economic Studies 74 (3): 733–62.
Lorenz, Jan, Heiko Rauhut, Frank Schweitzer, and Dirk Helbing. 2011. “How Social Influence Can Undermine the Wisdom of Crowd Effect.” Proceedings of the National Academy of Sciences 108 (22): 9020–25. https://doi.org/10.1073/pnas.1008636108.
Salganik, Matthew J., Peter Sheridan Dodds, and Duncan J. Watts. 2006. “Experimental Study of Inequality and Unpredictability in an Artificial Cultural Market.” Science 311 (5762): 854–56. https://doi.org/10.1126/science.1121066.

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).