间隔重复算法对比:SM-2、FSRS、Leitner 与 Anki

2026/05/14

间隔重复算法都在回答同一个实际问题:学习者什么时候应该再看到每张卡片?Leitner 使用固定盒子,SM-2 更新易度因子和间隔,Anki 的旧调度器扩展了 SM-2,FSRS 则根据目标保留率建模难度、稳定性和可提取性。

这篇是宽口径的算法地图。如果你专门在选 FSRS 还是 SM-2,请直接阅读 FSRS vs SM-2 对比,那篇聚焦当前 Anki 设置、优化与迁移。

先说一句"间隔重复"在解什么问题

直接进算法之前,一段提醒。半个互联网关于 FSRS-vs-SM-2 的讨论里,发言的人其实不太分得清两者各自在解什么。

Cepeda 等 (2008) 测试了不同保留周期下的复习间隔,发现合适的学习间隔取决于学习者需要保留材料多久。每个间隔重复算法都在继续回答:**给定一张看过的卡,下一次复习应该在什么时候?**太早可能浪费精力,太晚则会提高回忆失败的可能性。

下面四个算法,本质上是对这个问题的四种押注。

Leitner (1972) — 纸盒算法

Sebastian Leitner 在 So lernt man lernen (1972) 里提出来的。是你德国表哥 1985 年用鞋盒在跑的那个东西。

机制:5 个实体盒子。新卡放 Box 1。答对升一格,答错回 Box 1。Box 1 每天复习,Box 2 每两天,Box 3 每四天,往后大致按 2 倍递增。每张卡除了"在哪个盒子里"之外没有别的状态。

它做对的:这是在成功回忆后扩展复习间隔的简单、可视化方式。学习者只用纸质卡片和盒子就能执行,不需要软件或逐卡计算。

它做错的:同一个盒子里的卡被一视同仁。差点忘的卡和立即想起的卡升格幅度一样。它不显式估计卡片难度或当前回忆概率,节奏也是固定的,而不是根据复习历史拟合。

200 张以下的卡组,Leitner 真的够用。再往上,"没有按卡定时"这件事就开始让你做不必要的复习。

SM-2 (Wozniak, 1987) — 别人都在抄的那个

Piotr Wozniak 的 SM-2——他硕士论文的一部分,1987 年随 SuperMemo 1.0 for DOS 上线——是过去近 40 年里默默支撑半个间隔重复世界的那个算法。

机制,用人话讲:

  • 每张卡有一个易度因子 (EF),默认 2.5。
  • 每张卡有一个间隔——离下一次复习还有几天。
  • 每次复习后你给自己回忆质量打分,0-5 分(0 = 完全忘了,5 = 即刻完美回忆)。
  • 评分 ≥ 3:下一个间隔 = 上一个间隔 × 当前 EF。EF 根据具体分数微调上下。
  • 评分 < 3:卡片重置——间隔回到 1 天,EF 被惩罚。

就这些。SM-2 原始描述 比这一节还短。

它做对的:易度因子是按卡走的。你觉得简单的卡 EF 涨得快,间隔迅速拉长;你觉得难的卡 EF 跌向 1.3 的下限,复习更频繁。它把"不是所有卡都一样"这件显而易见的事编码成一个你能直接推理的数字。整个算法核心逻辑大概五行代码。我手写实现过几次,闭眼能写。

它做错的:公式是手工调出来的。Wozniak 1987 年根据自己的复习记录加几百个朋友的数据挑了那些常数。现代数据显示曲线不太对——SM-2 倾向于过度复习已经很熟的卡(成熟卡的间隔涨得太慢),而且对"勉强答对"和"秒答"之间的区别反应不足。它也根本没有"遗忘"本身的模型,就是闷头乘 EF。

0-5 评分在实操里也是个 UX 问题。大多数人没法可靠区分 2 分和 3 分——而这恰好是卡片要么继续展开、要么直接重置的悬崖。Anki 注意到了。

Anki 的旧 SM-2 调度器

Damien Elmes 创建 Anki 时从 SM-2 起步,加入了几处务实改动。在 Anki 23.10 集成 FSRS 之前,这是 Anki 的主要调度器。当前 Anki 文档将 FSRS 作为现代调度器,同时保留基于 SM-2 的旧选项。

重要的几处改动:

  • 四个按钮取代六个分。 Anki 把 Wozniak 的 0-5 折成 "Again / Hard / Good / Easy"。Again 是失败(间隔重置,EF 惩罚)。Hard / Good / Easy 大致对应 SM-2 的 3、4、5。这是 UX 上的胜利——大多数人无法老实在 6 档里给自己评分,但能在 4 个按钮里挑一个"感觉对的"。
  • 失败处理可调。 SM-2 是二元的:失败或不失败。Anki 让你配置失败如何惩罚 EF(默认 −0.20)、失败的卡要爬几个"再学习"步骤(默认 10 分钟然后重新毕业)、以及"困难卡"阈值(默认连续失败 8 次)。
  • 新卡毕业前的学习步骤。 新卡按 1m / 10m / 1d 三步走完才进入 SM-2 正式调度。SuperMemo 没有这个,是 Anki 发明的,也基本上被证明是对的。
  • EF 下限和"易度地狱"。 Anki 把 EF 卡在 1.3 以上,意味着你一直答错的卡最终会停在一个固定的、令人发指的高频复习节奏,而不是一路衰减成天天见。这同时是经典抱怨 "leeches in ease hell" 的来源——长期卡组里堆着一批 EF 卡在 1.3 附近、你其实永远学不会的卡。

它做对的:四个熟悉的回答按钮、学习步骤、可配置的失败处理,以及多年的兼容性工作。

它做错的:跟 SM-2 错的一样。1987 年手调的常数、没有真正的遗忘模型、过度复习成熟卡。当你跑了 18 个月、卡组到 3 万张的时候,你能感觉到那个拖累。

FSRS (Open Spaced Repetition, 2022→) — 真的有遗忘模型那个

FSRS——Free Spaced Repetition Scheduler,最早作者是叶峻峣(Jarrett Ye)——是第一个被广泛部署、建立在显式遗忘模型而不是手调倍数上的间隔重复算法。Anki 23.10(2023 年 10 月)开始作为可选项上线,到 25.x 已经是新用户的默认。源码和论文在 github.com/open-spaced-repetition/fsrs4anki

核心模型叫 DSR——Difficulty / Stability / Retrievability,如果你想对 FSRS 有立场,值得理解这三个量:

  • 稳定性 S — 你这张卡的可提取概率衰减到 90% 还需要多少天。S = 30 意思是:30 天后你有 90% 概率仍然记得。
  • 可提取性 R — 此刻你能回忆起这张卡的概率,建模为 R = exp(-t/S)t 是距离上次复习的天数。这是一条真实的指数遗忘曲线,不是凭空设定。
  • 难度 D — 每张卡一个常数(0-10),调节稳定性在每次复习后的增长速度。

每次复习后,FSRS 用 17-21 个训练得到的权重(FSRS-4.5、FSRS-5、FSRS-6 自 2023 年起都先后上线)更新 S 和 D。权重是用你自己的复习日志做梯度下降拟合出来的。这是关键的部分:FSRS 是针对你个人遗忘曲线做了个性化,不是 Wozniak 的曲线。

FSRS 可以立即使用默认参数,也可以稍后根据复习历史优化参数。公开的 SRS Benchmark 使用大型 Anki 复习数据集,按预测指标评估 FSRS 各版本、SM-2 和其他模型。它支持模型对比,但不支持对所有学习者承诺一个通用的“省多少次复习”或“省多少时间”。

FSRS 的优势是显式的目标保留率控制,以及使用复习历史拟合模型的能力。它的部署代价是更多状态、会演进的公式、优化器工作流,以及与修改调度的插件发生冲突的可能性。

横向表格

算法年份每张卡的状态调度输入留存目标主要弱点
Leitner1972盒子编号 (1-5)对 / 错隐式(~85%)没有按卡定时;同盒所有卡一视同仁
SM-21987EF + 间隔0-5 评分隐式(~90%)手调常数;过度复习成熟卡
Anki SM-22006-2023EF + 间隔 + 失败次数Again/Hard/Good/Easy隐式(~90%)继承 SM-2 缺陷;长期卡组的"易度地狱"
FSRS2022 → 持续迭代Difficulty + Stability + RetrievabilityAgain/Hard/Good/Easy显式且可配置实现和运行更复杂
SuperMemo 18+2019 →完整 DSR + 工作量模型0-5 评分可配置闭源;无法迁移到其他工具

应该选哪种间隔重复算法?

  • 选 Leitner:用于纸质闪卡或教室活动,可视的五个盒子就是功能本身。
  • 选 FSRS:你在使用当前版本的 Anki,并希望控制目标保留率、优化记忆模型。
  • 选 SM-2:你的应用已可靠实现它,或者你更重视兼容性、简洁和可审计性。
  • 只在需要时选 Anki 旧调度器:例如现有卡组、插件或工作流依赖它。

调度器只是系统的一部分。卡片质量、如实评分和持续复习,仍然决定了算法能否获得有用的反馈。

SmartRecall 为什么使用 SM-2

SmartRecall 目前使用 SM-2,不提供 FSRS 调度或 FSRS 参数优化。它经过验证的产品重点是制卡工作流:将支持的 PDF 或粘贴的学习材料转换为可编辑闪卡,由用户检查和编辑后,再用 SM-2 安排复习。

边界很明确:如果 FSRS 是必需功能,选 Anki;如果减少手工制卡更重要,可以考虑 SmartRecall,但在学习前必须检查 AI 生成的卡片。

今天该做什么

如果你使用当前版本的 Anki,请按官方 FSRS 工作流开始,并有意识地设置目标保留率。如果你使用其他应用,请先确认它真正实现的调度器,不要把所有四按钮界面都当成 Anki 或 FSRS。

如果你正在专门比较 FSRS 与 SM-2,继续阅读专题对比。如果制卡才是限制,可以查看 SmartRecall 的 PDF 转闪卡工作流,并在加入学习计划前检查生成结果。

常见问题

哪种间隔重复算法最好?

没有适合所有工作流的唯一胜者。FSRS 适合需要显式保留率目标和可选模型优化的当前 Anki 用户;SM-2 更容易实现和审计;Leitner 适合纸质卡片和课堂。最佳选择是你的工具正确实现、且符合你控制需求的算法。

间隔重复算法有什么不同?

它们在保存的状态和选择下一个间隔的方式上不同。Leitner 让卡片在固定盒子中移动;SM-2 更新易度因子和间隔;Anki 旧调度器在 SM-2 风格的基础上加入学习与失败处理;FSRS 围绕目标保留率建模难度、稳定性和可提取性。

Anki 使用 FSRS 吗?

是。Anki 在 23.10 版中集成了 FSRS,当前文档将其作为现代调度器,同时保留基于 SM-2 的旧选项。现有卡组可能保留旧设置,因此应检查卡组所用的预设。

Leitner 系统放在哪个位置?

Leitner 是盒子法——卡片在五个实体盒子之间按固定节奏移动复习。它不像 SM-2 或 FSRS 那样做逐卡优化,但简单就是它的卖点:特别适合纸质卡片和课堂场景,"答对往上挪、答错往下挪"就是全部教学逻辑。软件卡组上,SM-2 或 FSRS 都胜过它。

SmartRecall 用的是 SM-2 还是 FSRS?

SmartRecall 使用 SM-2,目前不提供 FSRS 调度或参数优化。它的独特工作流是从支持的源材料生成可编辑闪卡,用户检查卡片后再用 SM-2 安排复习。

Alex Chen

Alex Chen