博客 / Spaced Repetition
FSRS vs SM-2:Anki 调度算法该用哪个?
重点
用 FSRS。SM-2 用同一条 1987 年的公式给每个人调度;FSRS 则把记忆模型拟合到你自己的复习记录,还能让你选择目标保持率。在数亿条真实复习数据上运行的基准测试一致显示,FSRS 预测回忆更准确 — 这在实践中意味着"同样的保持率,更少的复习量"。桌面版 Anki 把 FSRS 作为可选项;Guru 在 iPhone 上开箱即用 FSRS。
SM-2 从何而来
SM-2 由 Piotr Woźniak 于 1987 年为 SuperMemo 发表,传统 Anki 的调度器正是承袭自它。核心很简单:每张卡都带有一个"ease 系数"(初始约 2.5)。答得好,下次间隔就是上次间隔乘以 ease;答"困难"或答错,ease 就下降。
它确实有效 — 几十年的 Anki 用户就是证明。但它的机制有已知的失效模式:
- Ease 地狱。 每次失误都会压低 ease,而且恢复得很慢。曾经难住过你一次的卡片会永远困在短间隔里,用你根本不需要的复习塞爆每日队列。
- 一刀切。 公式里的常数是 1987 年手工调出来的,对每个人、每种卡片类型都一样。你真实的遗忘曲线从未被纳入考量。
- 没有保持率旋钮。 你没法告诉 SM-2"这副牌我想记住 90%"。你只能去调那些间接的旋钮(间隔系数、ease 奖励),然后祈祷。
FSRS 有何不同
FSRS(Free Spaced Repetition Scheduler,由 Jarrett Ye 与协作者开发的开源项目)用一个记忆模型取代了固定公式。每张卡都用三个量来追踪(DSR 模型):
- Difficulty(难度) — 这张卡对你有多难
- Stability(稳定性) — 这段记忆目前能维持多久
- Retrievability(可提取性) — 此刻你能回忆起它的概率
这些参数不是手工调出来的常数:优化器会把它们拟合到你自己的复习历史上。而且不用再调间接旋钮,你直接设定自己真正在乎的东西 — 目标保持率(比如 0.90)— FSRS 就会把每张卡排在"它的回忆概率即将跌破该值"的那一刻。
两个实际结果:
- 减少无效复习。 你记得很牢的卡片会被推得比 SM-2 敢推的更远;真正难的卡片则更早回来。在用数亿条真实 Anki 复习数据运行的开源项目 srs-benchmark 中,FSRS 系列一致地比 SM-2 更准确地预测回忆 — 而这个预测精度,正是能省下来的复习量。
- 没有 ease 地狱。 一次失误只会合理地更新稳定性和难度,而不会永久惩罚这张卡片。
诚实的但书
- FSRS 的好坏,取决于它所拟合的历史。复习量很少时,它会从群体层级的默认参数起步(依然够用 — 那是用海量数据拟合出来的)。
- 如果你老是手动覆盖间隔,或者把"困难"当成"答错"来用,模型学到的就是带噪声的信号。请诚实评分。
- SM-2 并没有"坏掉"。如果你的节奏稳定、负担也还能接受,那么切换是一种优化,而不是急救。
不丢进度地切换
桌面版 Anki(23.10 或更高版本):牌组选项 → 启用 FSRS → 设定目标保持率(0.85–0.95 是合理区间;越高,复习越多)→ 点击"优化",用你的历史来拟合参数。你的卡片、历史记录和媒体都原封不动 — 改变的只有未来的调度。
iPhone 上:Guru 原生就用 FSRS — 导入的牌组(保留了调度状态的 .apkg)会从既有状态继续,而 AI 新生成的牌组(直接从你的 PDF 生成)从第一张卡起就用 FSRS 调度。没有需要你去找的开关。
目标保持率怎么选
- 0.90 — 默认推荐;负担均衡。
- 0.95 — 几周内就要考试、失败代价高昂的时候。预期每日队列会明显变大。
- 0.85 — 长周期的积累(语言、常识),总量比任何单张卡片都更重要。
FSRS 的意义在于:这个取舍终于变得明确了 — 你选择保持率,算法则付出维持它所需的最小复习成本。