5D Library › 学习的85%最优错误率定律、髓鞘化动力学与刻意练习 · English

第八章 实践与预注册试验

注

本章的核查表供一般学习者与教学者参考,不是诊断或治疗工具。 如果学习困难长期存在、明显影响生活,或者伴随情绪困扰,请寻求专业评估,而不是只调整练习方法。核查表中的「80%–85%」是一个参照区间,不是需要精确命中的标准。

第一部分 四步刻意练习核查表

怎样把正确率维持在参照区间

第一章的推导假设训练者知道学习者当前的水平。现实中我们不知道,只能根据最近的对错来调整。心理物理学里有一类成熟的方法叫阶梯法:答对就加难,答错就降难。莱维特的「3 下 1 上」规则(连续答对三题加难,答错一题降难)会稳定在约 79.4% 的正确率 (Levitt 1971);卡恩巴赫的加权升降法更灵活:答对加难一步,答错降难 p/(1−p)p/(1-p) 步,就会稳定在正确率 pp 附近 (Kaernbach 1991)。要瞄准 85%,答错时降难的步长约为答对时加难步长的 5.67 倍。

一个模拟学习者,四选一题目(猜对的概率 25%),技能随练习缓慢提高。比较加权升降法(目标 85%)、同样规则但学习者不进步、「3 下 1 上」,以及固定使用起点时约 95% 正确的简单题。

推导

# Staircases for a simulated learner (4-option items, P = 0.25 + 0.75 Phi(theta - x), skill
# +0.01/trial). Weighted up-down (Kaernbach 1991): easier by s p/(1-p) after an error, harder
# by s after a correct answer; 3-down-1-up (Levitt 1971); fixed easy items (~95 % at start).
import random
from statistics import NormalDist
N = NormalDist()

def p_correct(theta, x):
    return 0.25 + 0.75 * N.cdf(theta - x)

def run(rule, seed, trials=300, target=0.85, step=0.08, gain=0.01):
    rng = random.Random(seed)
    theta, streak, hits = 0.0, 0, []
    x = theta - N.inv_cdf((0.95 - 0.25) / 0.75)               # start where accuracy = 95 %
    x0 = x
    for _ in range(trials):
        ok = rng.random() < p_correct(theta, x)
        hits.append(ok)
        if rule == "weighted":
            x += step if ok else -step * target / (1 - target)
        elif rule == "3down1up":
            streak = streak + 1 if ok else 0
            if streak == 3:
                x, streak = x + step * 2, 0
            elif not ok:
                x -= step * 2
        else:
            x = x0
        theta += gain
    return sum(hits[100:]) / 200, theta - x

print("500 simulated learners per rule | accuracy, trials 101-300 | final skill - difficulty")
for rule, label, gain in (("weighted", "weighted up-down, 85 %", 0.01),
                          ("weighted", "  same, learner not improving", 0.0),
                          ("3down1up", "3-down-1-up", 0.01), ("fixed", "fixed easy items", 0.01)):
    r = [run(rule, s, gain=gain) for s in range(500)]
    acc = sum(a for a, _ in r) / len(r)
    gap = sum(g for _, g in r) / len(r)
    print(f"{label:30s} | {acc:24.1%} | {gap:+.2f}")
# 500 simulated learners per rule | accuracy, trials 101-300 | final skill - difficulty
# weighted up-down, 85 %         |                    86.9% | +1.00
#   same, learner not improving  |                    85.0% | +0.91
# 3-down-1-up                    |                    83.3% | +0.79
# fixed easy items               |                    99.9% | +4.50

加权升降法在学习者不进步时稳定在 85.0%;学习者在进步时,阶梯总是略微「追不上」,实际正确率约 86.9%。「3 下 1 上」在这里约为 83.3%(理论值 79.4%,同样因为学习者在进步而偏高)。固定的简单题在 300 次之后正确率接近 100%:学习者早已超出了题目的难度,这正是第一章所说的「做得太好」。

核查表

这份核查表供学习者或教师用一周时间记录、再回顾。它针对的是有明确对错、可以分出难度等级的练习(如解题、词汇、规则应用),不适用于所有学习。

  1. 当前正确率是否落在参照区间。 每次练习的正确率大约在 80%–85% 吗?长期高于约 90%,说明题目可能太容易;长期低于约 75%,说明可能太难,或者需要先回到更基础的内容。(第一章)
  2. 主动提取与被动浏览的时间比。 有多少时间是在不看资料的情况下自己回答、回忆、做题,有多少时间是在重读、看讲解、看答案?(第四章)
  3. 题型交错度。 同一次练习中,不同类型的题目是混在一起的,还是一类做完再做下一类?对于需要辨别「该用哪种方法」的材料,交错更有利。(第五章)
  4. 反馈延迟与纠错闭环。 做完一题多久能知道对错?做错的题,是看了答案就过去了,还是弄清错因后在同类题上重新做对?(第六章)

把核查表用在一位虚构学习者一周的练习记录上:六次练习,四类统计题(A–D)。

推导

# Four-step checklist on a FICTIONAL week: item types, correct answers, active / passive
# minutes, median feedback delay (s), errors corrected and re-attempted.
LOG = [
    ("Mon", "AAAAAAAABBBBBBBB", "1111111111111111", 10, 35, 2, 0),
    ("Tue", "BBBBBBBBCCCCCCCC", "1111111011111111", 12, 30, 2, 0),
    ("Wed", "ABACBDCADBCADBAC", "1011011101110110", 30, 15, 5, 3),
    ("Thu", "CADBBCADACDBDABC", "1101110111011111", 32, 12, 5, 3),
    ("Fri", "DDDDDDDDDDDDDDDD", "0100010001000100", 25, 10, 120, 1),
    ("Sat", "BDACADBCCBDADCAB", "1110111111011101", 35, 10, 4, 3),
]
BAND = (0.75, 0.90)            # working band around the 80-85 % aim (generous on purpose)

def switch_rate(seq):
    return sum(a != b for a, b in zip(seq, seq[1:])) / (len(seq) - 1)

print("session | acc   step 1        | retrieval:passive | switches | fb delay | errors fixed")
tot_err = tot_fix = 0
for day, seq, ok, act, pas, delay, fixed in LOG:
    acc = ok.count("1") / len(ok)
    errs = ok.count("0")
    tot_err += errs; tot_fix += fixed
    s1 = "too easy" if acc > BAND[1] else "too hard" if acc < BAND[0] else "in band"
    print(f"{day:7s} | {acc:4.0%}  {s1:12s} | {act / pas:6.1f} : 1        |"
          f" {switch_rate(seq):7.0%}  | {delay:5d} s  | {fixed} of {errs}")
mix = [switch_rate(s) for _, s, *_ in LOG]
print(f"random order of 4 types switches about 75 % of the time; this week: "
      f"{sum(m > 0.6 for m in mix)} of 6 sessions interleaved")
print(f"all week: {tot_fix} of {tot_err} errors corrected and re-attempted"
      f" ({tot_fix / tot_err:.0%})")
# session | acc   step 1        | retrieval:passive | switches | fb delay | errors fixed
# Mon     | 100%  too easy     |    0.3 : 1        |      7%  |     2 s  | 0 of 0
# Tue     |  94%  too easy     |    0.4 : 1        |      7%  |     2 s  | 0 of 1
# Wed     |  69%  too hard     |    2.0 : 1        |    100%  |     5 s  | 3 of 5
# Thu     |  81%  in band      |    2.7 : 1        |     93%  |     5 s  | 3 of 3
# Fri     |  25%  too hard     |    2.5 : 1        |      0%  |   120 s  | 1 of 12
# Sat     |  81%  in band      |    3.5 : 1        |     93%  |     4 s  | 3 of 3
# random order of 4 types switches about 75 % of the time; this week: 3 of 6 sessions interleaved
# all week: 10 of 24 errors corrected and re-attempted (42%)

这份虚构记录显示:周一、周二全是集中练习,正确率 100% 与 94%,重读和看讲解的时间是主动做题的约 2.5 到 3.5 倍,练得很顺,学到的可能不多;周三第一次交错,正确率掉到 69%;周四、周六稳定在 81%,提取与浏览之比约 2.7 比 1 和 3.5 比 1;周五集中练习一类新题,正确率只有 25%,要等两分钟才拿到答案,12 个错误只纠正了 1 个,说明需要先降低难度。全周 24 个错误中 10 个得到纠正并重做(42%)。一周的记录只能提供调整的线索,不是证据。

第二部分 预注册随机对照试验方案

问题

对于学习一套全新的符号推理规则的成年人,「自适应难度把练习正确率维持在约 85% + 交错的提取练习」,与「把正确率维持在约 95% + 按规则分组的集中练习」相比,在练习时间与题量相同的条件下,能否提高 14 天后的迁移测验成绩?

学习材料:一套人工规则系统

为了排除先前知识的影响,学习材料是专门设计的人工规则系统。系统由 8 个无意义的图形符号组成;学习者要掌握 4 条把一串符号变成另一串符号的规则:

  • 镜像:把整串符号的顺序颠倒;
  • 配对替换:每个符号换成它固定的「搭档」(8 个符号两两配对);
  • 循环移位:把第一个符号移到末尾;
  • 条件删除:删除所有紧跟在某一特定符号之后的符号。

每道练习题给出一串符号和一个规则标记,要求写出结果;或者给出变换前后的两串符号,要求指出用了哪条规则。难度通过三个维度分级:符号串的长度(3 到 9 个)、连续使用的规则数(1 到 3 条)、以及干扰选项与正确答案的相似度。规则与符号的具体设计、全部题库与难度分级在入组前公开。

设计

要素 规定
参与者 18–65 岁、能流利使用研究语言、视力正常或矫正正常的成年人;通过大学与社区广告招募,不从作者的社群、学员、客户或牌卡用户中招募;不以任何诊断作为入排标准
排除 曾参加使用同一规则系统的研究;无法完成 14 天随访
随机分组 个体 1:1 随机,按基线矩阵推理得分(中位数上下)与研究点分层;由计算机生成、分配隐藏
练习安排 两组都在第 1、3、5、8 天各练习一次,每次 100 题、限时 35 分钟;每题作答后立即显示正确答案;两组题量与时长相同
A 组 加权升降法调节难度,目标正确率 85%;四条规则的题目完全交错排列
B 组(积极对照) 同样的加权升降法,目标正确率 95%;每次练习按规则分成四个 25 题的块,集中练习
盲法 参与者只被告知比较「两种练习程序」,不被告知研究假设;测验由程序自动计分;数据分析者在揭盲前不知道分组
主要结局 第 22 天(最后一次练习后 14 天)的迁移测验正确率:40 道题,包括练习中未出现过的规则组合、换成新符号集的同样规则,以及由结果反推原串的逆向题
次要结局 第 22 天已练题型的保持测验;练习中的实际正确率(操作检查);每次练习后的学习判断与挫败感评分;流失率
分析 协方差分析:自变量为分组,协变量为基线矩阵推理得分与研究点;双侧 α=0.05\alpha = 0.05;以所有有主要结局数据的随机化参与者为主分析,以多重插补做敏感性分析

样本量

推导

# Sample size, two-arm trial (Chapter 8): A = ~85 % adaptive + interleaved; B = ~95 % +
# blocked. Day-14 transfer test, ANCOVA with a baseline covariate correlating rho
# (residual variance 1 - rho^2). Normal approximation, two-sided alpha 0.05.
import math
from statistics import NormalDist
N = NormalDist()

def per_arm(d, rho=0.4, alpha=0.05, power=0.90):
    z = N.inv_cdf(1 - alpha / 2) + N.inv_cdf(power)
    return math.ceil(2 * z * z * (1 - rho * rho) / (d * d)) + 1

print("analysable participants per arm, 90 % power")
print(" effect d | covariate rho = 0.0 |  0.4 |  0.6")
for d in (0.25, 0.30, 0.35, 0.40):
    print(f"   {d:.2f}   | {per_arm(d, 0.0):19d} | {per_arm(d, 0.4):4d} | {per_arm(d, 0.6):4d}")
n = per_arm(0.30, 0.4)
rec = math.ceil(n / 0.85)
print(f"chosen: d = 0.30, rho = 0.4 -> {n} per arm")
print(f"   allowing 15 % loss by day 14: recruit {rec} per arm, {2 * rec} in all")
print("optional 2 x 2 factorial (difficulty 85 % vs 95 %) x (interleaved vs blocked):")
print(f"   each main effect at d = 0.30: {4 * math.ceil(n / 2)} analysable"
      f" ({math.ceil(n / 2)} per cell), if the factors do not interact")
ni = per_arm(0.30 / 2, 0.4)
print(f"   an interaction of 0.30 (difference of differences): about"
      f" {4 * math.ceil(ni / 2)} analysable ({math.ceil(ni / 2)} per cell)")
# analysable participants per arm, 90 % power
#  effect d | covariate rho = 0.0 |  0.4 |  0.6
#    0.25   |                 338 |  284 |  217
#    0.30   |                 235 |  198 |  151
#    0.35   |                 173 |  146 |  111
#    0.40   |                 133 |  112 |   86
# chosen: d = 0.30, rho = 0.4 -> 198 per arm
#    allowing 15 % loss by day 14: recruit 233 per arm, 466 in all
# optional 2 x 2 factorial (difficulty 85 % vs 95 %) x (interleaved vs blocked):
#    each main effect at d = 0.30: 396 analysable (99 per cell), if the factors do not interact
#    an interaction of 0.30 (difference of differences): about 1572 analysable (393 per cell)

按最小关注效应 0.30 个标准差、基线协变量与结局的相关 0.4、90% 把握度计算,每组需要 198 名可分析的参与者;考虑到 14 天随访中约 15% 的流失,每组招募 233 人,共 466 人。协变量相关越高,所需样本越少;表中列出了相关为 0 与 0.6 时的数字。

这是组合干预

A 组与 B 组在目标正确率(85% 对 95%)与练习顺序(交错对集中)两方面不同,因此即使结果为阳性,也不能说明是哪一个起了作用。若要分开两者,可采用 2 × 2 析因设计。程序显示,在两因素没有交互作用的前提下,同样的 396 名可分析参与者(每格 99 人)就能以同样的把握度检验每一个主效应;若要检验同样大小(0.30 个标准差)的交互作用,需要约 1,572 人(每格 393 人)。本方案选择两组设计,是因为它先回答一个实际问题:这套组合是否比常见的「做简单题、按章节练」更好。

判定规则

推导

# Decision rule fixed in advance. d = A minus B (ANCOVA, pooled SD); positive favours A.
# Manipulation check: A's median practice accuracy 78-90 %, B's >= 92 %. SESOI 0.30 SD.
SESOI = 0.30

def verdict(d, lo, hi, acc_a, acc_b, drop_gap):
    if not (0.78 <= acc_a <= 0.90 and acc_b >= 0.92):
        return (f"d = {d:+.2f}: NOT INTERPRETABLE - practice accuracy A {acc_a:.0%},"
                f" B {acc_b:.0%} missed the planned contrast")
    note = ""
    if drop_gap > 0.10:
        note = ("\n   + arm A lost over 10 percentage points more participants: report as"
                " a possible burden signal")
    if lo >= SESOI:
        v = "arm A improves transfer by at least the smallest effect of interest"
    elif lo > 0:
        v = "arm A improves transfer; size not shown to reach 0.30 SD"
    elif hi < 0:
        v = "arm A WORSENS transfer"
    elif lo >= -SESOI and hi <= SESOI:
        v = "no difference worth acting on"
    else:
        v = "unclear: the interval is too wide to decide"
    return f"d = {d:+.2f} ({lo:+.2f} to {hi:+.2f}): {v}{note}"

for case in ((0.48, 0.32, 0.64, 0.84, 0.95, 0.03), (0.20, 0.04, 0.36, 0.85, 0.96, 0.02),
             (0.05, -0.11, 0.21, 0.83, 0.95, 0.01), (0.10, -0.25, 0.45, 0.86, 0.94, 0.04),
             (0.40, 0.24, 0.56, 0.95, 0.96, 0.02), (0.35, 0.19, 0.51, 0.82, 0.95, 0.14)):
    print(verdict(*case))
print("secondary outcomes (retention of trained rules, frustration, judgments of learning)"
      "\n   are reported with intervals and never decide the verdict")
# d = +0.48 (+0.32 to +0.64): arm A improves transfer by at least the smallest effect of interest
# d = +0.20 (+0.04 to +0.36): arm A improves transfer; size not shown to reach 0.30 SD
# d = +0.05 (-0.11 to +0.21): no difference worth acting on
# d = +0.10 (-0.25 to +0.45): unclear: the interval is too wide to decide
# d = +0.40: NOT INTERPRETABLE - practice accuracy A 95%, B 96% missed the planned contrast
# d = +0.35 (+0.19 to +0.51): arm A improves transfer; size not shown to reach 0.30 SD
#    + arm A lost over 10 percentage points more participants: report as a possible burden signal
# secondary outcomes (retention of trained rules, frustration, judgments of learning)
#    are reported with intervals and never decide the verdict

示例结果是编造的。操作检查是判定的前提:如果 A 组练习的实际正确率中位数不在 78%–90% 之间,或者 B 组低于 92%,那么试验没有检验到它想检验的对比,无论结果如何,报告都写「不可解释」。只有当效应的置信区间下限不低于 0.30 个标准差时,报告才写「A 组使迁移成绩提高了至少最小关注的幅度」。如果 A 组的流失比 B 组多 10 个百分点以上,即使主要结局为阳性,也要作为可能的负担信号报告。

这项试验不能说明什么

第一,它是组合干预,不能分离 85% 与交错的各自贡献(见上文)。第二,学习材料是人工规则系统,结果能否推广到数学、语言、医学诊断等真实学科,需要另外的研究;人工系统的好处是排除了先前知识,代价是离真实学习较远。第三,主要结局在 14 天后测量,不能说明数月或数年后的保持。第四,A 组的练习更难,练习时的挫败感可能更高;这项试验记录挫败感与流失,但不能说明在没有研究报酬与研究氛围的日常学习中,学习者是否愿意坚持这样的练习。第五,这不是针对学习障碍或任何临床状况的研究,结果不能用于诊断或治疗。

伦理与利益冲突

试验须经独立伦理委员会批准,参与者签署知情同意,并在第一位参与者入组之前登记方案、题库与分析计划 (Nosek et al. 2018)。参与者可以随时退出而不需要说明理由,按完成的环节获得报酬。无论结果是阳性、阴性还是不可解释,结果、数据和分析代码都将公开发表。

利益披露

作者以 5D Library 的著作(包括本书)作为其社群课程、升维牌卡(5D Ascension Cards,Dimensional Shift Card Decks)与 Yafu AI 知识库的方法论基础,因此与本书主题有商业利益关系。本书不推销任何课程、牌卡或服务;第八章的试验设计为由独立于作者企业的研究人员实施和分析,不从作者的社群、学员或客户中招募;书中所有代码与研究方案均公开,供任何人检验。为限制利益的影响:题库、练习程序与分析代码在入组前公开;无论结果如何,结果、数据和代码都将公开。

参考文献

Kaernbach, Christian. 1991. “Simple Adaptive Testing with the Weighted up-down Method.” Perception & Psychophysics 49 (3): 227–29. https://doi.org/10.3758/BF03214307.
Levitt, H. 1971. “Transformed up-down Methods in Psychoacoustics.” The Journal of the Acoustical Society of America 49 (2B): 467–77. https://doi.org/10.1121/1.1912375.
Nosek, Brian A., Charles R. Ebersole, Alexander C. DeHaven, and David T. Mellor. 2018. “The Preregistration Revolution.” Proceedings of the National Academy of Sciences 115 (11): 2600–2606. https://doi.org/10.1073/pnas.1708274114.

Fan, Y. (2026). The 85% Rule for Optimal Learning, Myelination Kinetics and Deliberate Practice: From Stochastic Gradient Descent and the Zone of Proximal Development to Spaced Repetition, Read Beside Classical Chinese Learning Theory [学习的85%最优错误率定律、髓鞘化动力学与刻意练习] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23761339 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).