总目录:0 目录《间隔重复的历史》
上一章:06 1989: SuperMemo 适应用户记忆(上)
中篇主要介绍了 SuperMemo 5 的算法大纲、Anki 对 SM-5 算法的批评、博士对 Anki 批评的回应。
SuperMemo 5
最优间隔矩阵的概念诞生于 1989 年 2 月 11 日。SuperMemo将为不同水平的记忆稳定性和难度保存一组最优间隔。它将根据新数据流修改间隔。1989 年 3 月 1 日,我开始使用 SuperMemo 4 来学习世界语。我很早就注意到这个想法需要全面修改。算法的收敛速度慢得要命。
1989 年 5 月 5 日,我有了一个新想法。从本质上讲,这就是稳定性增长函数的诞生,除了在 SuperMemo 的最优复习中没有可提取性维度。新算法将使用最优因子矩阵。它不会记住最优的时间间隔,而是记住需要根据记忆复杂度和当前记忆稳定性增加多少时间间隔。算法 SM-4 的缓慢收敛也激发了随机化间隔的需求(1989年5月20日)。
与此同时,SuperMemo 的进展又一次因为学校的义务而被推迟。在 Krzysztof Biedalak 的帮助下,我们决定编写一个程序,用于开发可以与 SuperMemo 一起使用的学校测试。这个项目再次被用来在开明的 Krzysztof 博士的课堂上摆脱其他义务,Krzysztof 现在已经成为 SuperMemo 的支持者。
我花了一个夏天在荷兰进行实践训练,由于各种义务(包括强制远足!)进展缓慢。速度慢的主要原因之一是极端节食,这是因为需要存钱来偿还我的 PC1512 债务。我还希望能多挣些钱给我的电脑买个硬盘。多亏了埃因霍温大学的 Peter Klijn 的帮助,我的所有工作才得以完成。他只是把他的电脑给了我,让我在整整两个月的时间里私人使用。他不想让我在 SuperMemo 上出色的工作慢下来。这是我第一次可以把所有的文件都保存在硬盘上,感觉就像是从一辆旧自行车搬到了特斯拉 S 型车。
直到 1989 年 10 月 16 日,新的算法 SM-5 才完成,我开始使用 SuperMemo 5。我在笔记中写道:“一场伟大的革命即将到来”。确实取得了巨大的进展。
我有几个 SuperMemo 2 的用户准备升级到 SuperMemo 5。我只要求一个条件:他们将从初始化为特定值的最优因子矩阵开始。这是为了验证算法,并确保它没有先入为主的偏见。所有预先设定的优化矩阵将很好地快速收敛。这一事实随后被用来主张普遍收敛,该算法在关于间隔重复算法的第一本出版物中被这样描述。不要读那份出版物!它已经被同行评审阉割了。阅读下面的内容来理解 SM-5 算法。
算法 SM-5
SuperMemo 使用了一个简单的原则:“使用、验证和纠正”。在重复之后,在OF 矩阵的帮助下计算一个新的间隔。计算时间间隔的“相关项目”取决于重复(类别)和项目难度。在间隔时间过后, SuperMemo 要求下一次重复。使用成绩来告诉 SuperMemo 这个间隔“表现”得如何。如果成绩较低,我们有理由相信,间隔太长,OF 矩阵 对应的项太大。在这种情况下,我们稍微减少了对应的项。这里的相关项目是之前用于计算间隔(即在间隔开始之前)的项目。换句话说,项目(1)用于计算间隔(n 次重复之后),然后(2)用于纠正 OF 矩阵(n+1次重复之后)。
以下是我的硕士论文中给出的算法SM-5的概要:
档案警告:为什么使用文字档案?
本文是Piotr Wozniak(1990)的《优化学习》的一部分。
SuperMemo 5算法的最终公式如下(算法SM-5):
- 将知识分成尽可能小的项目
- 所有项目的 E-Factor 等于 2.5
- 将不同重复次数和 EF 类别的矩阵制表。使用以下公式:
- OF(1,EF):=4
- for n>1 OF(n,EF):=EF
- 其中:
- OF(n,EF) - 对应给定简易度和连续复习次数 n 的最优因子
- 使用 OF 矩阵确定重复间隔:
- I(n,EF)=OF(n,EF)*I(n-1,EF)
- I(1,EF)=OF(1,EF)
- 其中:
- I(n,EF) - 给定 EF 值的卡片的连续第 n 个间隔
- OF(n,EF) - OF 矩阵对应给定简易度和连续复习次数 n 的 OF 值
- 在每次重复之后,在 0-5 级量表中评估成绩 (cf.算法SM-2)
- 每次重复后,根据公式修改最近重复项的e因子:
- EF':=EF+(0.1-(5-q)*(0.08+(5-q)*0.02))
- 其中:
- EF' - 简易度的新值
- EF - 简易度的旧值
- q - quality of the response in the 0-5 grade scale
- 如果 EF 小于 1.3,则将 EF 设置为 1.3
- 每次重复后修改矩阵的相关项目。任意构造并在修改中使用的示例性公式可以是这样的:
- OF':=OF(0.72+q0.07)
- OF:=(1-fraction)*OF+fraction*OF'
- 其中:
- OF *- OF 的新值
- OF' - 计算 OF 新值的辅助值
- OF - OF 的旧值
- fraction - 0~1之间的一个值,越大 OF 改变越大
- q - 回忆质量打分 0 - 5
- 请注意,对于 q=4 ,OF 不变。q>4 时增大,q<4 时减小。
- 如果 q 小于 3,则不改变 EF 的值,项目从头开始复习。
- 在某一天的每一次重复之后,重复所有在回忆质量打分中得分低于 4 分的项目。继续重复,直到所有这些项目得分至少 4 分
根据之前的观察,OF 矩阵的项不允许低于 1.2。在算法 SM-5 中,根据定义,间隔不能在连续的重复中变得更短。时间间隔至少是其前身的 1.2 倍。更改 E-Factor 类别仅增加下一个应用的间隔,增加的倍数与 OF 矩阵相应项所需的倍数相同。
对 SM-5 算法的批评
Anki 手册中包含了一段对 SM-5 算法出乎意料的批评(2018 年 4 月)。这些话特别令人惊讶,因为算法 SM-5 从来没有完整地发表过(上面的版本只是一个粗略的大纲)。尽管批评的话语显然是善意的,但它们暗示了一种可能性,即如果算法 SM-2是优于算法 SM-5,或许它也优于算法 SM-17。如果是这样的话,我就浪费了过去 30 年的研究和编程。时至今日,维基百科还在“批评” “SM3+”。“SM3+” 是最初在Anki手册中使用的一个标签,已经在网络上的几十个站点使用(特别是那些因其简单性而倾向于坚持使用较旧算法的人)。这里比较了算法 SM-2 和算法 SM-17 。希望这不会有任何疑问。
Anki 手册中的错误声明
我的硕士论文于 1998 年在 supermemo.com 上摘录发表,其中只包括对算法 SM-5 的粗略描述。为了清楚起见,数十个次要程序没有公布。这些程序需要进行大量修改,以确保良好的收敛性、稳定性和准确性。这种修修补补需要几个月的学习和分析相结合。算法 SM-5 从来没有现成的开箱即用版本。
算法 SM-5 的源代码从未发表或公开过,最初的算法只能在 MS DOS 下由 Supermemo 5 的用户进行测试。SuperMemo 5 在 1993 年成为免费软件。需要注意的是,围绕最优值的随机分散间隔是建立收敛性的关键。如果没有分散,算法的进展将会慢得令人痛苦。同样,矩阵平滑对于一致的行为是必要的,独立于为不同级别的稳定性和项目复杂性收集的数据的稀缺性。
在 1989 年和之后进行的多次评估表明,在任何研究的度量中,算法 SM-5 和之后的算法毫无疑问地优于算法 SM-2。算法 SM-17 实际上可以用来衡量算法 SM-5 的效率,如果我们有志愿者用我们的通用度量重新实现古老的代码。到目前为止,我们已经对 SM-2 算法进行了比较。实现的成本微不足道。不用说,SM-2 算法在预测能力方面远远落后,特别是在可提取性的次优水平(在用户没有严格遵守规定时间表的情况下)。
即使对底层模型有基本的了解,也应该清楚一个好的实现将产生巨大的好处。SuperMemo 5 将根据用户的记忆来调整它的间隔函数。SuperMemo 2 是固定不变的。我非常自豪的是,1985年和1987年的大胆猜测经受住了时间的考验,但任何算法都不应该相信一个拥有 2 年间隔重复算法实现经验的卑微学生的判断。相反,Supermemo 4 和所有后续实现进行的猜测越来越少,并且提供了更好、更快的适应性。在所有这些实现中,只有 Supermemo 4 适应速度慢,并在 7 个月内被更好的解决方案取代。
Anki 的批评没有恶意,但如果作者推动实施并迅速转向自学,而不是花时间修补那些似乎不像他预期的那样有效的程序,我不会感到惊讶。相比之下,在1989年,我知道算法SM-2是有缺陷的,我知道算法SM-5是更好的,我将不遗余力地确保新概念被完善到其最大的理论潜力。
Anki 手册摘录(2018年4月):
Anki最初是基于 SuperMemo 的 SM5 算法。然而,Anki 在回答卡片之前显示下一个间隔的默认行为揭示了 SM5 算法的一些基本问题。SM2 于后来修改的算法之间的关键区别是:
- SM2 根据您的一张卡片上的表现来安排该卡片下一次的时间
- SM3+ 根据您的一张卡片上的表现来安排该卡片,以及类似卡片下一次的时间
后一种方法不仅考虑了单个卡片的表现,还考虑了作为一个组的表现,从而保证了选择更准确的间隔时间。如果你在学习上非常一致,并且所有的牌都有一个非常相似的难度,这种方法可以很好地工作。然而,一旦在公式中引入了不一致性(不同难度的卡片,不是每天在同一时间学习),SM3+ 更容易在下一个间隔中出现不正确的猜测——导致牌被安排得太频繁或太遥远。
此外,当SM3+动态调整“最优因子”表时,经常会出现这样的情况:在一张卡片上回答“困难”比回答“容易”的间隔时间更长。下一次时间在 SuperMemo 中是隐藏的,所以用户永远不会知道这个。
在对备选方案进行评估之后,Anki 的作者认为,通过模仿 SM2 产生的接近最优间隔要比冒着错误猜测的风险获得最优间隔更好。SM2 方法对用户来说是可预测的和直观的,而 SM3+ 方法对用户隐藏了细节,并要求用户信任系统(即使系统可能在调度中出错)
在所有这些说法中,只有一个是正确的。SuperMemo 2 确实更直观。多年来,这个问题一直困扰着 SuperMemo。每个版本都更复杂,很难向用户隐藏其中的某些复杂性。我们将继续努力。
这就是为什么 Anki 批评是不合理的原因:
- 事实上,SuperMemo 5 利用所有项目的过去表现来最大化新项目的表现,这是一个优势,而不是一个“问题”。更重要的是,这是适应性的关键
- 不一致的评分一直是所有算法的一个问题。平均而言,适应性有助于发现错误评分的平均影响,特别是如果不一致本身是一致的(即用户在相似的情况下不断犯类似的错误)
- 混合的困难被 SuperMemo 5 处理得更好。在 SuperMemo 2 中难度和稳定性增长都是用 EF 编码的,而在 SuperMemo 5 及以后的版本中,这两种记忆特性是分开的
- 间隔预测在 SuperMemo 5 中被证明更优越,而“更容易出错”的说法只能用实现中的错误来解释
- 如果没有实现矩阵平滑,较低的评分可能带来更长的间隔。这部分算法在我的论文中只做了口头描述
- 即使在更简单的实现中(例如,对于手持设备、智能手机等),间隔和重复日期也总是显著地显示在 SuperMemo 中。没有向用户隐藏任何东西。最重要的是,遗忘指数和工作量的统计数据是完全可见的,并且有可能看到 SuperMemo 是否履行了它承诺的保留,以及在怎样的工作量代价下。
- 算法及其所有细节在 SuperMemo 5 中得到了充分的展示。特别是,在每次重复时将显示对矩阵的更改。对于任何对算法有基本了解的人来说,它的操作都是完全透明的。全面的跟踪也可以在 Anki 或其他应用程序中实现,但可能需要大量的修改。这将是昂贵的。最后,Anki 的选择可能确实很好,因为它很简单(从实现、操作、跟踪、调试、维护、用户直觉等方面来说)。
- “隐藏细节”的抱怨与神经网络在间隔重复方面更优越的主张是截然相反的。与神经网络实现不同,算法SM-5的操作比较容易分析
我们 2011 年在 supermemopedia.com 上发表的官方回应今天看来相当准确:
档案警告:为什么使用文字档案?
很棒的是,Anki 介绍了自己的创新,同时仍然给予 SuperMemo 应有的赞誉。的确,与莱特纳系统或纸面上的 Supermemo 相比,SuperMemo 的算法 SM-2 工作得很好。然而,SM-5 算法相对于 SM-2 算法的优越性是毋庸置疑的。无论是在实践中还是在理论上都是如此。算法 SM-2 的时间间隔是固定的,并且只依赖于项目的难度,该难度可以用一个启发式公式来近似(即一个基于 1987 年前有限经验得出的猜测的公式)。确实,您不能通过向算法 SM-2 提供错误数据来“破坏”它。之所以如此,只是因为它不具有适应性。您可能更喜欢使用可自定义字体的文字处理程序,尽管您可能会通过应用修饰把文本弄乱。
SM-2算法简单地用一个所谓的 E-Factor 来粗略地乘以间隔,这是一种表示项目难度的方法。相反,算法 SM-5 收集用户的表现数据,并相应地修改最优间隔的函数。换句话说,它适应学生的表现。算法 SM-6 甚至更进一步,修改了最优间隔的函数,以达到期望的知识保留水平。这些新算法的优越性已经通过多种方式得到了验证,例如,通过测量固定大小数据库中工作负载随时间的下降情况。在研究的案例中(小样本),与使用算法 SM-2 处理的旧数据库(相同类型的材料:英语词汇)相比,使用新算法处理的工作量下降速度几乎是后者的两倍。
所有的 SuperMemo 算法都将项目分成难度类别。算法 SM-2 给每个类别一个严格的间隔集。算法 SM-5 也给了每个类别一组间隔,但是这些间隔是根据用户的表现来调整的,也就是说不是固定不变的。
“糟糕的评分”在算法 SM-5 中确实比在算法 SM-2 中更严重,因为错误的数据会导致“错误的适应”。然而,在 SuperMemo 中给出不真实/作弊的分数总是不好的,无论你使用哪种算法。
在有关记忆的知识不完整的情况下,适应性总是优于僵化的模型。这就是为什么适应一个不精确的平均值(如算法SM-5)要比根据一个不精确的猜测(如算法 SM-2)来确定间隔要好。 毋庸置疑,最后一个词进入算法 SM-8 之后又变了,因为它适应了测得的平均值。
下篇会给出 SM-5 更优越的数据和理论证明,以及 SM-5 算法的其它改进细节。
下一章:06 1989: SuperMemo 适应用户记忆(下)