SuperMemo 2(简称 SM-2)是 Piotr Woźniak 于 1987 年发表的间隔重复算法,是现代电子记忆卡软件(如 Anki、Mnemosyne)的理论基础。它是 SuperMemo 系列的首次计算机化实现,也是目前应用最广泛的间隔重复算法之一1)。
Piotr Woźniak 在 1985 年提出了纸笔版的 SM-0 算法,通过手动管理复习间隔来对抗艾宾浩斯遗忘曲线2)。但手工计算的效率极低,难以推广。1987 年 12 月,Woźniak 用 Turbo Pascal 3.0 编写了第一个计算机版 SuperMemo 程序,将间隔计算自动化,这就是 SM-2 算法3)。它的核心理念是:
如果在遗忘临界点之前安排复习,就能以最少的时间维持长期记忆
这一原则与更早的心理学研究一致,间隔重复本身自 1930 年代以来就已被多位心理学家提出推荐4)。
每张卡片维护三个属性,每次复习后更新5):
| 变量 | 含义 | 初始值 |
|---|---|---|
| n | 连续正确回忆次数 | 0 |
| EF(Easiness Factor) | 难度系数(范围 1.3~2.5) | 2.5 |
| I | 距下次复习的天数(间隔) | 0 |
每次复习时,用户需对回忆质量进行 0-5 级自评6):
| 评分 | 含义 |
|---|---|
| 0 | 完全忘记——完全不能回忆 |
| 1 | 错误——看到答案后觉得熟悉 |
| 2 | 错误——看到答案后觉得很容易 |
| 3 | 正确——但回忆十分困难 |
| 4 | 正确——有些犹豫 |
| 5 | 正确——完美回忆,毫不费力 |
评分 3 及以上视为“正确”,0-2 视为“错误”。Woźniak 在设计 0-5 评分尺度时充分考虑了数字键盘的布局便利性——操作者可以在一秒内完成评分7)。
SM-2 每次复习执行两步更新:先确定新间隔,再调整难度系数8)。
步骤 1:计算新的间隔 I
如果评分 >= 3(回答正确):
如果评分 < 3(回答错误):
初始间隔 1 天和 6 天源自 Woźniak 在 SM-0 算法(纸笔版)中的观察——后续间隔呈近似常数倍数增长9)。
步骤 2:更新难度系数 EF
EF 根据评分动态调整,Woźniak 通过启发式方法构造了以下公式,该公式在后续 3.5 年的计算机化使用中几乎没有变化10):
EF = EF + (0.1 - (5 - q) × (0.08 + (5 - q) × 0.02))
其中 q 为用户评分(0-5)。注意当 q=4 时,EF 不变11)。计算后确保:
如果 EF < 1.3:EF = 1.3
EF 的下限 1.3 有特殊的实践意义:Woźniak 发现 EF 低于 1.3 的卡片复习过于频繁,且通常存在表述上的缺陷(未遵循最小信息原则)。将 EF 下限设为 1.3 后,学习效率显著提升,同时也提供了一个识别需要重新表述的卡片的指标12)。
SM-2 的完整决策路径:
假设一张新卡片的初始状态:n=0, EF=2.5, I=0
第一次复习: 用户评分 5(完美回忆)
第二次复习(第 2 天): 用户评分 4
第三次复习(第 8 天): 用户评分 5
随着正确次数增加,间隔呈指数增长:1 → 6 → ~16 → ~43 → ~116 天……
如果某次回答错误(评分 0-2),n 归零、I 重置为 1 天,从第一天重新开始。
所有评分低于 4 的卡片,在本次复习结束后会被再次展示,直到评分达到 4 或 5。这意味着“勉强正确”(评分 3)也会在同一次会话中再看一遍。这一机制源自 Woźniak 的观察:评分 3 的卡片回忆十分困难,不做即时补强则极易在下一次间隔后彻底遗忘13)。
SM-2 是后续算法家族中的基础版本14):
| 算法 | 年份 | 主要改进 |
|---|---|---|
| SM-0 | 1985 | 纸笔计算,人工管理复习间隔 |
| SM-2 | 1987 | 首次计算机实现,引入 EF 动态调整 |
| SM-4 | 1989 | 优化 OF 矩阵(最优间隔矩阵) |
| SM-5 | 1990 | 引入遗忘指数概念 |
| SM-8 | 1995 | 利用用户数据加速间隔适应 |
| SM-11 | 2002 | 抵抗复习延迟/提前干扰 |
| SM-17 | 2016 | 引入双成分记忆模型 |
SM-2 虽已诞生近 40 年,但仍是应用最广泛的间隔重复算法。Anki 的默认算法基于 SM-2 改进而来,其评分按钮(Again/Hard/Good/Easy)同样源自 SM-2 的 0-5 评分体系15)。Mnemosyne 也使用类似的 SM-2 变体。
优势:
局限:
初始化:
n = 0
EF = 2.5
I = 0
每次复习(用户评分 q):
// 计算新间隔
if q >= 3:
if n == 0: I = 1
elif n == 1: I = 6
else: I = round(I * EF)
n = n + 1
else:
n = 0
I = 1
// 更新难度系数
EF = EF + (0.1 - (5 - q) * (0.08 + (5 - q) * 0.02))
if EF < 1.3: EF = 1.3
// 返回下次复习日期
return today + I
SM-2 用极简的数学规则捕捉了人类记忆的规律——刚学完的东西复习最频繁,掌握后间隔自然拉长。自 1987 年问世以来,它已被无数学子、语言学习者和专业人员所验证,至今仍是理解和实现间隔重复的绝佳起点。如果希望深入了解更现代的间隔重复算法,SuperMemo 团队持续发布的后续版本(SM-4 至 SM-20)和学术论文值得关注18)。