少点错误 07月14日 18:27
The History of FSRS for Anki
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

文章讲述了FSRS (FSRS, a Stochastic Shortest Path Algorithm for Optimizing Spaced Repetition Scheduling) 算法的创建者,如何从一个Reddit评论的激励出发,逐步完善FSRS算法,并最终促成其被Anki官方集成的历程。作者详细介绍了算法的开发、优化、测试,以及与Anki社区的互动,展现了开源项目从诞生到成熟的完整过程,以及算法在不断改进中的细节,最终FSRS算法被Anki官方集成,为用户提供更优化的记忆体验。

💡 **算法的诞生与初步实现**: 作者受到Reddit评论的启发,决心在Anki中实现FSRS算法,并迅速完成了算法的简化版本。最初,由于Anki的自定义调度功能限制,作者通过JavaScript实现了FSRS。

🚀 **算法的迭代优化**: 作者不断改进FSRS算法,增加了参数,并引入了论文中的公式。为了更准确地计算记忆状态,作者开发了FSRS Helper插件,从而能够解析完整的复习日志,并使用最新的参数重新计算记忆状态。

🤝 **社区驱动的改进**: 作者积极收集用户反馈,添加了“建议保留”等新功能。社区的积极参与也推动了算法的不断完善,例如,引入校准图、分散同级卡片等。最终,FSRS算法被Anki官方采纳,并集成到Anki中。

📈 **数据集与基准测试**: 作者构建了包含大量复习数据的基准测试,用于评估FSRS及未来模型。为了吸引更多研究者,作者还发布了用于FSRS开发的20,000个Anki集合的数据集,促进了算法的进一步研究和改进。

📱 **跨平台支持**: 随着AnkiDroid 2.17.0的发布,FSRS算法实现了在所有主要平台上的原生支持,包括桌面端、iOS和安卓。

Published on July 14, 2025 8:11 AM GMT

Background

I’m the creator of FSRS, an open-source spaced repetition algorithm which has been used in Anki, and my success using Anki in high school sparked my deep interest in spaced repetition algorithms.

2022

2022-08-19

Everything began with a post I made on Reddit. After my paper was accepted by ACM SIGKDD, I posted about it on the r/Anki:

A Stochastic Shortest Path Algorithm for Optimizing Spaced Repetition Scheduling | Proceedings of the 28th ACM SIGKDD Conference on Knowledge Discovery and Data Mining : r/Anki

But then, one commenter dismissed it as one of those 'Things that sound cool on paper and then nobody actually implements them'. That comment really rubbed me the wrong way. So, determined to prove them wrong, I decided to implement the FSRS algorithm within Anki.

2022-08-30

I quickly encountered my first obstacle: custom scheduling didn't support storing memory states directly in the cards, which is essential for implementing FSRS. I reported this issue on the Anki forum, and Anki's lead developer, Dae, implemented the necessary functionality in Anki 2.1.55.

Discussion: Some problems in implementing a state-of-the-art SRS scheduler on Anki - Anki / Scheduling - Anki Forums

2022-09-08

I quickly finished implementing a simplified version of the algorithm from my paper and released the scheduler’s code as open-source on GitHub. Following this, the Redditor who had initially dismissed it actually took back his words. Funnily enough, he went on to become one of the most active contributors within the FSRS community.

Implement a new spaced repetition algorithm based on anki custom scheduling. : r/Anki

2022-09-18 (FSRS v1)

I added an optimizer via Google Colab, creating the first usable FSRS version.

New progress in implementing the custom algorithm. : r/Anki

2022-09-21

I built a Python-based FSRS simulator in Colab to test scheduling. This allowed me to see how the optimized FSRS would actually schedule reviews.

2022-09-28 (FSRS v2)

I refined the model, adding more parameters and using my paper’s post-lapse stability formula. Conveniently, this update aligned with the release of the Anki 2.1.55 Beta. This beta enabled storing custom data on cards through the custom scheduling script feature.

Anki 2.1.55 Beta is now available. : r/Anki

2022-10-05 (FSRS v3 & Helper add-on)

I created an add-on to read full review logs and accurately recalculate memory states.

2022-10-18

I started collecting review data for SRS research from volunteers.

Data collection form: Collect review data for SRS research.

2022-11-16

After FSRS v3 launched, increased feedback led me to focus on implementing feature requests and fixing bugs. During this phase, I added the 'suggested retention' feature, designed to minimize review workload. It employs a simplified version of the SSP-MMC optimization method from my paper.

New features of FSRS4Anki from v3.0.0 to v3.6.0 : r/Anki

Introduce recent changes of FSRS4Anki, and want to collect some feedback : r/Anki

2023

2023-01-28

My experience with SuperMemo highlighted the value of its Advance and Postpone features. FSRS provided the capability to intelligently prioritize which specific cards would benefit most from being reviewed early or delayed. Consequently, I incorporated these two features into the FSRS Helper add-on.

Let your review be freer: postpone & advance cards via FSRS4Anki Helper : r/Anki

2023-02-11

Some users complained about significant fluctuations in their daily review workload, while others wanted to reduce their reviews on weekends. Although add-ons addressing these issues already existed, they often took a long time to take effect. FSRS, however, has the capability to modify card due dates and intervals in bulk during rescheduling. Acting on requests from several users, I integrated both 'load balance' and 'free days' features into the FSRS Helper add-on. The former helps to smooth out the daily review load, while the latter allows users to have fewer reviews scheduled on specific days of the week.

Load Balance & Free Weekend have been implemented in the FSRS4Anki helper add-on! : r/Anki

2023-03-16

As positive feedback within the community grew, more and more Anki users started using FSRS. Consequently, Anki's developer, Dae, began considering integrating FSRS directly into Anki. For me, this was undoubtedly the most exciting news, as it meant the most popular open-source spaced repetition software would potentially use the algorithm I had researched and developed. This also motivated me to plan further improvements for FSRS.

Integrate FSRS into Anki as an optional feature · Issue #2443 · ankitects/anki

2023-04-12

To identify FSRS’s weaknesses intuitively, I introduced the calibration graph into the optimizer.

Feat/Calibration graph by L-M-Sherlock · Pull Request #212 · open-spaced-repetition/fsrs4anki

2023-04-16

Introducing the calibration graph acted as a catalyst for community-driven improvements to the FSRS algorithm. From that point forward, several active contributors, along with myself, have put forward and tested dozens of improvement ideas.

Meanwhile, some users complained that FSRS was showing siblings closer to each other. I implemented the Disperse Siblings feature in the FSRS Helper add-on.

Calibration between actual retention and predicted retention is not great · Issue #215 · open-spaced-repetition/fsrs4anki

Feat/disperse siblings by L-M-Sherlock · Pull Request #61 · open-spaced-repetition/fsrs4anki-helper

2023-04-30

Remember the commenter I mentioned at the start? They sparked these incredible discussion threads.

[Feature Request] Sharing ideas for further improvement of the algorithm · Issue #239 · open-spaced-repetition/fsrs4anki

[Feature Request] Improving the algorithm, continuation · Issue #282 · open-spaced-repetition/fsrs4anki

Hundreds of rounds of debate ensued among several dedicated users online, eventually resulting in some key ideas that significantly improved FSRS.

2023-06-09

I refactored the optimizer into a standalone Python package, added detailed evaluation, and introduced mini-batch support to speed up training by ~10×.

Main updates of FSRS4Anki from v3.7.0 to v3.23.0 : r/Anki

2023-07-13 (FSRS v4)

I released FSRS v4 with a power forgetting curve, improved formulas for calculating difficulty and memory stability, and with outlier filtering.

2023-07-14

The FSRS difficulty calculation formula is quite simple, so we all thought there was obvious room for improvement there. However, most attempts failed.

[Enhancement] Improving the function for calculating difficulty · Issue #352 · open-spaced-repetition/fsrs4anki

2023-07-29 (FSRS-Optimizer)

I split the optimizer into its own repo and started defining a standard review-log format for broader adoption.

2023-08-17 (FSRS-rs)

My friend (Asuka Minato) and I began developing a Rust version of the optimizer. He had a strong foundation in Rust but lacked machine learning knowledge, while I had the ML background but didn't know Rust. It seemed like a perfect match, so we decided to team up and develop a Rust version of the FSRS optimizer, specifically to prepare for the eventual integration of FSRS into Anki.

2023-08-23

I found that the calibration graph could be gamed. This meant that metrics based solely on the calibration graph could be misleading. Log loss became the preferred gold standard metric.

Calibration graph can be cheated by the algorithm which always predicts the average. · Issue #1 · open-spaced-repetition/spaced-repetition-algorithm-metric

2023-09-06 (SRS Benchmark)

I created a benchmark suite using 66 volunteer collections to evaluate FSRS and future models.

2023-09-08

After fixing some issues, FSRS-rs achieved full optimizer functionality and integration into Anki began.

2023-09-14

Again, hundreds of rounds of debate ensued.

[Feature Request] Ideas to further improve the accuracy of the algorithm · Issue #461 · open-spaced-repetition/fsrs4anki

I cannot summarize them here, but the key result was changing the forgetting curve’s shape to make it flatter.

2023-11-01

Anki 23.10 was released, marking the first official version with FSRS built-in. This means the number of users utilizing the FSRS algorithm is expected to grow rapidly. It also significantly increased FSRS's visibility among developers, leading to the gradual emergence of FSRS algorithm libraries implemented in additional programming languages, and adoption by a growing number of other spaced repetition software.

Release 23.10 · ankitects/anki

2023-11-22 (Dataset from Anki)

I'm very grateful to Dae. Under Anki's privacy policy allowing research use of review data, he provided raw data from 20,000 user collections containing a staggering 1.4 billion review logs – the largest dataset of its kind in the spaced repetition field.

2023-12-26 (FSRS 4.5)

Based on the earlier debates and analysis, the flatter forgetting curve idea was accepted, and I released FSRS-4.5 incorporating this change.

Feat/update to FSRS-4.5 by L-M-Sherlock · Pull Request #568 · open-spaced-repetition/fsrs4anki

2024

2024-01-06

My research on short-term review effects revealed a key finding: when users review a new card multiple times on the day it's first learned, the sequence of ratings significantly influences the card's initial stability. This insight subsequently led to the approach in FSRS-5 of using same-day reviews to update stability.

First day's series of ratings may have significant impact on initial stability · Issue #2 · open-spaced-repetition/short-term-memory-research

2024-01-29

I released FSRS-rs v0.1.0 to crates.io.

Release v0.1.0 · open-spaced-repetition/fsrs-rs

fsrs - crates.io: Rust Package Registry

2024-02-23

With the release of AnkiDroid 2.17.0, native FSRS support was complete across all major platforms: desktop, iOS, and Android.

AnkiDroid Changelog

2024-02-24 (FSRS-Anki-20k)

To attract more researchers, I released the dataset of 20,000 Anki collections used for FSRS development, naming it FSRS-Anki-20k.

open-spaced-repetition/FSRS-Anki-20k · Datasets at Hugging Face

2024-03-01

To make metrics intuitive and harder to cheat, I redesigned RMSE(bins).

2024-04-06

After researching short-term memory models for several months, I gave up. The key lesson learned from trying to predict short-term memory with FSRS was that the working mechanisms of short-term and long-term memory are quite different. Ultimately, I adopted a simplified approach: using short-term reviews to refine predictions related to long-term memory.

2024-05-17

I modeled initial difficulty as an exponential function of initial rating, slightly improving the accuracy of FSRS.

2024-06-13

I updated the simulator to approximate short-term reviews by averaging counts and ratings per day.

2024-07-10 (FSRS 5)

I released FSRS 5, adding short-term review effects and improved initial difficulty, cutting prediction error by ~4%.

2024-09-07 (FSRS Megathread)

As discussions about FSRS grew more frequent, the FSRS Megathread was created on the Anki Discord server to provide a centralized place for these conversations. This has attracted more contributors and generated more ideas for improving FSRS.

https://discord.com/channels/368267295601983490/1282005522513530952

2024-10-11

A contributor refactored the Rust simulator, boosting speed by ~8 times.

2024-10-17

I implemented damping on difficulty updates, making difficulty approach its maximum value more slowly. It unexpectedly reduced error by ~1%.

2024-11-05 (anki-revlogs-10k)

With Dae's help, we released a new Anki dataset. It contains 10,000 collections with note, deck, and preset IDs for more detailed analysis.

2024-11-10 (Steps Stats)

Due to the slow progress in developing a short-term memory model, I considered adding statistical analysis of short-term reviews to the FSRS Helper add-on. The goal is to help users quantify their own short-term memory and provide them with data they can use to adjust their learning steps.

Feat/step stats by L-M-Sherlock · Pull Request #487 · open-spaced-repetition/fsrs4anki-helper

New Feature: Quantify Your Short-Term Memory in Detail. : r/Anki

Recommended (re)learning steps powered by FSRS Helper : r/Anki

2024-12-30 (FSRS-5 recency)

I added recency weighting to the optimizer, penalizing FSRS more for bad predictions on newer, more recent reviews and penalizing it less for bad predictions on older reviews. This reduced prediction error by ~4.5%.

2025

FSRS-6 is coming. To be continued.



Discuss

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

FSRS Anki 开源 记忆算法
相关文章