SM-2 vs FSRS vs Leitner vs Anki:2026 年哪個間隔重複演算法真的贏了
我在 USMLE Step 1 備考時花了 416 個小時打字做卡片,之後才意識到——給我安排"下一張複習哪張卡"的演算法,其實根本不重要。算一下就明白:10,000 張卡 × 每張 2.5 分鐘做卡,等於整整 17 天什麼都不幹只敲鍵盤。等我開始關心是哪個排程器在挑下一張卡的時候,輸入端的戰爭我已經輸了。
這段經歷直接決定了我後來怎麼讀那些"FSRS 比 SM-2 省 30% 複習量"的 benchmark。數字是真的。但那是問題裡簡單那一半的 benchmark。
下面是 2026 年大多數人會真的碰到的四種演算法——Leitner、SM-2、Anki 改版 SM-2、FSRS——的橫向對比。我做過一個間隔重複產品,對這件事有立場。我會告訴你 SmartRecall 用的是哪個、為什麼,但這篇的目的是把細節寫夠,讓你能在事實層面跟我吵起來。
先說一句"間隔重複"在解什麼問題
直接進演算法之前,一段提醒。半個網際網路關於 FSRS-vs-SM-2 的討論裡,發言的人其實不太分得清兩者各自在解什麼。
Cepeda 等 (2008) 跑了一項 26 周、1,354 名被試的研究,結果是:把複習攤開比把複習壓在一起,單位學習時間的留存率提高大約 200%。這不是小效應,是認知心理學裡被反覆復現的最大效應之一。每個間隔重複演算法解的都是同一個後續問題:**給定一張你看過 N 次的卡,最優的下一次複習是什麼時候?**太早,你在浪費力氣複習已經會的;太晚,你已經忘了,間隔效應直接歸零。
下面四個演算法,本質上是對這個問題的四種押注。
Leitner (1972) — 紙盒演算法
Sebastian Leitner 在 So lernt man lernen (1972) 裡提出來的。是你德國表哥 1985 年用鞋盒在跑的那個東西。
機制:5 個實體盒子。新卡放 Box 1。答對升一格,答錯回 Box 1。Box 1 每天覆習,Box 2 每兩天,Box 3 每四天,往後大致按 2 倍遞增。每張卡除了"在哪個盒子裡"之外沒有別的狀態。
它做對的:這是"擴充套件間隔"最樸素的表達,而且能用。如果你只讀這一段,結論是——任何間隔安排都比不安排好。Leitner 是地板,地板已經能拿到 200% 的留存提升。
它做錯的:同一個盒子裡所有卡被一視同仁。差點忘的卡和 0.4 秒就答出來的卡,升格幅度一樣。看了 200 次的卡和看了 3 次的卡,只要恰好在同一個盒子,就被當成一樣的。沒有"卡片難度"的概念,沒有"你這次有多確定"的概念,2 倍遞增的節奏跟你個人的遺忘曲線無關。Quizlet 的 "Learn" 模式本質上就是 Leitner 套了個 UI。
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 — 你們大多數人實際在跑的那個
2006-2008 年 Damien Elmes 寫 Anki 時,從 SM-2 起步做了幾處務實的改動。在 Anki 23.10 把 FSRS 作為可選排程器之前,"我用 Anki" 的複習裡 90% 跑的是這個演算法,2026 年新使用者的預設仍然是它。
重要的幾處改動:
- 四個按鈕取代六個分。 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 附近、你其實永遠學不會的卡。
它做對的:這是世界上經過最多實戰檢驗的間隔重複排程器。幾千萬使用者、幾十億次複習日誌、幾十年的邊緣 case 都被磨過了。無聊得很好。
它做錯的:跟 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 的曲線。
實證依據:Domenech-Iglesias 等 (2024) 在 20,000+ Anki 使用者的複習日誌上跑了基準測試,比較 FSRS 和 SM-2 在同一留存目標下的表現。FSRS 在達到相同 90% 留存率時,複習量減少約 30%。這個數字是真的,可復現,大概是 Cepeda 的間隔效應 meta-analysis 之後間隔重複領域最重要的定量結果。
它做對的:有遺忘模型,模型用你的資料擬合,benchmark 是誠實的。如果你已經有幾千張卡、幾萬次複習日誌的成熟卡組,切到 FSRS 每週能給你省下能量化的時間。
它做錯的(或者說部署起來更難的):你需要有一定量的複習日誌,個性化才能起效。普遍說法是 ~1,000 次複習之後,針對你個人擬合的權重才穩穩超過預設權重;幾千次以後,差距才肉眼可見。新使用者拿到的是預設權重——比 SM-2 的 1987 年常數好,但好不到 30%。實現也確實更難:SM-2 五行能寫完,FSRS 要訓練權重 + DSR 更新規則 + 想做個性化還得有最佳化器流水線。
橫向表格
| 演算法 | 年份 | 每張卡的狀態 | 排程輸入 | 留存目標 | 主要弱點 |
|---|---|---|---|---|---|
| Leitner | 1972 | 盒子編號 (1-5) | 對 / 錯 | 隱式(~85%) | 沒有按卡定時;同盒所有卡一視同仁 |
| SM-2 | 1987 | EF + 間隔 | 0-5 評分 | 隱式(~90%) | 手調常數;過度複習成熟卡 |
| Anki SM-2 | 2006-2023 | EF + 間隔 + 失敗次數 | Again/Hard/Good/Easy | 隱式(~90%) | 繼承 SM-2 缺陷;長期卡組的"易度地獄" |
| FSRS | 2022 → 持續迭代 | Difficulty + Stability + Retrievability | Again/Hard/Good/Easy | 顯式可配置(預設 90%) | 需要複習日誌才能個性化;實現更復雜 |
| SuperMemo 18+ | 2019 → | 完整 DSR + 工作量模型 | 0-5 評分 | 可配置 | 閉源;無法遷移到其他工具 |
那到底哪個贏
老實說:
單兵作戰、卡組 1,000 張以下——一門外語詞彙、一章教材、一個短期資格證——SM-2(或 Anki 的 SM-2)夠用,FSRS 那個優勢主要是噪聲。30% 那個 benchmark 是在重度使用者、成熟卡組上平均出來的;小卡組上一天省不了多少。
重度使用者、5,000+ 張卡、跨年時間線——USMLE、MCAT、法考、考研、嚴肅的語言專案、任何有兩萬張醫學卡的人——FSRS 贏,贏的是真的。切。
Leitner 在實體卡片或小學課堂裡贏。"五個盒子,對就升錯就降"的極簡就是它的整個教學賣點,按卡最佳化在那個場景反而是負擔。
SmartRecall 為什麼仍然選 SM-2
我做了 SmartRecall,選了 SM-2。對 FSRS 有強烈意見的人偶爾會來問我為什麼,老實答案就是這篇文章開頭那段。
對我們的使用者——一個備考重磅考試、還沒建好卡組的人——瓶頸不是 FSRS 在他第一千次複習之後開始釋放的那 30% 複習節省。瓶頸是讓卡片先存在出來。我們把最佳化預算花在輸入端(那條把一章 PDF 在 12 分鐘裡變成 800 張合格卡片的 AI 流水線),因為 416 小時那堵牆就在那一側。卡片一旦存在,SM-2 的排程足夠好,好到 FSRS 那點邊際複習時間在我們已經省下的輸入時間面前基本看不見。等 18 個月後我們的平均使用者有了成熟複習日誌,再回頭評 FSRS 不遲;今天,演算法差一點、卡片好得多勝過演算法好一點、根本沒卡。
這是我們的押注。可能是錯的。如果你的備考時間線是兩年、卡組終將 2 萬張以上,請直接在 Anki 裡跑 FSRS,別讓我勸退你。SmartRecall 服務的是那個 8 周衝刺——輸入問題比排程問題大得多的視窗。
今天該做什麼
如果你完全沒在用間隔重複:挑最容易上手的(Anki 預設設定,或者你不想手敲卡就用 SmartRecall),今天就開始。你糾結兩小時的演算法選擇,在你明天沒卡可複習的情況下毫無意義。
如果你已經在 Anki 預設排程上跑了一年、卡組超過 5,000 張:開啟 Tools → Deck Options → FSRS,啟用,點 "Optimize" 用你的複習歷史擬合權重。十分鐘搞定,往後每月大概給你省兩小時。官方指南 不長。
如果你正盯著一本 700 頁的教材、距離考試還有 8 周、做卡片的數學算不過來:那就是我做 SmartRecall 想解決的那個問題。20 個免費 credits 夠你在一章上測一下——讓它生成卡片,看一眼,判斷那是不是"如果你有時間會自己寫出來的卡"。
— Alex

