本文經 J-Compass 編輯流程調查與事實查核;編輯團隊於發布前審核資料來源及準確性。 了解我們的編輯方法 →
本譯文僅供參考,以方便閱讀。內容以英文版本為準。 閱讀英文原文 →
SM-2 與 FSRS 對比:Anki 排程演算法原理
SM-2 與 FSRS 對比的核心問題在於:在 Anki 的兩套排程演算法中,究竟是由哪一套來決定每張卡片下一次回到眼前複習的時間。Anki 同時內建了這兩種演算法。你的牌組使用哪套演算法,將直接決定日語學習者每天面臨的複習卡片總量。1
概述
排程器(Scheduler)是你在對卡片評分後,負責選定每張卡片下一次複習日期的核心引擎。Anki 擁有兩套排程器:源自 SuperMemo 2 的傳統預設演算法 SM-2,以及自由間隔重複排程器(Free Spaced Repetition Scheduler, FSRS)。1
一句話概括兩套演算法
SM-2 是一套固定的算術公式,它透過為每張卡片單獨計算的「簡易度因子」(Ease Factor)來按比例縮放卡片的下一次間隔。其計算過程沒有基於底層的人類記憶運作模型。2
FSRS 則是一套記憶模型,其參數透過你的實際複習記錄數據訓練得出。它能預測你的記憶提取機率,並根據該預測進行排期,而非依賴固定的乘數。34
「FSRS」全稱為 Free Spaced Repetition Scheduler(自由間隔重複排程器)。其最佳化器、基準測試工具與參考實現均在 open-spaced-repetition 組織下完全開源。456
你的牌組當前正在運行哪套演算法
Anki 在 2023 年 10 月 31 日發布的 23.10 版本中加入了對 FSRS 的支援。版本更新說明中寫道:「Anki 現已整合對 FSRS 的支援(該演算法對 SM-2 提供的排程機制進行了重大改進)。你可以在 Anki 內部直接計算模型權重,無需再使用自訂排程指令碼。」7
自 Anki 23.10(2023 年 10 月)起,FSRS 一直是一項由使用者自主選擇開啟(Opt-in)的功能。Anki 常見問題解答針對該版本的情況解釋道:「截至 Anki 23.10,Anki 提供了兩套可用演算法。第一套基於 SuperMemo 2 演算法。」換言之,FSRS 是需要使用者手動啟用的替代方案,而非系統自動替換。17
官方手冊明確指出:「FSRS 只能全域啟用;你無法在某些預設中啟用它而在其他預設中禁用它。」啟用 FSRS 是一項由使用者控制的單一全域設定,會作用於你的整個卡片集合。8
2024 年 12 月 6 日,核心維護者發起了一項提議(Issue #3616),建議為新使用者開箱預設啟用 FSRS:「在下一個非補丁版本(非 24.11.x)更新中,我認為是時候預設開箱啟用 FSRS 了。大家有異議嗎?」該提議仍處於開啟狀態,尚未綁定具體的發布版本,因此目前尚不能確定從哪個具體版本起會預設開啟。9
實際的影響顯而易見:在啟用 FSRS 之前建立的牌組或卡片集合,或者在未更新的老客戶端上使用的設定,可能仍在運行傳統的 SM-2。18
如何檢查
牌組選項(Deck Options)會顯示當前處於啟動狀態的演算法。FSRS 會作為手冊「牌組選項」部分所述的開關選項出現在該介面中。8 具體點擊步驟屬於專門的 Anki 工具指南範疇,此處不再贅述。
SM-2 的運作原理
SM-2 是 Piotr Wozniak 於 1990 年設計的第二代 SuperMemo 演算法。它的誕生比 Anki 早了幾十年,也是當今大多數單字卡應用程式仍預設採用的「簡易度因子」排程器的始祖。2
簡易度因子與間隔公式
SM-2 為每個項目儲存一個狀態變數,即簡易度因子(E-Factor,簡稱 EF)。它的初始值為 2.5,底限閾值為 1.3。2 複習間隔基於該單一數值遞增:
I(1) := 1
I(2) := 6
for n > 2: I(n) := I(n-1) * EF
此處 I(n) 是以天為單位的重複間隔。在經歷前兩次固定間隔之後,後續每個新間隔都只是前一個間隔乘以該卡片的簡易度。2
每次完成評分複習後,簡易度因子本身都會根據以下公式更新,其中 q 是 0 到 5 級評分標準下的回答品質:
EF' := EF + (0.1 - (5 - q) * (0.08 + (5 - q) * 0.02))
更新之後,EF' 會被強制限制在不低於 1.3 的底限。2 原始 SM-2 的評分標準從「5 - 完美回答」一直延伸到「0 - 完全遺忘」。它包含諸如「2 - 錯誤回答;但正確答案似乎很容易回想起來」等檔位。2
當回答品質低於 3 時,SM-2 的遺忘規則會將重複計數重置為 I(1),但在該步驟中並不會改變 EF。2
Anki 的具體實現與 1990 年的技術規範存在文獻記錄上的差異:可自訂的初始學習步驟、四個答案按鈕(重來/困難/良好/簡單)而非六個數字等級,並加入了額外保護以防止卡片陷入「超低間隔地獄」。1
Anki 中所展示的「簡易度」(Ease),正是這個單卡乘數 E-Factor。下一次間隔本質上就是當前間隔乘以簡易度。這使得整個排程方案完全依賴乘法公式驅動,對學習者實際回想起卡片的機率沒有任何科學預測。21
簡易度地獄:為什麼 SM-2 會過度複習你已經掌握的卡片
只要你遺忘了一張卡片,E-Factor 就會下降,而 SM-2 的公式中沒有任何機制能讓它在下跌後自動回升。2 隨著 1.3 底限的存在,一張經歷過多次遺忘的卡片可能會長期被死死鎖定在最低簡易度附近。
這類卡片的間隔增長因此極其緩慢,每次只能乘以一個接近 1.3 的數字,而非 2.5 或更高。即使是一張你現在已經掌握得很好的卡片,也會以極短的間隔頻繁浮現。學習者社群將這種系統性缺陷稱為「簡易度地獄」(Ease Hell)。24
下圖對比了單次遺忘在兩種演算法下的傳播與處理方式。這是理解為什麼 SM-2 會困住卡片而 FSRS 不會的最直觀視角。
FSRS 的運作原理
FSRS 摒棄了 SM-2 單一的簡易度數值,引入了一套透過機器學習擬合你實際複習歷史的三組件記憶模型。1 它不再使用單一乘數,而是利用三個相互作用的變數來綜合估算卡片何時即將被遺忘。
三個核心變數:難度、穩定性與可提取性
FSRS 追蹤可提取性、穩定性和難度三個維度,而非 SM-2 的單一簡易度數字。1 FSRS 官方基礎說明對其進行了嚴格定義:
| 變數 | 定義 |
|---|---|
| 可提取性(Retrievability, R) | 「人在特定時刻成功回憶起特定資訊的機率。」4 |
| 穩定性(Stability, S) | 「R 從 100% 下降到 90% 所需的時間(以天為單位)。」4 |
| 難度(Difficulty, D) | 「特定資訊的內在複雜程度。它表示複習後提升記憶穩定性的難易程度。」4 通俗地說,越難的卡片穩定性增長越慢。 |
由於該模型擬合了卡片的整個複習歷史,下一次間隔綜合反映了卡片的全部過去,而不僅僅取決於你上一次按下的按鈕。這是它與 SM-2 僅根據上一次評分進行更新的結構性區別。34
「難度」也是解決「簡易度地獄」的機制良藥。與 SM-2 中只減不增的簡易度不同,FSRS 的難度具有合理的邊界,並且會向均值回歸。因此,卡片絕不會被永久鎖定在高難度和短間隔中。4
目標記憶保留率:SM-2 從未擁有過的調節旋鈕
FSRS 提供了「目標記憶保留率」(Desired Retention)設定:即卡片到期複習時,排程器力求達到的目標回憶機率。8 SM-2 沒有任何對應機制。它的間隔由固定的 EF 公式決定,從未給學習者提供調節目標回憶率的旋鈕。28
預設值為 90%。官方手冊指出,這會排程卡片「使得當卡片再次到期複習時,你有 90% 的幾率能記住它們」,並說明該預設值「在保留率和工作量之間提供了良好的平衡」。8
將該數值調得更高會使複習量快速增加。官方手冊建議將目標保留率保持在 97% 以下,並警告稱:「超過 90% 後工作量會迅速增加,超過 97% 後工作量可能會讓人不堪重負」。8
最佳化器會根據你自己的複習記錄訓練 FSRS 參數,而不是使用其他人的平均數據。手冊指出「最佳化器需要若干複習記錄來微調參數」,並將「複習數量過少(少於幾百次)」標註為健康檢查的局限之一,不過並未給出硬性門檻數值。8
「減少 20%–30% 複習量」究竟意味著什麼
這一廣為流傳的核心數據來自專案本身,且原始來源對其有著嚴謹的界定。《FSRS 入門ABC》(ABC of FSRS)指出:「使用 FSRS,使用者在達到相同記憶保留率的前提下,所需完成的複習量比 SM-2 演算法少 20% 到 30%。」4
括號內的前提至關重要。該數據是 open-spaced-repetition 專案報告的模擬結果,而非經過獨立第三方嚴格測定的絕對保證。最好將其理解為一種統計趨勢,而非不可動搖的承諾。4
Anki 官方 FAQ 對這一下降趨勢的表述更為審慎:「借助 FSRS,使用者在達到相同保留率的前提下,所要完成的複習量少於 Anki 預設演算法。」1 在 Issue #3616 的討論中,維護者引用了 open-spaced-repetition 的基準測試。該基準報告指出,在預設參數下 FSRS 「在 91.9% 的案例中優於 SM-2」,而在最佳化後表現還會進一步提升。這是基準測試本身的聲明,而非獨立外部驗證。59
「更少的複習量」指的是在相同保留率下的總體複習總量,而不是處處都有統一更長的間隔時間。官方 FAQ 指出:「FSRS 往往會給出比 SM-2 更長的首次複習間隔,但對於成熟卡片而言情況正好相反——FSRS 會更加保守。」3
對於日語牌組而言,在專案模擬測試中,實際收益表現為:在相同的目標保留率下,同一批卡片在 FSRS 排程下生成的每日複習總量應當少於 SM-2。請將其視為能減輕日常負荷的良性趨勢,而非固定不變的紅利。14
你是否應該切換,以及何時切換
預設建議
對於當前版本 Anki 的絕大多數學習者而言,建議啟用 FSRS。基準測試結果與演算法架構均表明,在相同保留率下它優於 SM-2。目標保留率調節旋鈕還賦予了你 SM-2 無法提供的直接掌控權。145
繼續留在 SM-2 尚屬合理的場景非常窄:若牌組規模極小或剛剛建立,複習記錄累積太少,根據「複習數量過少」的限制,FSRS 最佳化器難以有效微調;又或者你的工作流程被迫與早於 FSRS 支援的老舊客戶端同步,無法依賴新排程器的存在。18
對於希望享受 FSRS 的高效、卻不想親手製作和維護 Anki 牌組的學習者,Amenokori 開箱即完全基於 FSRS 演算法構建。其內建排程器已經採用了本文所推薦的現代演算法,無需你自己進行任何 SM-2 到 FSRS 的遷移或參數最佳化配置。10
切換會改變什麼,又不會改變什麼
啟用 FSRS 不會刪除卡片的歷史數據,也不會重置學習進度;它只是根據卡片現有的歷史記錄重新排定現有卡片的複習日程。83
在數據層面有一個細節值得了解:當 FSRS 對現有卡片重新排期時,手冊指出該操作「會為每張卡片追加一條複習記錄」。這會導致集合檔案體積略有增大,不過你的學習進度和歷史依然完好無損。8
根據最佳化器「需要若干複習記錄」的限制,首次運行最佳化需要累積一定的複習歷史才能發揮真正價值。8 切換排程器、運行最佳化器以及設定目標保留率的精確點擊路徑,屬於專門的 Anki 工具指南內容,在此概念總覽中不再展開。
補充要點
SM-2 中的「2」代表第二代 SuperMemo 演算法
經典的 SM-2 規範由 Piotr Wozniak 於 1990 年作為 Algorithm SM-2 發布。它是 SuperMemo-2 方法,也是各大單字卡應用程式至今仍將其作為預設設定的簡易度排程器始祖。2
「FSRS」全稱為自由間隔重複排程器 (Free Spaced Repetition Scheduler)
這個名稱是名副其實的。其最佳化器、基準測試與參考實現均在 open-spaced-repetition 組織下的 fsrs4anki、srs-benchmark 和 awesome-fsrs 程式碼倉庫中完全開源。456
為求「穩妥」將目標保留率設為 95% 以上會導致每日複習量激增
為了追求所謂的安全感而將目標保留率設得遠高於預設值是錯誤的舉動。這會成倍激增你的複習負荷,卻無法帶來相稱的收益。除非你有特定理由調整,否則請保持預設的 90%。官方手冊警告稱:「超過 90% 後工作量會迅速增加,超過 97% 後工作量可能會讓人不堪重負」,並建議將設定保持在 97% 以下。8
切勿指望 FSRS 立竿見影
FSRS 不會在第一天就展現出宣傳中的高效率。最佳化器需要根據你個人的歷史記錄擬合參數,且「需要若干複習記錄來微調」。如果複習數量過少(少於幾百次),它還無法發揮全力進行排期。8
切勿預設每個行動端或同步客戶端都支援 FSRS
FSRS 於 2023 年在 Anki 23.10 版本中正式整合,且排程器屬於集合層面的設定。極老版本的 AnkiDroid 或 AnkiMobile 建置早於此支援,因此未經更新的客戶端可能會表現得像是在運行傳統的 SM-2。187
相關閱讀
- 間隔重複與遺忘曲線:按計畫複習為何行之有效
- 當 SRS 適得其反:Anki 倦怠、難詞陷阱與退場訊號
- 為什麼 Anki 讓人苦不堪言(以及如何挽救):診斷與分流指南
- 超越 Anki:各類 SRS 工具與學習方法對比
- Yomitan + Anki:一鍵製卡工作流