-
-
Notifications
You must be signed in to change notification settings - Fork 139
ABC of FSRS
FSRS is a scheduling algorithm based on machine learning and universal long-term memory formulas. It is more flexible and accurate than Anki's default algorithm.
In spaced repetition, the purpose of a scheduling algorithm is to determine optimal intervals between reviews. But what makes an interval "optimal"? In FSRS, an interval is considered optimal if it corresponds to a specific probability of recalling a card. For example, if you want to be 90% sure that you will successfully recall this card next time you see it, an interval that ensures that the probability of recall is 90% is optimal.
FSRS uses what's known as the "Three Components Model of Memory":
R is Retrievability, the probability that the user will recall a particular card on a particular day, given that card's repetition history. It depends on how many days have passed since the last review and on memory Stability, S.
S is memory Stability, it is defined as the amount of time, in days, during which R decreases from 100% to 90%. For example, S=365 means that an entire year will pass before the probability of recalling a particular card drops to 90%. Estimating S from the user's review history is a very difficult task, but FSRS can do it quite accurately.
D is Difficulty. Unlike the two previous components, it doesn't have a rigorous definition. Loosely speaking, difficulty is a number that determines how much S increases after a review. The higher the difficulty, the smaller the increase in S, and the slower the card's intervals grow.
In FSRS, the combination of these three values is called "memory state". Every time the user reviews a card, the memory state associated with that card changes, unless it was a same-day review. FSRS only takes into account one review per day, the chronologically first one. Each card has its own respective DSR values, in other words, each card has its own memory state.
In order to be able to estimate DSR values accurately, FSRS analyzes the user's review history and determines the optimal parameters that provide the best fit. If you are interested in the details, please read the following wiki entries: The Algorithm and The mechanism of optimization. If a user doesn't have enough reviews yet, default parameters are used instead. They have been found by running the FSRS optimizer on millions of reviews from dozens of users, and for those who don't have enough reviews yet, it is advised to use FSRS with the default parameters instead of Anki's default algorithm. The most recent version of FSRS has 17 parameters that are used in formulas for D and S (the formula for retrievability doesn't require any parameters).
Users don't have to tweak parameters manually, what they need to do instead is choose the value of their desired retention. Values between 70% and 97% are considered reasonable. In other words, with FSRS, users can target a specific value of retention, allowing them to balance how much they remember and how many reviews they have to do. Higher retention leads to more reviews per day.
Aside from allowing the users to choose their desired retention, FSRS has some other advantages when compared to Anki's default algorithm. With FSRS, users have to do 20–30% fewer reviews than with Anki's default algorithm to maintain the same level of retention. FSRS is also much better at scheduling cards that that they have been reviewed with a delay, for example, if the user took a break from Anki. The helper add-on also provides useful features that are not available otherwise.
If your Anki version is 23.10 or newer, read this guide. If your Anki version is older than 23.10, then you can use the standalone version of FSRS, please read this guide to learn how to install it.
Additionally, if you want to see how FSRS performs in comparison to other algorithms, read these pages: Benchmark and FSRS vs SM-17, one of the most recent SuperMemo algorithms.
If you have any further questions, check FAQ.
If you are curious about the history of spaced repetition itself, here is a great article.
My representative paper at ACMKDD: A Stochastic Shortest Path Algorithm for Optimizing Spaced Repetition Scheduling
My fantastic research experience on spaced repetition algorithm: How did I publish a paper in ACMKDD as an undergraduate?
The largest open-source dataset on spaced repetition with time-series features: open-spaced-repetition/FSRS-Anki-20k