在 100 行中实现 FSRS

主要观点:作者实现了 Anki 使用的 SM-2 算法,并对即将取代 SM-2 成为 Anki 默认调度器的 FSRS 算法进行了研究。FSRS 基于 3 组件模型(DSR 模型),通过训练 Anki 复习数据集的模型演化而来,旨在提高效率,相比 SM-2 减少 30%的复习时间。
关键信息:

  • DSR 模型:由 retrievability(R)、stability(S)、difficulty(D)三个变量组成,R 是回忆记忆的概率,S 是 R 从 1 到 0.9 的时间,D 是回忆记忆的难度,R 在 t=0 时为 1。
  • 主要循环:对当天到期的每张卡片,展示问题、用户回忆答案并评分,算法更新卡片的稳定性和难度值,计算下一次复习间隔并安排复习。用户自我评分(grade)有 4 种:forgot、hard、good、easy。
  • Retrievability 计算:通过公式(R(t) = (1 + F\frac{t}{S})^C)计算,其中(F = \frac{19}{81}),(C = -0.5)。
  • Review Intervals 计算:通过公式(I(R_d) = \frac{S(R_d^{(1/C)} - 1)}{F})计算,间隔随稳定性线性增长,不同的(R_d)值增长情况不同。
  • Parameters:有 19 个学习参数,大部分用于特定角色,以数组形式保存。
  • Stability 更新:首次复习时,初始稳定性为(S_0(G) = w_{G - 1});成功复习时,根据不同情况通过一系列公式更新;失败复习时,公式不同且要确保稳定性不增加。
  • Difficulty 更新:首次复习时,初始难度为(D_0(G) = w_4 - e^{w_5(G - 1)} + 1);后续复习时,通过特定公式更新。
  • The Simulator:通过模拟用户评级序列,计算卡片状态的变化,包括时间、稳定性、难度和下一次间隔。
    重要细节:
  • 代码实现了 FSRS 算法的各个部分,包括各种函数的定义和计算。
  • 提供了相关的参考资料,如Description of the algorithmFSRS visualizer
阅读 13
0 条评论