Piotr Wozniak博士,2018年6月
目录
- 引言
- 1985年:SuperMemo的诞生
- 1986年:SuperMemo的初步发展
- 1987年:DOS版SuperMemo 1.0
- 1988年:记忆的两个组成部分
- 1989年:SuperMemo适应用户的记忆
- 1990年:记忆的通用公式
- 1991年:运用遗忘曲线
- 1994年:遗忘的指数性质
- 1995年:超媒体版SuperMemo
- 1997年:运用神经网络
- 1999年:选定名称——”间隔重复”
- 2005年:稳定性增长函数
- 2014年:SM-17算法
- 间隔重复的指数级普及
- 记忆研究总结
- 失败与成功的剖析
引言
真实的历史
关于间隔重复的流行历史充满了各种神话和谬误。本文将为你讲述真实的故事。间隔重复面临的问题在于,它变得太受欢迎,以至于难以准确地自我复制。就像一种快速变异的病毒,它不断从一个应用跳到另一个应用,并在传播过程中不断讲述着自己的故事,同时也不断积累着错误。
谁发明了间隔重复?
这是我如何解决遗忘问题的故事。我弄清楚了如何高效学习。谦虚是浪费时间,因此我要补充一点:我认为自己确实知道如何大幅提升人类智力。简而言之:记忆是知识的基础,知识是智力的基础。如果我们能够控制自己在记忆中存储什么、遗忘什么,我们就能够掌控自己的问题解决能力。用非常相似的方式,我们也可以提升人工智能。在多年因商业考量而被迫保持沉默之后,能够写下这些自豪的话,实在是一种极大的解脱。
早在1990年代初,我以为自己知道该如何彻底颠覆世界各地的教育体系,让它们真正为所有学生服务。然而,任何重大的变革都需要一场文化范式的转变。仅凭一个来自贫穷共产主义国家的穷学生宣布变革的可能性是远远不够的。我在我的 硕士论文 中做过这样的尝试,但我的想法几乎无人问津,甚至连我自己的家人都不以为然。幸运的是,我在大学里遇到了几位聪明的朋友,他们表示要利用我的想法创办一家企业。就像微软改变了个人计算的世界一样,我们也要改变人们学习的方式。我们拥有一个强大的学习工具: SuperMemo。然而, SuperMemo 若要征服世界,就必须暂时抛开自己的根源。为了说服他人, SuperMemo 必须是纯粹科学的产物,不能只是一个由谦卑学生构想出来的点子。
为了让 SuperMemo 扎根于科学,我们下了很大功夫,把自己的想法发表在一份 同行评审期刊 上,采用了一个当时鲜为人知的科学术语——” 间隔重复 “,并把我们的学习技术放进学习理论和心理学研究史的框架之中。我对学校、证书和学位一向十分怀疑,但我仍然去读了一个 学习经济学 的博士学位,为自己的说法增添几分可信度。
如今,间隔重复终于出现在数百款受人尊敬的学习工具、应用和服务之中,我们终于可以理直气壮地宣示这份功劳,把旗子插上山顶。使用者的数量正朝着 数亿人 迈进。
如果你读了 这篇SuperMemopedia的文章,你可能会得出结论:“任何人都不应该声称自己发现了间隔重复”。对此我不敢苟同。在本文中,我要为这项发现拿下全部功劳,并为这一理念的传播争取一份扎实的功劳。至于传播方面的贡献,如今正在逐渐减弱,这要归功于这个理念本身的力量,以及越来越多参与其中的人(其范围早已远远超出 我们公司)。
延续下去的神话
对于有关间隔重复的假新闻, Krzysztof Biedalak (首席执行官)向来最没有耐心。因此,本文的写作以及这场破除神话的努力,都要归功于他坚持把历史讲清楚的决心。DOS版的SuperMemo诞生于30年前(1987年)。让我们向它致敬一番。
如果你相信 艾宾浩斯 在1885年发明了间隔重复,那我要说声抱歉。在整理 SuperMemo的历史 时,我们把这位德高望重的德国心理学家的名字放在了年表的最前面,于是这个神话就诞生了。事实上,艾宾浩斯从未研究过间隔重复。
撰写间隔重复的历史并不容易。每次动笔,我们都会因为曲解和误解而制造出更多的神话。那么就让我们把话说得清楚而坚定一些:在 SuperMemo 之前,确实已经有大量的记忆研究存在。不过,每当我大方地把功劳归给别人时,请记住 Biedalak 说过的这句话:
如果说 SuperMemo 是一架航天飞机,我们就得承认之前有人在自行车上做过一些工作。与此同时,我们的竞争对手正忙着试图复制我们的航天飞机,但这些努力让人想起 苏联的暴风雪号计划。暴风雪号至少完成过一次太空飞行——只不过那是一次无人飞行。
本文旨在把事实讲清楚,并坦率地披露间隔重复早期的发展步骤。这是一次有趣的回顾之旅,带着”任务完成”的那种特别的愉悦感。既然我们已经可以称自己的努力为一次全球性的成功,就没有必要再把它塑造得比实际情况更体面。没有必要让它显得更科学、更有历史感,或者更”经过认证”。
间隔重复已经到来,而且会一直存在下去。我们做到了!
致谢
为间隔重复这一理念做出贡献的人的名单实在太长,这篇短文根本容纳不下。有些名字没有出现,只是因为我时间有限,来不及详细描述他们的贡献。Phil Pavlik博士大概是这个领域中提出最多新颖想法的人。一大批记忆研究者一直在探究间隔对记忆的影响。Duolingo和Quizlet是这一领域的主要竞争者,对这一理念的推广起到了强大的作用。我还漏掉了许多曾经启发过我的思考的杰出老师。 SuperMemo World 里那一整群勤奋而才华出众的人也理应得到提及。 SuperMemo 的用户们不断贡献出令人惊叹的建议,推动着进一步的发展。至于对间隔重复解释得最有影响力的奖项,则应该颁给《连线》杂志的 Gary Wolf,但值得一提的人还有很多。或许有一天,我会有更多时间,详细写一写所有这些了不起的人。
1985年:SuperMemo的诞生
追求更好学习的动力
我在教育体系中度过了漫长的22年。关于学校教育的那些老生常谈,完全适用于我的情况: 我从不喜欢学校,但我一直喜欢学习。 我从不让学校妨碍我的学习。上大学时,我已经在公立学校体系中度过了12年,却依然热爱学习。学校教育没能摧毁这份热爱,主要有两个原因:(1)这个体系对我相当宽松;(2)我在家里完全可以自由学习自己喜欢的东西。在共产主义时期的波兰,我从未真正体会过繁重学校教育那种毒害人的鞭子。这个体系疏于管理,而我很享受随之而来的自由。
我们都知道,最好的学习源于热情,它由 学习驱力 驱动。我的学习驱力很强,但也夹杂着一点挫败感。我学得越多,就越能看清遗忘的力量。靠多学习并不能弥补遗忘。和其他学生相比,我的记忆力并不算差,但它显然是一个会漏水的容器。
1982年,我开始更加关注大多数学生早晚都会发现的一个现象: 测试效应。我开始把自己的知识整理成便于 主动回忆 的形式。我会把问题写在一页纸的左边,把答案写在右边单独的一栏里:

这样一来,我就可以用一张纸把答案遮住,运用 主动回忆 来让复习获得更好的记忆效果。这个过程很慢,但学习效率却大幅提升。我那时候的笔记本被我称为 “快速吸收材料”,指的正是我记录知识的这种方式。
在1982年到1983年间,我不断在生物化学和英语这两个领域扩充我的”快速吸收”知识。我会时不时地复习那些资料页面,以减少遗忘。我的记忆保持率有所提高,但撞上瓶颈只是时间问题。资料页越多,复习的频率就越低,记忆漏损的问题就越明显。下面是那个时期的一份复习记录示例:

在1982年6月到1984年12月之间,我的英语-波兰语单词配对笔记本里有79页,样子如下:

图: 这是 我 那本始于1982年6月的英语-波兰语单词笔记本中的一页典型样式。单词配对列在左侧,复习记录记在右侧,回忆错误则用中间的点来标记
这79页总共只包含2794个单词。这只是我所需要的一小部分,而复习起来已经相当令人头疼。有趣的是,我直到1984年才开始以主动的方式学习英语,也就是只用波兰语-英语单词配对,整整晚了两年。我很晚才发现:被动的词汇知识足以应付阅读,但不足以让人说出一门语言。经过六年的学校教育后仍有这种无知,其实是常态。学校做了大量的机械训练,但对什么才是有效的学习却几乎没有任何启发。
1984年末,我决定改进复习流程,并进行了一项改变我一生的实验。到头来,三十年后的今天,我无比自豪地发现,它竟然影响了数百万人。它打开了闸门。我们迎来了一个学习更快、更好的时代。
下面是我在1990年的 硕士论文 中,对这一最初阶段的描述:
档案提示: 为什么要使用原始档案?
本文节选自:” 学习的优化 “,作者: Piotr Wozniak (1990年)
1982年,我第一次对记忆机制做出了一些观察,这些观察后来被用于SuperMemo方法的构建。当时我还是一名分子生物学的学生,被通过数学、物理、化学、生物等考试所需的海量知识压得喘不过气。问题并不在于无法掌握这些知识——通常只需2到3天的高强度学习,就足以把考试所需的数据塞进脑子里。真正令人沮丧的是:考试过后几个月,新学到的知识中,能留在记忆里的只是微不足道的一小部分。
我的第一个观察——对任何用心的学生来说都是显而易见的——是学习的关键要素之一在于 主动回忆。这一观察意味着:如果不紧接着尝试从记忆中回忆所学的事实,单纯被动地阅读书籍是远远不够的。这种以回忆为基础的学习原则,后来被称为 主动回忆原则。如果学生提出的问题是具体的而非笼统的,回忆的过程就会快得多,效果也不会打折。这是因为,笼统问题的答案中包含了大量冗余信息,这些信息是用来描述答案各组成部分之间关系所必需的。
为了说明这个问题,让我们设想一个极端情况:一名学生想要掌握某本教科书中的知识,而在回忆过程中只使用一个问题:你从这本教科书里学到了什么?显然,描述这本书章节顺序的信息,对回答这个问题会有帮助,但对学生真正想知道的内容来说,这显然是多余的。这种以具体问题为基础进行回忆的原则,后来被称为 最小信息量原则 。这一原则之所以合理,不仅仅是因为它消除了冗余。
心里牢记主动回忆和最小信息量这两条原则,我创建了自己的第一批数据库(也就是问答的集合),用来尝试把学到的知识保留在记忆中。当时这些数据库都是以书面形式记录在纸上的。我的第一个数据库始于1982年6月6日,由若干页组成,每页大约包含40对单词。每一对中的第一个单词(视为问题)是一个英语单词,第二个(视为答案)则是其波兰语对应词。我把这些配对称为 条目。我会以不规律的间隔(主要取决于有没有时间)复习数据库中的某些页面,每次都记录复习的日期、没记住的条目以及它们的数量。事实证明,只要复习进行得足够频繁,这种保留所学知识的方式对一个中等规模的数据库来说是够用的。
间隔重复的生日:1985年7月31日
直觉
1984年,我关于记忆的推理基于两个简单的直觉——大概所有学生都有这样的直觉:
- 如果我们把某个东西复习两次,记得会更牢——这很明显,对吧?如果复习三次,大概会记得更牢
- 如果我们记住了一组笔记,它们会逐渐从记忆中消失,也就是说不会一下子全部忘掉。这一点在生活中很容易观察到——不同的记忆有不同的”寿命”
这两个直觉应该让每个人都不禁思考:我们会以多快的速度、忘掉多少笔记?下一次该在什么时候复习?
直到今天,我仍然惊讶于居然很少有人愿意去测量这个” 最佳间隔“。当我自己动手测量时,我原以为一定能在心理学书籍中找到更精确的结果。结果并没有。
实验
正是下面这个简单的实验,催生了间隔重复。这项实验于1985年进行,最早记录在我1990年的 硕士论文 中。它的目的是确定知识页面前5次复习的最佳间隔。每一页大约包含40对单词,所谓最佳间隔,就是要大致对应到该知识大约有5%到10%被遗忘的那个时间点。当然,这些间隔非常贴合那种特定类型的学习材料,也很贴合某个具体的人——在这里就是我自己。此外,为了加快进度,测量的样本量也很小。请注意,这并不是一个研究项目,也无意发表,目的只是加快我自己的学习速度。我当时确信一定有别人已经把这些间隔测量得更准确,但在谷歌诞生之前的13年,我觉得自己动手测量间隔,会比钻进图书馆去挖掘更好的数据来得更快。这项实验于1985年8月24日结束,我最初把这一天称为间隔重复的生日。然而,在2018年写这篇文章的时候,我找到了当年的原始学习资料,发现是我求知的急切心情让我在1985年7月31日就已经拟出了算法的雏形,并开始学习人体生物学。
因此,我可以说, SuperMemo 以及计算机化间隔重复最准确的生日,其实是1985年7月31日。
到7月31日,实验尚未结束,但结果已经显得相当可预测。在后来的岁月里,这项特定实验的发现显得颇具普适性,可以推广到更多知识领域,也适用于整个健康成年人群体。就连2018年的 SM-17算法 的默认设置,也没有偏离这些最初的发现太远。
间隔重复诞生于1985年7月31日
以下是我 硕士论文 中对这项实验的原始描述,只在语法和风格上做了些许修正。文中的强调部分是2018年添加的,用以突出重点。如果读起来觉得枯燥难懂,可以对比一下 1885年的艾宾浩斯——记忆研究领域的写作风格向来如此,只是目标不同:艾宾浩斯想要理解记忆,而100年后,我只是想学得更快:
档案提示: 为什么要使用原始档案?
本文节选自:” 学习的优化 “,作者: Piotr Wozniak (1990年)
旨在估算最佳复习间隔时长的实验 (1985年2月25日至1985年8月24日):
- 实验分为A、B、C……等若干阶段,每个阶段都用于计算第二、第三、第四以及后续的 准最佳复习间隔 (第一个间隔被设定为一天,因为根据先前收集的数据,这似乎是最合适的间隔)。确定准最佳间隔的标准是:间隔应尽可能长,同时所记住知识的损失不超过5%。
- 在A、B、C每个阶段中,被记忆的知识都由5页组成,每页大约包含40个条目,形式如下:问题:一个英语单词,答案:其波兰语对应词。
- 每个阶段所用的每一页,都是在一次学习中记住的,并在次日进行复习。为避免混淆,需要说明:为了简化后续的讨论,我用”第一次复习”这个术语来指代对一个条目或一组条目的记忆过程。毕竟,记忆和重新学习这两个过程的形式是一样的——不断回答问题,直到错误数降为零为止。
- 在A阶段(2月25日至3月16日),针对5页内容,第三次复习分别在2天、4天、6天、8天和10天的间隔后进行。观察到的知识损失分别为0%、0%、0%、1%和17%。最终选定了7天作为第二、第三次复习之间的准最佳间隔。
- 在B阶段(3月20日至4月13日),第三次复习统一采用7天的间隔,而第四次复习则分别在6天、8天、11天、13天和16天后进行。观察到的知识损失分别为3%、0%、0%、0%和1%。最终选定16天作为第三个准最佳间隔。需要说明:从科学角度看,用更长的第三间隔变体重复B阶段会更严谨,因为即便是所选的最长间隔,知识损失也很小;不过,我当时太急于看到后续步骤的结果,没有花时间去重复这个已经显得相当成功的B阶段(即已获得了良好的记忆保持率)。
- 在C阶段(4月20日至6月21日),第三次复习采用7天的间隔,第四次复习采用16天的间隔,第五次复习则分别在20天、24天、28天、33天和38天后进行。观察到的知识损失为0%、3%、5%、3%和0%。随后又用更长的第五次复习前间隔重复了C阶段(5月31日至8月24日)。所用间隔与相应的记忆损失如下:32天-8%,35天-8%,39天-17%,44天-20%,51天-5%,60天-20%。最终选定35天作为第四个准最佳间隔。
不难发现,上述实验的每一个阶段,所耗费的时间大约都是前一阶段的两倍。要确定前十个准最佳复习间隔,可能需要好几年的时间。事实上,在接下来的几年里,我确实继续进行了这类实验,以更深入地理解已记住知识的最佳间隔复习过程。不过,在当时,我决定把已有的发现直接运用到自己日常的学习流程中去。
1985年7月31日,我已经能感觉到实验的结果。我开始用纸质版的SuperMemo来学习人体生物学。这一天,其实才是最适合被称为 SuperMemo 生日的日子。
1985年7月31日发生的事
1985年7月31日, SuperMemo 诞生了。当时我已经掌握了间隔重复实验的大部分数据。作为一个急于实践的人,我没有等实验结束——我想尽快开始学习。由于已经积累了大量人体生物学方面的笔记,我开始把这些笔记转换成 特殊记忆测试 格式(SMT正是 SuperMemo 以及间隔重复最初的名称)。

图: 以特殊记忆测试格式记录的人体生物学内容,始于 1985年7月31日 (也就是 SuperMemo 的生日)
我的计算告诉我:按每天20分钟计算,我需要537天才能处理完所有笔记,到1987年1月才能完工。我还算出,测试的每一页大概会耗费我2小时的生命。尽管SuperMemo展现出诸多前景和速度优势,这个认知还是相当令人痛苦。大学里学习的速度,对于人类记忆的容量来说实在太快了。既然现在我能学得更快、更好,我也意识到,自己甚至连原本以为可能达到的目标都无法完成哪怕一小部分。学校那种课程量和进度,实在没什么道理。也是在同一天,我得知波兰共产主义政府取消了对微型计算机的进口关税。这意味着未来某个时候,在波兰买一台电脑将成为可能——这为2.5年后DOS版SuperMemo的出现打开了一条道路。
同样是在7月31日,我记下了这样的想法:如果假期能永远持续下去,我在学习上会取得更多成就,在人生中更是如此。学校真是 在浪费时间。不过,被征兵的威胁让我不敢轻举妄动。我最终还是走上了一条让我又在大学待了5年的道路。但那段时间大部分都投入到了SuperMemo上,因此我并不太后悔。
我的间隔重复实验于1985年8月24日结束。我还 开始学习英语词汇。到那一天,我已经把大部分生物化学材料写成了供SuperMemo复习用的页面。
说明:我的 硕士论文 中错误地把1985年10月1日说成是我开始学习人体生物学的日子(而不是上图中的7月31日)。1985年10月1日实际上是我计算机科学专业大学生活的第一天,本身并无特别之处。随着大学生活的开始,我用于学习的时间和精力都被大幅削减。颇为讽刺的是,开学似乎总是预示着 良好学习的终结。
第一个间隔重复算法:SM-0算法,1985年8月25日
得益于我的间隔重复 实验,我得以构建出第一个不需要计算机的间隔重复算法。所有的学习都必须在纸上完成——1985年时我还没有电脑,我的第一台微型计算机ZX Spectrum要到1986年才会到手。而SuperMemo则要等到第一台带磁盘驱动器的电脑出现(1987年的Amstrad PC 1512)才能问世。
我经常被问到这样一个简单的问题:“你怎么可能仅凭一个持续6个月的实验,就构建出SuperMemo?你怎么能预测20年后会发生什么?”
关于最佳间隔长度的最初实验得出了一些结论,使人无需真正测量超过几周的记忆保持率,就能预测后续复习间隔最可能的长度!简而言之,可以用如下推理来说明:如果最初几个月的研究得出的最佳间隔是1天、2天、4天、8天、16天和32天,那么你就有理由相信,后续的间隔会以2倍的比例递增。
档案提示: 为什么要使用原始档案?
本文节选自:” 学习的优化 “,作者: Piotr Wozniak (1990年)
无需计算机的间隔重复算法SM-0(1985年8月25日)
- 把知识拆分成尽可能小的问答条目
- 把这些条目归并成每组包含20到40个元素的小组,这些小组后来被称为”页”
- 按以下间隔(单位:天)对整页内容进行复习:I(1)=1天I(2)=7天I(3)=16天I(4)=35天当i>4时:I(i):=I(i-1)*2其中:
- I(i)是第i次复习之后所使用的间隔
- 把第35天间隔之后被遗忘的条目全部复制到新建的页面中(无需从原有页面中移除)。这些新页面将按照首次学习条目的页面同样的方式进行复习
请注意,第五次复习之后的复习间隔,被假定会在后续复习中翻倍递增。这一点依据的是直觉,而非实验。在使用SM-0算法的两年间,积累的数据足以证实这一假设具有合理的准确性。
直到今天,我仍听说有人在使用、甚至偏爱纸质版的SuperMemo。 这里 是1992年的一份相关描述。
需要指出的是,间隔应当逐次翻倍这个直觉,几乎和学习理论本身一样古老。1932年, C. A. Mace 在他的著作《 学习心理学》中就曾暗示过高效的学习方法。他提到了” 主动复述“和” 反复修订“,认为这些活动应该以逐渐增大的间隔分布开来,大致是” 一天、两天、四天、八天,依此类推的间隔“。这一提议后来被其他作者所采纳,其中包括Paul Pimsleur和Tony Buzan,二人都各自提出了自己的直觉:涉及极短的间隔(以分钟计),或者在几个月后进行一次”最终复习”。所有这些想法,都没能很好地渗透到学习精英之外的日常学习实践中。只有借助计算机应用,人们才能在无需研究方法论的情况下,开始有效的学习。
这种直觉性的2倍间隔递增因子,也出现在了另一项研究之中——该研究探讨记忆是否可能因应环境的统计特性而经历进化优化:” 记忆经过优化,以适应环境的概率特性 “
尽管这个方法十分简单,在我的 硕士论文 中,我毫不犹豫地把这个新方法称为”革命性的”:
档案提示: 为什么要使用原始档案?
本文节选自:” 学习的优化 “,作者: Piotr Wozniak (1990年)
尽管知识获取速度看起来可能并不惊人,但与我之前的方法相比,SM-0算法之所以称得上是革命性的,有两个原因:
- 随着时间的推移,知识保持率是上升而不是下降的(而以往断续式的学习恰恰相反)
- 从长期来看,知识获取速度几乎保持不变(而在断续式学习中,获取速度会随时间大幅下降)
[……]
这是我第一次能够把”高知识保持率”和”低频复习”调和到一起,而其结果就是:记住的知识总量稳步增加,却无需增加所投入的时间!
80%的记忆保持率很容易达到,甚至可以通过缩短复习间隔进一步提高。不过,这样一来就需要更频繁地复习,从而增加时间投入。所采用的这种复习间隔安排,在记忆保持率和工作量之间提供了一个令人满意的折中方案。
[……]SM-0算法的下一次重大改进,要等到1987年,也就是引入计算机来监督学习过程之后才会出现。在此期间,我在新的英语数据库和生物学数据库中分别累积了大约7190个和2817个条目。按每个数据库每天大约投入12分钟的工作时间估算,平均知识获取速度分别达到了每年每分钟260个和110个条目,而知识保持率即便在最差的情况下也达到了80%。
十年之后回看SuperMemo的诞生
SuperMemo 诞生十年之后,它在波兰已经相当有名。以下是 J. Kowalski在1994年的《Enter》杂志上 重述的同一个故事:
那是1982年,波兹南亚当·密茨凯维奇大学一位20岁的分子生物学学生Piotr Wozniak,为自己无法把新学到的知识留在脑子里而感到相当沮丧。这里指的是生物化学、生理学、化学以及英语的海量材料——一个想在分子生物学领域取得成功的人,都必须掌握这些知识。促使Wozniak更系统地着手解决遗忘问题的一个主要动因,是他自己做的一个简单计算:如果按照他的常规方法继续学习英语,他需要花上120年才能掌握所有重要的词汇。这不仅促使Wozniak去研究学习方法,也让他成为”全人类共用一种语言”这一理念的坚定倡导者(他考虑到人类在翻译和学习语言上耗费的时间和金钱)。最初,Wozniak不断积累着一堆堆记录事实和数据的笔记,希望能把它们记住。没过多久他就发现,遗忘需要频繁的复习,而要管理所有新收集和记住的知识,就需要一套系统化的方法。凭着一种明显的直觉,Wozniak尝试 测量在不同复习间隔之后知识的保持情况,并于1985年提出了 SuperMemo最初的雏形,当时还不需要用到计算机。到了1987年,已经是计算机科学系大二学生的Wozniak,对自己方法的效果感到相当惊讶,于是决定把它实现为一个 简单的计算机程序。这个程序的效果似乎远远超出了他的预期。这在Wozniak与他在波兹南理工大学和亚当·密茨凯维奇大学的同事之间,引发了一场令人兴奋的学术交流。他所在系里的十几名学生充当了”试验品”,记忆了成千上万个条目,源源不断地提供数据和关键反馈。医学院的Gorzelańczyk博士协助构建了 记忆形成的分子模型,并对突触中发生的现象进行了建模。生物高分子生物化学系的Makałowski博士则为记忆优化的进化层面分析做出了贡献(顺带一提,正是他建议为SuperMemo申请”欧洲软件”注册)。物理学硕士Janusz Murakowski——目前正在特拉华大学攻读博士学位——帮助Wozniak解决了与 断续学习模型 以及神经细胞动作电位传导过程中离子电流模拟相关的数学问题。十几位未来的学术教师——以Zbigniew Kierzkowski教授为首——帮助Wozniak调整了自己的学习计划,朝着一个目标努力:把SuperMemo的各个方面整合成一套连贯的理论,涵盖分子、进化、行为、心理,乃至社会层面。Wozniak声称自己至少发现了几项重要但从未公开发表的 记忆特性,并打算通过在美国取得神经科学博士学位来夯实自己的理论。经过与计算机科学硕士 Krzysztof Biedalak 长时间的讨论,两人最终选择了另一条道路:努力实现把SuperMemo带给全世界学生的这个愿景。
1986年:SuperMemo的初步发展
纸质版SuperMemo
1984年2月22日,我算出,按照我当时的学习速度和投入,掌握英语需要26年(而在 SuperMemo 中,标准的 高级英语 课程按每天40分钟计算,只需要4年)。随着纸质版SuperMemo的出现,这个数字得到了大幅改善。
1985年夏天,我用纸质版SuperMemo开始了满怀热情的学习。这是我有生以来第一次确信,所有投入学习的时间都不会白费——没有什么会从指缝间溜走。回想起当时的这份热情,我不禁疑惑,自己当年为什么没有把这个好消息分享给别人。
当时的SuperMemo,并不是许多用户用来炫耀的那种”秘密武器”。我只是觉得,科学一定早已解答了关于高效学习的所有问题,我印象里自己所做的,无非是靠一点点自己的调研,来弥补自己在获取西方文献方面的匮乏。我当时的天真程度,简直是天文数字级别的。我的英语水平根本不足以理解西方的新闻。在我心目中,美国是一片超人的土地:这些超人从事超级科学,登上月球,做出各种重大发现,很快就要治愈癌症、获得永生。但同时,那也是里根的国度——他手里的潘兴导弹或巡航导弹能把波兰从地球表面炸掉。这给我带来了不少噩梦,或许是1980年代初唯一的主要压力来源。我常常琢磨幼童和孩子脑子里那种令人惊讶的种种矛盾。而对我自己来说,二十出头时的这种天真告诉我,我一定是个发育很不均衡、大器晚成的人。对英语的无知,转化成了对整个世界的无知。我是一个年轻人,既有自己的强项,也有令人难以置信的无知领域。放在这样的背景下来看,间隔重复看起来就像是需求、无知、自信和热情共同孕育出的一个孩子。
大学
1985年10月,我开始了大学计算机科学专业的学习。开学第一周,我就对大学失去了热情。我们没有编程课,只有数学、物理、电子学等入门课程枯燥乏味的讲座。课程安排繁忙,我很可能轻易就成了SuperMemo的辍学者。幸运的是,我对生物化学的热爱,以及对英语学习的需求,让我没有停下脚步。我继续做复习,时不时添加新的内容页。最重要的是,我有了一个新的梦想:拥有自己的电脑,自己动手编程。我最想实现的第一件事之一就是SuperMemo。我要把我的内容页保存在电脑里,让它们自动安排复习。
1987年夏天(8月29日),我才偶然向高中好友 Andrzej “Mike” Kubiak 提起我的超级学习法。我们经常一起踢球、玩音乐。我终于在1987年11月14日向他展示了如何使用SuperMemo。我用了836天(2年3个月又2周)才招募到SuperMemo的第一位用户。后来,Mike成了我在程序性学习方面试验SuperMemo的实验对象。他一直按照类似SuperMemo的时间表练习电脑生成的节奏。对Mike来说,SuperMemo是一见钟情。他的词汇量飞速增长。他忠实地使用了很多年,直到他的英语水平已经超过了继续学习的需要。他是一位瑜伽修行者,印度之旅以及日常使用英语,让他终生巩固了必要的知识。
ZX Spectrum
1986年和1987年,我越来越频繁地思考把 SuperMemo 搬到电脑上的问题。奇怪的是,一开始我并没有太多考虑把内容页拆分成单独卡片的问题。这说明了当我们陷入每天重复同样事情的惯例时,思维会变得多么狭隘。要达到2018年的状态,SuperMemo经历了几十次突破,以及同样显而易见的微小步骤。事后看来,一切都如此简单、显而易见。然而,人类思维存在一些隐藏的局限,使 渐进式阅读 未能早十年出现。这些局限中,只有一小部分属于技术层面。
大学第一年,我几乎没有多余的时间和精力,其中大部分都用在了获取我的第一台电脑:ZX Spectrum(1986年1月)。1985年秋天,我从朋友那里借了一台用一天,彻底被震撼了。早在拿到这个玩具之前,我就已经开始“纸上编程”了。我的第一个程序是“规划一天”的雏形,也就是后来的 Plan。1986年1月4日,我第一次打开ZX Spectrum时,这个程序已经写好,随时可以输入电脑。从那天起,我大部分时间都在编程,不理会学校课业,甚至在上课时也在纸上写程序。

图: ZX Spectrum 8位个人家用电脑。
军队
1986年初,征兵的威胁笼罩着我。我以为再上5年大学就意味着再多5年的自由。然而,军队的想法不同。对他们来说,第二专业不算数,我不得不竭尽全力才躲开兵役。更让我愤怒的是,我绝不会考虑与我最好的新朋友——ZX Spectrum——分开12个月。我告诉那位穿军装的人,他们真的不会想让一个手持枪的愤怒男人加入他们的队伍。幸运的是,在共产主义官僚体制的混乱中,我成功逃过了这一网,得以继续学业。直到今天,我对自由问题格外敏感。征兵和奴役没什么区别。这不是为了对抗法西斯主义而征兵,而是为了机械操练、鹅步走、清早起床、匆忙的热饭和压力而征兵。如果这是为了共产集团的战备,那也不过是 好兵帅克式军队 的战备罢了。今天,数以百万计的孩子被送去上学,其中也带有类似的、近乎奴役的强制色彩。关于我对儿童人权受到强制践踏的看法,请阅读我的 “ 我绝不会把我的孩子送去上学” 一文。我确信,我的部分想法正是1986年那种被奴役感塑造出来的。
切尔诺贝利的放射性云飘过波兰波兹南的那一天,我正忙着在这座大城市里四处奔走,跑遍各个军事和民政办公室,努力躲避兵役。我成功了,1986年的夏天也是有史以来最灿烂的夏天之一。我把时间都花在编程、跑步、用SuperMemo(纸上版)学习、游泳、踢足球,以及更多的编程上。
1986年夏天
我对新软件的渴求似乎永无止境。我写过音乐创作程序、世界杯赛果预测程序、3D井字棋程序、编写学校测验的程序,还有更多。我从亚当·密茨凯维奇大学生物化学系接到了一些工作。我的英雄奥古斯丁尼亚克教授需要一个软件来模拟DNA的解链过程,并快速搜索tRNA基因(多年后这项工作促成了一篇论文)。他还委托我写一个回归分析程序,后来这启发了 SuperMemo 的进展(尤其是SM-6和SM-8算法)。
在编程的同时,我一直把SuperMemo放在心上,然而,我写的所有软件都有一个共同点:没有任何数据库。程序必须从磁带上读取,这是一个很大的麻烦(不过在1986年这并没有让我太在意)。把SuperMemo的知识保存在纸上反而更简单。我开始梦想拥有一台更强大的电脑。然而,在共产主义时期的波兰,这样的花费遥不可及。我曾算过,一台IBM PC的价格相当于我母亲一生的工资总和。直到1989年,我在荷兰甚至不敢去上一次公共厕所,因为与波兰的工资水平相比,那简直贵得离谱。
PC 1512
我全家人都倾力相助。我的堂兄加尔巴托夫斯基博士为德国马克汇款开设了一个特殊的外币账户。奇迹般地,我凑够了1000德国马克,从德国买到了一台Amstrad PC 1512。这台电脑并不是像媒体曾报道的那样走私来的。我真正的走私失败经历发生在两年前,那是关于ZX Spectrum的。当时,我在扎伊尔的朋友们打算在西柏林替我买一台。最后,我在波兰以不错的价格买了一台二手ZX Spectrum,卖家还以为自己卖的“只是一个键盘”。

图:Amstrad PC-1512 DD。 我的那台只有一个磁盘驱动器。操作系统MS-DOS要从一张磁盘加载,Turbo Pascal 3.0要从另一张磁盘加载,SuperMemo又要从另外一张磁盘加载。到1991年我拥有第一块硬盘时,我的英语库已经拆分成13张磁盘、每张3000条内容。其他知识领域的磁盘更多。1997年1月21日, SuperMemo World 追踪到了那台原始电脑,并从它的主人雅雷克·坎特茨基手中把它买回来。这台电脑整整十年都能正常运行。如今它被埋在公司积满灰尘的档案库某处。也许我们将来会公开它的照片。图中所示图片来自维基百科
我那台德国的Amstrad-Schneider PC 1512是通过波兰公司Olech订购的。Olech原本应在1987年6月交货,结果拖到了9月才交。这让我整整一个夏天都倍受煎熬。后来, Krzysztof Biedalak 向荷兰公司Colgar订购了一台电脑,结果既没拿到电脑也没要回钱。如果这种事发生在我身上,我可能就此失去对人性的信任。这足以扼杀SuperMemo,也可能扼杀我对电脑的热情。而Biedalak却泰然自若地埋头苦干,把钱赚了回来,还赚得更多。这正是我和Biedalak之间关键的性格差异之一。 抗压能力 应该是个人发展的重要组成部分之一。我通过自律训练(比如冬泳或跑马拉松)才在后来培养出了抗压能力。丢了钱之后,Biedalak并没有抱怨,很快就把钱赚回来了。不久,我就开始羡慕他那台闪亮的新电脑。他为实现目标而付出的努力和决心,一直是公司能够生存下来的关键。正是他自己私下赚来的钱,帮助 SuperMemo World 度过了最初的几个月。他没有从父母那里得到礼物,他总能靠自己把事情办成。
模拟学习过程
1986年2月22日,我用ZX Spectrum写了一个程序,用来模拟使用 SuperMemo 进行长期学习的过程。我担心随着学习材料的积累,学习进度会明显变慢。然而,我的初步结果却相当反直觉:进展几乎是线性的。除了最初那段时期,学习速度并没有明显下降。
1986年2月25日,我为这个模拟程序扩展了一些新功能,用来解答“ 关于记忆的紧迫问题”。这个程序要在Spectrum上运行5天,才能得到长达80年学习过程的完整结果。它证实了我最初的发现。
1986年3月23日,我成功用Pascal(一种编译型语言)重写了同一个模拟程序。这一次,我只用70分钟就能跑完80年的模拟,得到了同样的结果。今天,SuperMemo仍然可以运行类似的模拟,同样的过程只需要一两秒钟。

图: SuperMemo 可以利用复习过程中收集的真实数据,模拟长达15年的学习进程。
这次模拟的一些结果至今仍然有效。下面我列出了一部分原始发现。其中有些可能在1990年或1994年做过修订。
学习曲线几乎呈线性
用该模型得到的学习曲线,除了最初那段时期之外,几乎呈线性。

图: 一般学习材料的学习曲线, 遗忘指数 为10%,每日学习时间为1分钟。
新内容只占用5%的时间
在长期学习过程中,当 遗忘指数 为10%、每日学习时间固定时,用于记忆新内容的平均时间只占复习总时间的5%。这个数值几乎与学习材料的规模无关。
学习速度
根据模拟结果,每天学习一分钟时,连续各年记住的内容数量可以用下面的公式近似估算:
NewItems=aar*(3*e -0.3*year+1)
其中:
- NewItems——每天学习一分钟时,连续各年中记住的内容数量,
- year——年份的序数,
- aar——渐近记忆速率,即经过多年复习后达到的最低学习速率(通常约为200条/年/分钟)
在长期学习过程中,当 遗忘指数 为10%时,一般学习材料的平均学习速率可以近似为每年200-300条/分钟,也就是说,每天学习一分钟,一年可以记住200-300条内容。 SuperMemo 的用户通常报告的平均学习速率在每年50-2000条/分钟之间。
工作量
对于一般学习材料,当 遗忘指数 约为10%时,每条内容每日所需复习时间的函数,可以大致用以下公式近似:
time=1/500*year -1.5+1/30000
其中:
- time——某一年中,每条内容每日平均所需的复习时间(单位:分钟),
- year——该学习过程的年份。
由于单条内容复习所需的时间几乎与学习材料的总规模无关,上述公式可以用来估算任意规模学习材料的工作量。例如,一个3000条内容的学习集合,在第一年的总工作量为3000/500*1+3000/30000=6.1(分钟/天)。

最佳遗忘指数
图: 在遗忘指数为10%的情况下,一个包含3000条内容的通用学习材料每天所需的工作量(单位:分钟)。
整体知识获取速率最高的情况出现在遗忘指数约为20-30%时。这是因为随着遗忘指数升高,复习工作量的减少和重新学习工作量的增加之间存在权衡。换句话说,遗忘指数较高会带来更长的间隔,但由此带来的收益会被更多遗忘内容需要重新学习所产生的额外工作量所抵消。
当遗忘指数超过20%时,间隔拉长带来的间隔效应对记忆的积极作用,会被越来越多的遗忘内容所抵消。

图: 知识获取速率与遗忘指数之间的关系。
当遗忘指数降到5%以下时,复习工作量会迅速增加(见上图)。在实际学习中,建议使用的遗忘指数为6-14%。

在后来的几年中,人们发现最佳 遗忘指数 的数值会因所用工具不同而有所差异(例如 SM-17算法)。
记忆容量
根据这一模型所讨论的学习方法,人类大脑一生中能够获取新知识的最大容量估计不超过几百万条内容。由于没有人会把一生所有时间都用来学习,我怀疑自己永远不会见到有人记忆库里有一百万条内容。
1987年:DOS版SuperMemo 1.0
DOS版SuperMemo 1.0:逐日记事(1987年)
SuperMemo历史档案 中写道:“ 沃兹尼亚克用16个晚上写出了他的第一个SuperMemo”。实际情况稍微复杂一些,我想借着当年的日记,更详细地描述一下。
我已经想不起来1987年7月3日写下“ 我有一个革命性程序的想法,用来安排我的工作和科学实验SMTests”(SMTests指的是纸上版SuperMemo)到底是什么意思了。从纸面转到电脑似乎是显而易见的一步。当中一定存在某种思维障碍,需要“跳出框框”去思考。可惜我没有把细节写下来。今天,这件事唯一的意义在于,它说明了一个看似显而易见的想法,要真正渗透进人的脑子里可以有多慢,多折磨人。
1987年9月8日,我的第一台电脑从德国寄来了(Amstrad PC 1512)。我的兴奋无以言表!我睡不着觉,整晚都在工作。我原计划先写一个用于数学近似计算的程序,SuperMemo排在第二位。

图:Amstrad PC-1512 DD。 我的那台只有一个磁盘驱动器。操作系统MS-DOS要从一张磁盘加载,Turbo Pascal 3.0要从另一张磁盘加载,SuperMemo又要从另外一张磁盘加载。到1991年我拥有第一块硬盘时,我的英语库已经拆分成13张磁盘、每张3000条内容。其他知识领域的磁盘更多。1997年1月21日, SuperMemo World 追踪到了那台原始电脑,并从它的主人雅雷克·坎特茨基手中把它买回来。这台电脑整整十年都能正常运行。如今它被埋在公司积满灰尘的档案库某处。也许我们将来会公开它的照片。图中所示图片来自维基百科
1987年10月16日,星期五,我用12个小时写出了第一个GW-Basic版SuperMemo(连续编程719分钟)。它慢得像蜗牛,还满是漏洞。我并不喜欢它,也没有开始用它学习。这会是SuperMemo的终点吗?是不是选错了编程语言?学校里忙碌的日子让我被无数琐事占据。这就是典型的学校效应:什么都学了一点,却什么都不精。没有时间搞创造,也没有时间做自己的学习。幸运的是,我一直在用纸上版SuperMemo学习。SuperMemo的想法不会就此死去,它迟早要被自动化。
1987年11月14日,星期六,纸上版SuperMemo迎来了它的第一位用户: Mike Kubiak。他非常热情,这股热情一直没有熄灭。11月18日,我了解到了Turbo Pascal,但它在我的电脑上跑不起来。那个年代,如果你用的显卡不对,就可能遇到麻烦。我用的不是 Hercules,而是文本模式的黑白 CGA。我最后想出办法,改用RPED文本编辑器来编辑程序,而不是用Turbo Pascal自带的环境。后来我拿到了适配我显卡的正确版本。顺便一提,旧版SuperMemo的画面其实是彩色的,而我当时是以灰阶方式编程的,从来不知道它在彩色模式下究竟是什么样子。
1987年11月21日是个重要的日子,那天是星期六。不用上学的日子才是有创造力的日子。我原本想9点起床,结果晚起了72分钟。这对 计划 来说不太好,但对大脑和表现通常是好事。那天我从纸上版SuperMemo开始(复习英语、人体生物学、计算机科学等)。当天晚些时候,我读了Amstrad PC的说明书,学习了Pascal和Prolog,花了一些时间思考人脑皮层可能的运作方式,做了些运动,到了深夜,在有点疲惫的状态下,忽然决定要写一个DOS版的SuperMemo。这是我第二次尝试。不过这一次我选择了Turbo Pascal 3.0,而且从未后悔过。直到今天,作为这一直接选择的结果, SuperMemo 17 的代码依然是用Pascal(Delphi)写的。
顺便说明一下,SuperMemo这个名字是很久以后才提出来的。当时,我把自己的程序叫做SMTOP,即Super-Memorization Test Optimization Program(超级记忆测试优化程序)。1988年, Tomasz Kuehn 坚持要把它叫做CALOM,即Computer-Aided Learning Optimization Method(计算机辅助学习优化法)。
1987年11月22日和11月21日几乎一模一样。我得出结论,我已经明白了皮层的运作方式,也许有一天可以按照类似的原理造出一台电脑(参见 Jeff Hawkins 的研究)。我在深夜——一个非常不利于创造性工作的时间——又回去继续写SuperMemo,这似乎说明当时的那股热情还没有真正燃起来。
1987年11月23日看起来一模一样。我不确定为什么星期一那天我没有学校事务,但这或许拯救了SuperMemo。到了1987年11月24日,兴奋感涌了上来,我一口气连续工作了8个小时(依然是在晚上)。这个程序有了一个简单的菜单,可以往数据库里添加新内容。
1987年11月25日算是白白浪费了:我得去上学,又累又困。我们上了一门无聊到令人发指的计算机架构课,大概比西方的水平落后了整整十年。
11月26日又是自由日,我再次赶上了SuperMemo的进度。程序膨胀到了15,400字节。我得出结论,这个程序可能“ 非常有用”(原文如此,拼写有误)。
11月27日,放学后我又加了3个小时的工作。
11月28日是星期六,我连续投入了12个小时的热情编程。SuperMemo现在看起来几乎已经可以投入使用了。
11月29日,星期日,我为波兰的经济改革和民主化投了票。当天晚上,我没有取得太多进展,因为我要为英语课准备一篇作文。这篇作文写的是1982年我第一次尝试喝酒的那一天。我原本是个禁酒主义者,但作为一名生物学者,我认为自己应该了解酒精对大脑的影响。
11月30日又是白白浪费在学校,但放学回家的路上,我和 Biedalak 愉快地散了一段步。我们用英语长谈了各自的未来,那个未来大多和科学有关,很可能是在美国。
12月1日到4日又都浪费在了学校,没有时间编程。在和一位俄语教授的交谈中,我意识到自己短短6年就把俄语忘得一干二净,而我曾经以流利的俄语自豪!我不得不把编程时间投入到一门无聊的电子电路设计软件里。我必须这么做才能拿到那门电子学课的学分。我和老师有个约定:我不用去上课,只要写出这个软件就行。我什么都没学到,直到今天仍为浪费的时间感到痛心。如果当时我是自由的,我本可以把这份精力投入到SuperMemo上。
12月5日是星期六,不用上学,太好了!不过,我先浪费了4个小时在某个“键码处理程序”上。那个年代,即便是解析按下的键,也可能是个挑战。接着又浪费了一个小时去修改一些屏幕属性。除此之外,我又花了6个小时写“内容编辑器”,这样就能方便地在SuperMemo里编辑内容了。今天你毫不费力就能用到的东西——光标左移、右移、删除、上移、换行等——在当年可都需要花上一整天去编程实现。
12月6日是个惬意的星期天。我花了7个小时调试SuperMemo,添加了“最终复习”等功能。兴奋感一直在增长。再过一周,我或许就能开始使用我这套全新的、突破性的速学软件了。
12月7日星期一,放学后,我添加了一个删除内容的功能。
12月8日,就在里根和戈尔巴乔夫签署他们的 核协议 的同一天,我添加了搜索内容和显示内容统计信息的功能。SuperMemo“膨胀”到了43,800字节。
12月9日被学校课业和电子学课的编程作业占满了。
12月10日,学校停电了,我为此感到庆祝。趁着不用上枯燥的课,我又多编了一会儿程序。
12月11日,我们听了一场精彩的讲座,讲课的是学校里最聪明的人物之一:扬·维格拉兹教授。他坚持认为,他在波兰能做到的事,比在国外还要多。这是一句很有力量的话。然而到了2018年,他的维基百科词条却写道,他关于双阶段方法的发现曾被忽视,后来因为他选择了用波兰语发表,这一发现又在西方被重新独立发现。维格拉兹确实在波兹南建立了一支阵容强大的运筹学研究团队。如果我当时没有转向SuperMemo,我肯定也会拿着帽子去求他给一个工作机会。那天晚上,我添加了一个功能,用来查看每天需要复习的内容数量(也就是如今的“工作量”)。
12月12日是星期六。我给SuperMemo扩充了一个待复习队列编辑器,看起来已经准备好开始学习了,然而……
……12月13日,一个噩耗击中了我:“ 内存不足”。我想办法通过优化代码解决了这个问题。我还需要添加的最后一项功能,是让程序自动读取日期。是的,这是一个了不得的小技巧。没有它,我每次启动程序都得手动输入当前日期。终于,1987年12月13日下午,我终于能把第一批内容添加到我的人体生物学题库里:关于自主神经系统的问题。到1987年12月23日,我的纸上和电脑数据库合计已经收录了3795个人体生物学问题(其中将近10%已经录入SuperMemo)。可惜的是,那一天我不得不把完整的复习记录从SuperMemo中删除,因为360K的磁盘根本没有足够的空间。间隔重复的研究,还得再等上好几年。

图: DOS版SuperMemo 1.0(1987年)。
SM-2算法
以下是SuperMemo 1.0所用算法的说明,摘自我2.5年后(1990年)撰写的 硕士论文。SuperMemo 1.0很快就被更好用的SuperMemo 2.0取代,我可以把它送给大学里的朋友们用。这套算法只经历了一些微小的更新,被命名为SM-2算法,以对应SuperMemo的版本号。这也意味着,从来就没有所谓的SM-1算法。
我在头8个月里掌握了1000道生物学问题。更厉害的是,在每天学习40分钟的情况下,我在头365天里恰好记住了10,000个英语单词对。这个数字后来被用作SuperMemo早期商业宣传中的一个基准。即便在今天,要在4年内掌握 高级英语(4万多条内容),每天40分钟仍然是推荐的学习投入。
直到今天, SM-2算法 依然广受欢迎,Anki、Mnemosyne等应用至今仍在使用它。
档案警示:为什么要使用逐字档案?
3.2. 利用计算机来改善SuperMemo方法的使用效果
我在1987年12月写出了第一个SuperMemo程序(Turbo Pascal 3.0,IBM PC)。它旨在从两个基本方面来强化SuperMemo方法:
- 将优化程序应用到尽可能小的内容单元上(在纸上版SuperMemo中,内容是按页组织的),
- 根据内容之间不同的难度加以区分。
我观察到,连续复习间隔大致以一个恒定因子递增(例如,英语词汇的SM-0算法中该因子为2),于是我决定用以下公式来计算复习间隔:
I(1):=1
I(2):=6
for n>2 I(n):=I(n-1)*EF
其中:
- I(n)——第n次复习后的复习间隔(单位:天)
- EF——易度因子,反映记住并保持某条内容在记忆中的难易程度(后来称为 E因子)。
E因子的取值范围在最难内容的1.1到最容易内容的2.5之间。当一条内容被加入SuperMemo数据库时,其E因子默认为2.5。在复习过程中,如果出现回忆困难,这个数值会逐渐降低。因此,一条内容在回忆时造成的困难越大,其E因子下降的幅度也就越大。
第一个SuperMemo程序实现后不久,我注意到E因子不应低于1.3。E因子低于1.3的内容会被烦人地频繁重复,而且似乎总是在表述上存在固有缺陷(通常是不符合 最小信息原则)。因此,不让E因子低于1.3,大大提高了整个过程的效率,也为哪些内容需要重新表述提供了一个指标。用于计算内容新E因子的公式是凭经验构建的,在此后使用基于计算机的SuperMemo方法的3.5年里,几乎没有太大变化。
为了计算一个内容新的E因子数值,学生需要在复习该内容时,对自己回答问题的质量作出评估(我所写的SuperMemo程序使用0-5的评分标准——这个范围是由数字键盘的使用便利性决定的)。所用公式的一般形式为:
EF’:=f(EF,q)
其中:
- EF’——E因子的新值
- EF——E因子的旧值
- q——回答的质量
- f——用于计算EF’的函数。
函数f最初具有乘法性质,在后来的SuperMemo版本中,随着对E因子解释方式的重大变化,被转换成了加法形式,但EF’、EF和q之间的依赖关系并没有发生实质性的改变。为了简化后续讨论,这里只考虑函数f的最新形式:
EF’:=EF-0.8+0.28*q-0.02*q*q
这是以下形式的简化版本:
EF’:=EF+(0.1-(5-q)*(0.08+(5-q)*0.02))
注意,当q=4时,E因子不会发生变化。
现在让我们来看看SM-2算法的最终形式,在1987年12月13日到1989年3月9日期间,SuperMemo 1.0到3.0各版本都在使用这一算法(只做了少量修改)(之所以选择“SM-2”这个名字,是因为实现该算法的版本中,SuperMemo 2.0是迄今为止最受欢迎的一个版本)。
SM-2算法用于基于计算机的SuperMemo方法,涉及为各条内容分别计算易度因子:
- 把知识拆分成尽可能小的内容单元。
- 为所有内容赋予一个初始E因子,数值为2.5。
- 按照以下间隔复习内容:I(1):=1I(2):=6for n>2: I(n):=I(n-1)*EF其中:
- I(n)——第n次复习后的复习间隔(单位:天),
- EF——某条内容的E因子
- 每次复习后,按照0-5的评分标准评估复习回答的质量:5——完美回答4——经过犹豫后正确回答3——经过严重困难后回忆出正确答案2——回答错误;但正确答案本应容易想起1——回答错误;但看到正确答案后能想起来0——完全想不起来。
- 每次复习后,根据以下公式修改刚刚复习过内容的E因子:EF’:=EF+(0.1-(5-q)*(0.08+(5-q)*0.02))其中:
- EF’ — E-Factor(难度系数)的新值,
- EF — E-Factor 的旧值,
- q — 答题质量,按 0-5 分制评分。
- 如果答题质量低于 3,则该条目从头开始重复(即使用 I(1)、I(2) 等间隔,就像该条目是新记忆的一样),且不改变 E-Factor。
- 在当天的每次复习环节结束后,再次复习所有质量评分低于四分的条目。持续复习,直到这些条目的评分都至少达到四分。
用于求解 E-Factor 的优化程序证明是非常有效的。在 SuperMemo 程序中,你总能找到显示 E-Factor 分布(后来称为 E 分布)的选项。在某个数据库中,E 分布的形态在开始复习后的几个月内就大致确定下来。这意味着此后 E-Factor 不会再发生显著变化,因此可以放心地认为,E-Factor 大致对应于连续复习中复习间隔应该增长的真实倍数。
在使用 SM-2 算法的第一年里(学习英语词汇),我记住了 10,255 个条目。建立数据库和进行复习所需的时间平均每天 41 分钟。这相当于每年每分钟记住 270 个条目的速度。总体记忆保持率为 89.3%,但如果排除最近记住的条目(间隔低于 3 周,这些条目的 E-Factor 尚未得到恰当的确定),保持率则达到 92%。在比较 SM-0 和 SM-2 算法时,必须考虑到这样一个事实:在 SM-0 中,由于学生在复习某一页的条目时会得到提示,保持率被人为地拉高了——前面的条目很容易暗示出正确答案。因此,SM-2 算法尽管在数量对比上并不惊艳,却标志着 SuperMemo 方法自 1985 年提出最佳间隔概念以来的第二次重大改进。将此前按页分组的条目拆分开来,以及引入 E-Factor,是这个改进算法的两个主要组成部分。SM-2 算法是通过试错法构建出来的,它在实践中证明了促使其诞生的几乎所有基本假设都是正确的。
1988年:记忆的两个成分
长期记忆的两成分模型是 SuperMemo 的理论基础,并在 SM-17 算法 中得到了明确的体现。它区分了知识在长期记忆存储中有多 稳定 ,以及它有多 容易被提取 。学习理论中一个鲜为人知却至关重要的事实是:一个人可以很流利,却仍然记得很差。
流利程度并不能很好地衡量长期学习效果
长期记忆的成分
我第一次描述记忆两成分的想法,是在1988年1月9日为我的计算机模拟课程所写的一篇论文中。在同一篇论文里,我得出结论:陈述性学习和程序性学习必定涉及不同的神经回路。
只要稍稍停下来想一想,两成分的整个想法其实相当显而易见。如果你在一次复习刚结束后取两个 条目 ,一个最佳间隔较短,另一个较长,那么这两者的记忆状态必然不同。两者都能被完美回忆起来( 可提取性 都达到最大值),但它们在记忆中能持续多久也必须不同( 稳定性 不同)。令我惊讶的是,我竟找不到关于这个课题的任何文献。然而,如果文献中都没有提到间隔重复中存在 最佳间隔 这件事,那么这个看似显而易见的结论,或许正藏在另一个看似显而易见的想法背后: 最佳间隔复习中间隔逐渐增长的过程 。这生动地说明了人类的进步是渐进式的、且令人痛苦地缓慢。我们出了名地不善于跳出思维定式——最暗的地方往往就在灯烛之下。这个弱点可以借助网络交流的爆发来打破。我主张少一些同行评审,多一些大胆的假设。我想到一个绝佳的例子,来自 Robin Clarke 关于阿尔茨海默病的论文 。严苛的同行评审让人想起普鲁士式的学校教育:在追求完美的过程中,我们先失去创造力,再失去人性,最终失去生活的乐趣。
1988年2月19日,我第一次向我的老师 Katulski 博士展示这些想法时,他并不怎么惊讶,但还是让我通过了计算机模拟课程的考核。顺便一提,后来 Katulski 成了 DOS 版 SuperMemo 1.0 的首批用户之一。
在我的 硕士论文 (1990年)中,我加入了一个稍微更正式的证明,来说明这两个成分确实存在。论文中的这一部分却一直无人注意。
1994年,J. Kowalski 在波兰的《Enter》杂志上写道 :
我们已经了解到,从演化的角度解释记忆,表明它是依据间隔递增的原则和 间隔效应 来运作的。除了这种演化上的推测之外,这个记忆模型还有什么证据吗?Wozniak 在他的博士论文中,广泛探讨了记忆的分子层面,并提出了一个关于学习过程中突触变化的假设模型。论文中提出的新颖之处,在于区分了记忆痕迹的 稳定性 和 可提取性 。这一点无法用来支持 SuperMemo 本身的正确性,原因很简单——正是 SuperMemo 自身为这一假设奠定了基础。不过,越来越多的分子层面证据似乎与稳定性-可提取性模型相吻合,同时也为促成 SuperMemo 诞生的那些假设的正确性提供了支持。用通俗的话说,可提取性是记忆的一种属性,它决定了突触在响应刺激时能以多高的效率激活,从而唤起已学会的行为。可提取性越低,你就越不可能回忆出问题的正确答案。另一方面,稳定性反映的是此前复习的历史,决定了记忆痕迹能够维持多久。记忆的稳定性越高,可提取性下降到零——也就是记忆被永久遗忘的那个水平——所需的时间就越长。根据 Wozniak 的说法,我们第一次学习某个东西时,参与编码该刺激-反应关联的突触,其稳定性和可提取性都会略有提升。随着时间推移,可提取性会迅速下降,这一现象就等同于遗忘。与此同时,记忆的稳定性大致保持在同一水平。然而,如果我们在可提取性降到零之前重复这一关联,可提取性会恢复到最初的水平,而稳定性则会提升到一个明显高于初次学习时的新水平。在下一次复习到来之前,由于稳定性的提升,可提取性下降的速度会变慢,因此在遗忘发生之前,复习间隔可能会大大延长。还应注意另外两个重要的记忆特性:(1)当可提取性较高时,复习无法提升稳定性(间隔效应);(2)一旦发生遗忘,稳定性会迅速下降
我们与 Janusz Murakowski 博士和 Edward Gorzelańczyk 博士一起,于 1995年 发表了我们的想法。Murakowski 完善了数学证明,Gorzelańczyk 则充实了分子模型。我们并没有从科学界听到多少热烈的反响或反馈。记忆两成分的想法就像美酒,越陈越香。我们一直在想,它什么时候才能获得更广泛的认可。毕竟,我们并不是活在 孟德尔 的时代,用不着让一块宝石默默埋藏在某个不起眼的档案馆里。间隔重复的用户有数百万之多,即便只有0.1%的人对这套理论产生兴趣,也足以让我们的两成分理论被更多人知晓。如今,即便是 SuperMemo 中 最新的算法 ,也是基于两成分模型,而且效果极佳。颇具讽刺意味的是,用户往往更愿意涌向那些把人类记忆的一切机制都藏起来的简单方案。就连在 supermemo.com ,我们也刻意避免用屏幕上过多的数字吓跑用户。
记忆两成分的概念与此前的研究——尤其是 Bjork 的研究——有相似之处。
在20世纪40年代,科学家们研究了大鼠行为中习惯强度和反应强度这两个独立的成分。这些概念后来在 Bjork 的废用理论中被重新表述。Herbert Simon 似乎已经在他 1966年的论文中注意到需要一个记忆稳定性变量 。1969年,Robert Bjork 提出了「强度悖论」:回忆概率与一次复习产生的记忆效应之间存在反向关系。请注意,这其实是用 两成分模型 重新表述了 间隔效应 ,距离正式提出记忆变量之间的区分,只差一小步了。这直接导致了 Bjork 1992年的废用新理论 ,该理论区分了存储强度和提取强度。它们与 可提取性 和 稳定性 十分接近,只是对这一区分背后机制的解释略有不同。最引人注目的是,Bjork 认为当 可提取性 降到零时,稳定的记忆仍会被保留下来(而在我们的模型中,此时稳定性变得不确定)。在细胞层面,Bjork 或许——至少在一段时间内——是对的,但 SuperMemo 的实践证明了完全遗忘的力量,而从神经层面来看,不管 稳定性 如何,让废弃不用的记忆继续保留下来都是极其低效的。最后同样重要的是,Bjork 用连接性来定义存储强度,这与我认为发生在优秀学生身上的情况非常接近: 连贯性 会影响 稳定性 。
为什么记忆两成分理论至今仍未进入主流研究?我认为,既然人类的思维本就容易短视——我们所有人天生如此——那么科学界的思维同样可能被繁重的职责、「不发表就出局」的压力、争抢经费、层级制度、利益冲突、同行评审、教学任务,甚至行为规范所真正扼杀。记忆研究者往往只活在「记忆强度」这一个单一维度里,在这个维度中,他们无法真正体会到破解这个难题所需要探究的分子层面过程的真实动态。颇具讽刺意味的是,突破也许会来自那些从事人工智能或神经网络研究的人。 Demis Hassabis 或 Andreas Knoblauch 这样非凡的头脑,正是通过独立的推理过程、建模与模拟,得出了与我们不谋而合的想法。生物学家将需要学会倾听数学或计算机科学的语言。
SM-17 算法中的两成分模型
长期记忆的两成分模型 是 SM-17 算法 的理论基础。SM-17 算法的成功,正是这一模型正确性的终极实践证明。
下图展示了记忆两个成分数值的实际变化,直观呈现了记忆状态的演变过程:

图: 一个示例 条目 的记忆状态随时间的变化。横轴代表贯穿整个复习历史的时间。顶部面板展示 可提取性 (为便于分析,取十次方,即 R^10)。灰色网格线标注了 R=99%、R=98% 等可提取性水平。中间面板以海军蓝显示 最佳间隔 。复习日期以蓝色竖线标出,并以浅蓝色标注日期。当 R 跨过90%这条线,也就是 最佳间隔 结束的位置,以红色竖线标出(仅当 间隔 长于 最佳间隔 时才会出现)。底部面板展示 稳定性 (为便于分析,以
ln(S)/ln(days)的形式呈现)。图中显示,在早期 复习 阶段,当 稳定性 较低时, 可提取性 会(呈指数式)迅速下降,但在第7次复习后长达10年的时间里,它也仅从100%降到94%。所有数值均来自一份真实的复习历史记录,并基于 记忆三成分模型 推导得出。
由于 SuperMemo 的实际应用需要处理难度各不相同的学习材料,模型中涉及的第三个变量便是条目难度(D)。上文也讨论了条目难度的一些影响,尤其是由不同记忆稳定性(S)子成分组成的复合记忆所带来的影响。
为了新算法的需要,我们将记忆的三个成分定义如下:
- 记忆稳定性(S)定义为:能在复习时产生平均0.9回忆概率的复习间隔
- 记忆可提取性(R)定义为:在假设同质学习材料呈负指数遗忘、且衰减常数由记忆稳定性(S)决定的前提下,任意时刻回忆的预期概率
- 条目难度(D)定义为:复习时记忆稳定性(S)可能达到的最大增幅,被线性映射到0到1的区间中,0代表最容易的条目,1代表 SuperMemo 中考虑的最高难度(目前的截止界限设定为稳定性增幅不低于最大可能增幅的六分之一)
证明
下面是我 硕士论文 中的实际证明。若想更好地理解这一证明,请参见 Murakowski 的证明 。
存档提示: 为什么使用逐字存档?
10.4.2. 记忆的两个变量:稳定性与可提取性
SuperMemo 理论直接得出了一个重要结论:描述突触传导性以及记忆本身的独立变量,其实有两个,而不是通常认为的只有一个。为了说明这一点,让我们再来看看突触记忆的钙蛋白酶模型。从这个模型中可以明显看出,其作者假定只需要一个独立变量就能描述突触的传导性。钙离子流入量、钙蛋白酶活性、fodrin蛋白降解程度以及谷氨酸受体数量,都是这类变量的例子。请注意,上述所有参数彼此都是相关的,也就是说,只要知道其中一个,理论上就能计算出所有其他的——当然,前提是我们能构造出相应的公式。这些参数之间的相关性,正是它们彼此存在因果联系的直接结果。
然而,要描述某一时刻突触的状态,最佳学习过程恰恰需要两个独立变量:
- 第一个变量起到「时钟」的作用,用于衡量两次复习之间的时间。可用于表示这一变量的参数示例包括:
- T e — 自上次复习以来经过的时间(取值范围为 <0,最佳间隔>),
- T l — 距离下一次复习还需经过的时间(T l=最佳间隔-T e),
- P f — 该突触在当天丢失记忆痕迹的概率(取值范围为 <0,1>)。
- 第二个变量用于衡量记忆的持久性。可用于表示这一变量的参数示例包括:
- I(n+1) — 下一次复习后应采用的最佳间隔(I(n+1)=I(n)*C,其中 C 是大于三的常数),
- I(n) — 当前的最佳间隔,
- n — 到目前这一时刻为止已进行的复习次数,等等。
现在让我们看看,上述变量是否既必要又充分,能刻画时间最优学习过程中突触的状态。要证明这些变量是独立的,我们需要证明它们彼此都不能由另一个计算得出。请注意,在给定的复习间隔期间,参数 I(n) 保持不变,而参数 T e 则从零变化到 I(n)。这说明不存在满足以下条件的函数 f:
T e=f(I(n))
另一方面,在每一次后续复习发生的那个时刻,T e 总是等于零,而 I(n) 每次都取一个不同的、递增的值。因此不存在满足以下条件的函数 g:
I(n)=g(T e)
由此可见,I(n) 与 T e 是独立的。
为了证明最佳学习过程中不需要其他变量,请注意,在任意给定时刻,我们都可以用下面的算法计算出未来所有复习发生的时刻:
- 令经过 I(n)-T e 天。
- 进行一次复习。
- 令 T e 归零,并令 I(n) 增大 C 倍。
- 回到第1步。
请注意,C 的值是某个特定突触的一个特征常数,因此在学习过程中不会改变。接下来我将用术语 可提取性 来指代第一个变量,用术语 稳定性 来指代第二个变量。之所以选用「可提取性」这个词,是因为我们通常认为,记忆在完成一次学习任务后会很牢固,随后逐渐淡去,直到再也无法被提取出来。正是可提取性决定了记忆消失的那个临界时刻。同样值得一提的是,可提取性正是那个被默认为描述记忆所需的唯一变量(就像钙蛋白酶模型中那样)。稳定性变量之所以「隐形」,是因为研究者往往把精力集中在单次学习任务以及对随后突触变化的观察上,而稳定性的重要性只有在同一任务被反复多次进行的过程中才能显现出来。为了给记忆变量的分析做个总结,让我们提出任何生物模型在发展过程中都必须面对的那个标准问题:记忆存在两个变量,可能带来怎样的演化优势?
可提取性和稳定性二者都是必要的,它们共同编码了一种学习过程,使得后续的复习间隔能够不断延长而不发生遗忘。如果我们承认这样一个事实——不遗忘地一味记忆,会在短时间内堵塞容量有限的记忆系统——那么很容易证明,这种学习模型对个体的生存率而言是最优的。如果记忆注定要遗忘,它就必须有某种方式来保留那些对生存看似重要的痕迹。复习作为一种强化记忆的因素,正是这样一种方式。现在让我们思考一下,复习过程最合适的时机应该是什么。如果某个现象已经被遇到第 n 次,那么它被遇到第 n+1 次的概率就会上升,因此更长的记忆保持时间似乎是有利的。描述最佳复习过程的精确函数,取决于记忆存储的容量、个体可能遇到的现象数量等许多因素。然而,通过复习不断延长间隔以维持记忆,其有用性是无可争议的,可提取性与稳定性的演化价值也同样无可争议。可以想象出许多干扰这一简单演化图景的情况。举例来说,与强烈应激相关的事件应该会被记得更清楚——事实上,关于儿茶酚胺对学习影响的研究已经证实了这一点。也许,通过激素刺激,可以提升一个采用 SuperMemo 方法学习的学生的表现。
中期小结
- 本文提出了一个假设:描述最佳学习过程需要两个独立变量。这两个变量被命名为记忆的 可提取性 和 稳定性
- 记忆的可提取性反映的是两次复习之间经过的时间,表明记忆痕迹在 回忆 过程中能够被成功利用到什么程度
- 记忆的稳定性反映的是学习过程中的复习历史,并会随着每一次突触受到刺激而增加。它决定了 最佳复习间隔 的长度

图: 最佳学习过程中涉及的假设机制。(A)分子层面的现象 (B)突触中的量化变化。
Murakowski 的证明
以下是 Murakowski 给出的一个改进证明:
此前的研究已经发现,配对联想学习中复习的最佳间隔——即以最少复习次数、无限期维持恒定知识保持水平(例如95%)所需的间隔——大致可以用以下公式表示( Wozniak 与 Gorzelańczyk,1994年 )。
- (1) I 1=C 1
- (2) I i=I i-1*C 2
其中:
- I i — 第 i 次复习之后的复习间隔
- C 1 — 第一个间隔的长度(取决于所选定的知识保持水平,通常为若干天)
- C 2 — 表示后续复习中间隔递增倍数的常数(取决于所选定的知识保持水平,以及所记忆条目的难度)
上述公式是通过计算机优化程序,针对人类被试进行的实验得出的——该程序采用主动回忆淘汰技术,来监督词对的自定进度学习过程。[……]
正如下文将展示的那样,被广泛研究的「记忆强度」(或称突触增强)本身并不足以解释最佳复习间隔所呈现的规律模式:[……]
- 我们想要确定,在存储记忆痕迹时涉及哪一组(分子层面的)变量,才足以解释复习的最佳间隔。首先,让我们假设在遵循公式(1)和(2)所表示的最佳间隔进行学习时,存在与这些变量相关的两个量:r — 从当前时刻到当前最佳间隔结束所剩余的时间(最佳间隔是指到其末尾时,保持率降至此前定义的水平,例如95%,所对应的间隔)s — 当前最佳间隔的长度。
- 恰好在第 i 次复习开始时, r=0,而 s i> s i-1>0( s i 表示第 i 次复习开始那一刻的 s 值)。这说明不存在函数 g 1 使得 s=g 1( r),也就是说, s 不能仅仅是 r 的函数。
- 在复习间隔期间,若 t 1<>t 2 ,则 r(t 1)<> r(t 2) (t 表示时间, r(t) 表示 t 时刻的 r 值)。另一方面, s(t 1)= s(t 2) ( s(t) 表示 t 时刻的 s 值)。这说明不存在函数 g 2 使得 r=g 2( s),否则我们将得到: r(t 1)=g 2( s(t 1))=g 2 ( s(t 2))= r(t 2),这导致了矛盾。 r 不能仅仅是 s 的函数。
- 在第2步和第3步中,我们已经证明了 r 和 s 是独立的,因为不存在函数 g 1 和 g 2 使得 s=g 1( r) 或 r=g 2( s)。显然,这并不意味着不存在某个参数 x 以及函数 y s 和 y r 使得 s=y s(x) 且 r=y r(x)。
- 可以证明, r 和 s 足以计算出复习的最佳间隔(参见公式(1)和(2))。让我们首先假设,在记忆存储所涉及的系统中,以下两个函数 f r 和 f s 是已知的: r i=f r( s i) 且 s i=f s( s i-1)。在我们的情形中,这些函数具有简单的形式:f r: r i= s i ,以及 f s: s i= s i-1*C 2 (其中 C 2 是公式(2)中的常数)。在这种情况下,变量 r 和 s 足以表示最佳复习间隔中任意时刻 t 的记忆状态。下面这个复习间隔算法可以证明这一点:
- 假设变量 r i 和 s i 描述了第 i 次复习之后的记忆状态
- 令经过 r i 这段时间
- 进行一次复习
- 使用函数 f s 根据 s i 计算出 s i+1 的新值
- 使用函数 f r 根据 s i+1 计算出 r i+1 的新值
- i:=i+1
- 回到第2步
以上推理表明,变量 r 和 s 构成了计算复习最佳间隔所需的、充分的一组独立变量。显然,通过使用形如 r’’=Tr( r’) 和 s’’=Ts( s’) 的一组变换函数,可以设想出无穷多组能够描述记忆系统状态的 r– s 变量对。剩下的一个难题是:如何选出一组 r– s ,使其最方便地对应于突触层面所发生的分子现象。
针对存在 r– s 这一对变量的记忆系统,作者提出了以下术语和解释:变量 R,即可提取性,决定了某一记忆痕迹在给定时刻能被唤起的概率;而变量 S,即记忆的稳定性,决定了可提取性因遗忘而下降的速度,从而决定了最佳复习间隔中复习间隔的长度。
假设可提取性呈负指数下降,并将稳定性解释为可提取性衰减常数的倒数,我们便可以用以下公式方便地表示 R 与 S 之间的关系(t 表示时间):
(3) R=e -t/S
从推理第1步到第5步中使用的 r– s 变量对,转换到所提出的 R-S 解释的变换函数如下所示(假设将最佳复习间隔定义为能产生知识保持率 K=0.95 的那个间隔):
(4) S=- s/ln(K)
(5) R=e -( s– r)/S
因此,第 i 次复习之后的稳定性(S i)与公式(1)、(2)中决定复习最佳间隔的常数 C 1 和 C 2 之间的关系,可以写成:
(6) S i=-(C 1*C 2 i-1)/ln(K)
最后,最佳复习间隔中的可提取性可以表示为:
(7) R i(t)=exp (t*ln(K)/(C 1*C 2 i-1))
其中:
- i — 所讨论的复习次数序号
- t — 自第 i 次复习以来经过的时间
- R i(t) — 在最佳复习间隔中,自第 i 次复习经过时间 t 后的可提取性
- C 1 和 C 2 — 公式(1)和(2)中的常数
- K — 等于0.95的知识保持率(需要注意的是,对于高于0.95的保持率,由于较短间隔所产生的间隔效应,公式(7)所表示的关系可能并不成立)
SuperMemo 中的记忆两成分
SuperMemo 一直都是基于两成分模型构建的,只是这个模型随着时间的推移变得越来越明确。上文 Murakowski 证明中公式(2)里的常数 C 2 ,代表的正是 稳定性增量 。到2018年,稳定性增量在 SuperMemo 中被表示为矩阵 SInc[] 。C 2 表示的是,为了满足可接受的遗忘水平标准,学习过程中复习间隔应该增大多少倍。实际上,C 2 并不是一个常数,它取决于多种因素,其中最重要的包括:
- 条目难度(D)(参见: 复杂度 ):所记忆信息越难,C 2 就越小(也就是说,较难的材料必须更频繁地复习)
- 记忆稳定性 (S):记忆越持久耐用,C 2 值就越小
- 回忆概率(即 可提取性 )(R):回忆概率越低,C 2 值就越高(也就是说,由于 间隔效应 ,延迟复习的条目反而会被记得更好)
由于存在这些多重依赖关系,C 2 的精确值并不容易预测。SuperMemo 解决这一及类似优化问题的方式,是使用多维矩阵来表示多参数函数,并根据实际学习过程中获得的测量数据来调整这些矩阵的值。这些矩阵的初始值来自理论模型或此前的测量数据。随着时间推移,实际使用的数值会与理论预测值或以往学生数据所推算出的数值略有偏差。
例如,如果某个特定难度、特定记忆状态的条目所对应的 C 2 值,产生的复习间隔比预期更长(即导致回忆水平低于预期),那么 C 2 的值就会相应地被调小。
以下是 稳定性增量 (常数 C 2)历年来的演变:
- 在纸笔版 SuperMemo(1985年)中,C 2 确实(几乎)是一个常数。它被设定为平均值1.75(因四舍五入误差和简化处理,在1.5到2.0之间浮动),并未考虑 材料难度 、记忆的 稳定性 或 可提取性 等因素
- 在 DOS 版 SuperMemo 的早期版本(1987年)中,C 2 被命名为 E-Factor ,第一次体现了 条目难度 。评分差时它会减小,评分好时它会增大
- SuperMemo 4(1989年)没有使用 C 2 ,但在计算复习间隔时,第一次采用了优化矩阵
- 在 SuperMemo 5(1990年)中,C 2 被命名为 O-Factor ,终于被表示为一个矩阵,它同时包含了 难度 维度和 稳定性 维度。同样,矩阵中的每个条目都要经历「测量-验证-修正」的循环:从基于此前测量得出的初始值开始,逐步收敛到能够满足学习标准的数值
- 在 SuperMemo 6(1991年)中,以 O-Factor 矩阵形式呈现的 C 2 ,改由一个三维矩阵推导得出,其中新增了 可提取性 维度。这第三个维度带来的重要意义在于,SuperMemo 第一次能够让用户查看不同 难度 和 记忆稳定性 水平下的 遗忘曲线
- 从 SuperMemo 8(1997年)到 SuperMemo 16,C 2 的表示方式没有太大变化,但用于实现从理论数据到真实数据快速而稳定过渡的算法,逐渐变得越来越复杂。最重要的是,新版本的 SuperMemo 更好地利用了 C 2 中的 可提取性 维度。因此,与 间隔效应 无关,学生可以偏离最初的学习标准——比如在考试前临时突击——而不会给优化过程带来干扰噪声
- 在 SuperMemo 17(2016年)中,C 2 终于呈现出基于最初两成分模型的形式。它取自 稳定性增量 矩阵(SInc),该矩阵具有三个维度,分别代表决定稳定性增量的三个变量: 复杂度 、 稳定性 和 可提取性 。SInc 矩阵中的数据是在学习过程中,通过一个名为 SM-17 算法 的复杂算法逐步填充的。在 SuperMemo 17 中,可以通过 工具 : 记忆 : 4D图表 ( 稳定性 标签页)查看这个稳定性增量矩阵
1989年:SuperMemo 适应用户的记忆
引入灵活的间隔函数
SuperMemo 2 非常出色。它简单的算法 以各种变体存活至今 ,被应用在Anki或Mnemosyne等热门软件中。不过,该算法在某种意义上是笨拙的:它无法修改最佳间隔函数,1985年的研究结果被当作定论,一成不变。记忆的 复杂度 和 稳定性增长 都用同一个数字来表示: E-因子。这就像自行车上只用一根拨杆同时控制换挡和转向方向。
单个知识项可以通过改变自己估计的 难度 来调整复习间隔。这些变化可以弥补 最佳间隔 函数中的误差。即便算法收敛到最优值的速度很慢,理论上它仍是收敛的。主要缺陷在于,在算法SM-2中,新知识项无法从旧知识项积累的经验中获益。
算法SM-2不具备自适应能力。新知识项无法从旧知识项的经验中获益
算法SM-4是首次尝试为 SuperMemo 赋予通用自适应能力。它于1989年2月完成。最终,这种自适应能力出现得太慢,但在研发算法SM-4过程中获得的启发,对后续进展至关重要,尤其是在理解间隔重复中稳定性与准确性之间矛盾这一问题上。简而言之,算法SM-4过于稳定,却不够准确。这一问题在7个月后的算法SM-5中很快得到了纠正。以下是摘自我 硕士论文 的一段说明细节的文字:
存档提示: 为什么使用原文存档?
本文节选自:” 学习优化 “,作者 Piotr Wozniak (1990年)
算法SM-2 的主要缺陷似乎在于最佳间隔函数的形状是任意设定的。尽管这一函数在实践中效果显著,并经多年重复实验证实,但 它无法宣称具有科学证明的有效性,也无法检测出最佳间隔在几天范围内变化对学习过程的整体影响。考虑到这些缺陷,我决定利用SuperMemo日常的复习数据来验证最佳间隔函数!
借助与确定 E-因子 时类似的优化方法,我希望程序能够在修正被证明合理时,自动纠正最初提出的函数。
为实现这一目标,我将最佳间隔函数制成了表格。

图: 最佳间隔矩阵在1989年首次出现于SuperMemo 4中,并以极少的改动延续至今天的SuperMemo 17。图中展示的是SuperMemo 5生成的矩阵,可以看出它与矩阵原始值已有显著差异。而在SuperMemo 4中,矩阵的调整速度要慢得多
最佳间隔矩阵(后来称为OI矩阵)的各个条目,最初取自算法SM-2所使用的公式。
在1989年2月推出的SuperMemo 4中,该新方案被付诸实现,程序使用OI矩阵来确定重复间隔的取值:
I(n):=OI(n,EF)
其中:
- I(n) – 某知识项第n次重复的间隔(单位:天),
- EF – 该知识项的E-因子,
- OI(n,EF) – OI矩阵中对应第n次重复和E-因子EF的条目。
然而,OI矩阵并非一成不变。在复习过程中,矩阵的各个条目会根据评分被增大或减小。例如,如果某条目表示最佳间隔为X,而实际使用的间隔是X+Y,且该间隔之后的评分不低于4分,那么该条目的新值就会落在X与X+Y之间。
因此,在平衡状态下,OI条目的取值应当稳定在这样一点:低留存率知识项与高留存率知识项对矩阵的影响相互抵消。据此,SuperMemo 4的目标是最终得出一个确定性的最佳间隔函数。
僵化的SuperMemo 4
我很快就意识到,新算法的验证-纠正周期太长了。这与在计算机上重现 1985年的实验 没有太大区别。要确定长达十年的间隔,我就需要等上十年才能检验复习的结果。这促使7个月后诞生了 算法SM-5。以下是我在 硕士论文 中对算法SM-4问题的描述:
存档提示: 为什么使用原文存档?
本文节选自:” 学习优化 “,作者 Piotr Wozniak (1990年)
算法SM-4被应用于SuperMemo 4中,使用期为1989年3月9日至1989年10月17日。尽管修改最佳间隔函数这一核心思路本应是重大进步,但该算法的实现却是失败的。算法的根本不足似乎源于修改OI矩阵所用的公式。
其中有两个最为突出的缺陷:
- 修改的幅度过于细微,无法在合理短的时间内明显重排OI矩阵,
- 对于较长的重复间隔,修改的效果要等很久才能稳定下来,也就是说,要经过相当长的时间,才能看到并在必要时纠正对一个长达数月的间隔所做的修改
在使用算法SM-4七个月后,各数据库的OI矩阵与其初始状态相比并无太大变化。这一现象本可以解释为我早先关于最佳重复间隔真实数值的预测是正确的,然而,后来通过 算法SM-5 的验证证明,矩阵保持稳定的真正原因其实是优化公式本身存在缺陷。就学习获取率和记忆留存率而言,没有可靠证据表明算法SM-4带来了任何进步。观察到的些许改善,也很可能只是软件整体改进以及 知识项编写原则 改进的结果
新版SuperMemo中残留的SuperMemo 4痕迹
有趣的是,在较新版本的SuperMemo中,你仍能看到最佳间隔矩阵。该矩阵已不再被算法使用,不过它仍显示在SuperMemo统计信息中,用以告知用户 复杂度 对知识项在学习过程中前景的影响。
如果你将SuperMemo 5使用8个月后生成的矩阵,与使用算法SM-8二十年后生成的矩阵相比,会发现两者惊人地相似:

图: 最佳间隔矩阵在 算法SM-17 中已不再使用。不过,借助算法SM-15的相关程序仍可生成它。各列对应材料的易度,以 A-因子 表示。各行对应 记忆稳定性,以 重复 类别表示
算法SM-4
以下是我 硕士论文 中对算法SM-4的概述:
存档提示: 为什么使用原文存档?
本文节选自:” 学习优化 “,作者 Piotr Wozniak (1990年)
SuperMemo 4.0所使用的算法SM-4:
- 将知识划分为尽可能小的知识项
- 为所有知识项赋予一个等于2.5的 E-因子
- 针对不同的重复次数和E-因子类别,将OI矩阵制成表格
- 使用以下重复间隔规则来得出初始OI矩阵:OI(1,EF):=1OI(2,EF):=6for n>2 OI(n,EF):=OI(n-1,EF)*EFwhere:
- OI(n,EF) – E-因子等于EF的知识项在第n次重复后的最佳重复间隔(单位:天),
- 使用OI矩阵来确定重复间隔:I(n,EF):=OI(n,EF)where:
- I(n,EF) – E-因子等于EF的知识项的第n次重复间隔(单位:天),
- OI(n,EF) – OI矩阵中对应第n次重复和E-因子EF的条目
- 每次重复后,按0-5分的评分等级评估 复习作答的质量(参见 算法SM-2)。
- 每次重复后,按以下公式修改刚刚复习过的知识项的E-因子:EF’:=EF+(0.1-(5-q)*(0.08+(5-q)*0.02))where:
- EF’ – E-因子的新值,
- EF – E-因子的旧值,
- q – 按0-5分评分等级衡量的作答质量。
- 每次重复后,修改OI矩阵中的相应条目。
- 一个示例公式大致如下(SuperMemo 4实际使用的公式更为复杂):OI’:=interval+interval*(1-1/EF)/2*(0.25*q-1)OI :=(1-fraction)*OI+fraction*OI’where:
- OI – OI条目的新值,
- OI’ – 计算中使用的OI条目辅助值,
- OI – OI条目的旧值,
- interval – 本次重复之前使用的间隔(即该知识项上一次使用的间隔),
- fraction – 0到1之间的任意数值(数值越大,OI矩阵的变化速度越快),
- EF – 复习知识项的E-因子,
- q – 按0-5分评分等级衡量的作答质量。
- 如果作答质量低于3分,则在不改变E-因子的情况下,从头开始该知识项的重复流程。
- 在当天的每次复习环节结束后,再次复习所有质量评估低于4分的知识项,持续复习直到这些知识项的评分都达到至少4分
间隔矩阵存在的问题
除了收敛缓慢之外,算法SM-4还表明,使用间隔矩阵会带来若干问题,而这些问题只需用 O-因子 取代间隔即可轻松解决。这些额外的缺陷促使 算法SM-5 在1989年就迅速被实现出来。以下是一段简短的分析,说明了使用 最佳间隔 矩阵存在的缺陷:
存档提示: 为什么使用原文存档?
本文节选自:” 学习优化 “,作者 Piotr Wozniak (1990年)
- 在复习过程中,有可能出现某个间隔被计算得比前一个间隔还短的情况。这显然与SuperMemo方法所依据的一般假设相悖。此外,算法SM-5的应用结果也否定了这种结果的有效性。这一缺陷本可以通过禁止间隔超过或低于某些数值来预防,但这种做法会因引入多余的依赖关系,而大大拖慢将各最佳间隔相互关联起来的优化过程。上述情况确实在其中一个数据库中被观察到。尽管相关间隔仅有两周长,但在使用算法SM-4的整个期间结束时,这一偏差始终未被消除
- 各个知识项的E-因子在不断被修改,因此在OI矩阵中,一个知识项可能会从一个难度类别转移到另一个难度类别。如果该知识项的重复次数足够多,这将导致该知识项的复习过程出现严重紊乱。请注意,重复次数越高,相邻E-因子类别列之间最佳间隔的差异就越大。因此,如果E-因子增大,该知识项所用的最佳间隔可能会被人为拉长,反之则可能会过短
算法SM-4试图将最佳间隔的长度与重复次数关联起来。这种做法似乎并不正确,因为记忆更可能对上一次所用重复间隔的长度敏感,而不是对重复的次数敏感。
SuperMemo 5
最佳间隔矩阵这一想法诞生于1989年2月11日。1989年3月1日,我开始用SuperMemo 4学习世界语。很早我就发现这个想法需要修订——算法的收敛速度慢得令人难以忍受。
到5月5日,我脑中有了一个新想法。本质上,这就是 稳定性增长 函数的诞生,只是在 SuperMemo 的最佳复习方案中,不会有 可提取性 这一维度。新算法将使用最佳因子矩阵,记录间隔需要根据 记忆复杂度 和当前 记忆稳定性 增大多少。算法SM-4收敛缓慢,也促使我萌生了对间隔进行随机化处理的想法(5月20日)。
同时,由于学业上的事务,进展再度被迫延后。我和 Krzysztof Biedalak 决定合写一个可以配合SuperMemo使用的学校测验编制程序。这个项目再次被用作借口,让我们脱身于思想开明的Katulski博士课堂上的其他任务——他此时已成了SuperMemo一切事物的支持者。
我在荷兰进行暑期实习,期间由于种种事务,进展缓慢。进展缓慢的主要原因之一,是为了偿还我PC 1512电脑的债务而不得不极度节省开支。我还希望能多赚一点钱,给电脑添置一块硬盘。我所有的工作能够继续进行,都要感谢埃因霍温大学的Peter Klijn的关照。他在我逗留的整段时间里,直接把自己的电脑借给我私用。他不希望我在SuperMemo上的出色工作因此而放慢速度。这是我第一次能把所有文件都存在硬盘上,感觉就像从一辆旧自行车换成了特斯拉Model S。
直到1989年10月16日,新算法SM-5才最终完成,我随即开始使用SuperMemo 5。我在笔记中写道:” 一场伟大的革命即将到来“。而实际的进展确实是巨大的。
当时我有几位SuperMemo 2的用户愿意升级到SuperMemo 5。我只要求一个条件:他们要以某个特定值来初始化最佳因子矩阵。这样做是为了验证算法,确保它不带任何先入为主的偏见。所有预设的优化矩阵都能很好且迅速地收敛。这一事实随后被用来论证该算法具有普遍收敛性,并在 首篇关于间隔重复算法的公开论文 中如此描述。
算法SM-5
SuperMemo遵循一个简单的原则: “使用、验证、纠正”。每次重复后,程序借助 OF矩阵 计算新的间隔。用于计算间隔的“相关条目”取决于重复(类别)和知识项难度。间隔到期后,SuperMemo会安排下一次重复。评分用于告诉SuperMemo这个间隔“表现”如何。如果评分较低,我们就有理由认为该间隔过长,对应的OF矩阵条目偏高,此时我们会略微调低该OF条目。这里的“相关条目”指的是此前用来计算该间隔的那个条目(即在间隔开始之前使用的条目)。换句话说,这个条目(1)用于计算间隔(第n次重复之后),随后(2)在第n+1次重复之后被用来修正 OF矩阵。
以下是我 硕士论文 中给出的算法SM-5概述:
存档提示: 为什么使用原文存档?
SuperMemo 5所使用算法的最终表述如下(算法SM-5):
- 将知识划分为尽可能小的知识项
- 为所有知识项赋予一个等于2.5的 E-因子
- 针对不同的重复次数和E-因子类别,将OF矩阵制成表格。使用以下公式:OF(1,EF):=4for n>1 OF(n,EF):=EFwhere:
- OF(n,EF) – 对应第n次重复和E-因子EF的最佳因子
- 使用OF矩阵来确定重复间隔:I(n,EF)=OF(n,EF)*I(n-1,EF)I(1,EF)=OF(1,EF)where:
- I(n,EF) – E-因子为EF的知识项的第n次重复间隔(单位:天)
- OF(n,EF) – OF矩阵中对应第n次重复和E-因子EF的条目
- 每次重复后,按0-5分评分等级评估作答质量(参见算法SM-2)
- 每次重复后,按以下公式修改刚刚复习过的知识项的E-因子:EF’:=EF+(0.1-(5-q)*(0.08+(5-q)*0.02))where:
- EF’ – E-因子的新值
- EF – E-因子的旧值
- q – 按0-5分评分等级衡量的作答质量
- 每次重复后,修改OF矩阵中的相应条目。以下是任意构造、用于修改的示例公式:OF’:=OF*(0.72+q*0.07)OF :=(1-fraction)*OF+fraction*OF’where:
- OF – OF条目的新值
- OF’ – 计算中使用的OF条目辅助值
- OF – OF条目的旧值
- fraction – 0到1之间的任意数值(数值越大,OF矩阵的变化速度越快)
- q – 按0-5分评分等级衡量的作答质量
- 如果作答质量低于3分,则在不改变E-因子的情况下,从头开始该知识项的重复流程
- 在当天的每次复习环节结束后,再次复习所有质量评估低于4分的知识项,持续复习直到这些知识项的评分都达到至少4分
根据此前的观察结果,OF矩阵中的条目不允许低于1.2。在算法SM-5中,按照定义,后续重复的间隔不能比前一次更短——间隔至少是其前一个间隔的1.2倍。改变 E-因子 类别只会使下一个所用间隔按照 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年 做出的大胆猜测经受住了时间的考验,但任何算法都不该只信赖一个在间隔重复算法实现方面仅有两年经验的普通学生的判断。因此,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 5利用所有知识项过去的表现来最大化对新知识项的处理效果,这其实是一项优势,而不是一个“问题”。不仅如此,这恰恰正是其自适应能力强大的关键所在
- 评分不一致一直是所有算法面临的问题。总体而言,自适应能力有助于发现误用带来的平均影响,尤其是当不一致性本身具有一致性时(即用户在相似情境下反复出现类似的“违规”评分)。
- SuperMemo 5 在处理混合难度方面表现要好得多,因为在 SuperMemo 2 中,难度和稳定性增长都由 E-因子编码,而在 SuperMemo 5 及之后的版本中,记忆的这两个属性被分开处理。
- 事实证明,SuperMemo 5 的间隔预测更为优越,而“更容易猜错”这一说法只能用实现上的错误来解释。
- 如果没有实现矩阵平滑,较低的评分反而可能带来更长的间隔。算法的这一部分我在论文中只是用文字描述过。
- 在 SuperMemo 中,间隔和复习日期一直都被醒目地显示出来,即便是在大多数更简化的实现中(例如掌上设备、智能手机等)也是如此。没有任何信息对用户隐藏。最重要的是, 遗忘指数 和 负担 统计数据都完全可见,让用户能够看清 SuperMemo 是否兑现了其记忆保持率的承诺,以及为此付出了多大的学习负担。
在上述所有说法中,只有一点可能属实:SuperMemo 2 确实可能更直观易用。这个问题困扰 SuperMemo 已经多年。每一个新版本都更加复杂,很难向用户完全隐藏这种复杂性。不过我们会继续努力。
我们在 2011 年发布于 supermemopedia.com 的官方回应,放到今天来看依然相当准确:
存档提示: 为什么使用原文存档?
Anki 在引入自己的创新的同时,仍然对 SuperMemo 给予应有的肯定,这一点值得称赞。SuperMemo 的 SM-2 算法与例如 Leitner 系统或纸质版 SuperMemo 相比确实表现出色,这也是事实。然而,SM-5 算法优于 SM-2 算法这一点,无论在实践上还是理论上都毋庸置疑。正是 SM-2 算法把间隔硬编码,且只依赖于条目的难度,而这种难度是用一个启发式公式(即基于 1987 年之前有限经验所得出的猜测性公式)来近似估算的。确实,你无法通过输入虚假数据来“搞坏”SM-2 算法,但这仅仅是因为它不具备自适应能力。你大概更喜欢可以自定义字体的文字处理软件,尽管你也可以用 Wingdings 字体把文字弄得一团糟。
SM-2 算法只是简单粗暴地用所谓的 E-因子(一种表示条目难度的方式)去乘以间隔。相比之下,SM-5 算法会收集用户表现的数据,并据此调整最优间隔函数——换句话说,它会根据学生的表现进行自适应调整。SM-6 算法则更进一步,调整最优间隔函数以达到期望的记忆保持水平。这些更新算法的优越性已经通过多种方式得到验证,例如通过测量固定规模数据库中学习负担随时间的下降情况。在所研究的案例中(小样本),采用新算法的学习负担下降速度,几乎是使用 SM-2 算法处理的旧数据库的两倍(相同类型的材料:英语词汇)。
所有 SuperMemo 算法都会把条目归入不同的难度类别。SM-2 算法为每个类别设定一套固定不变的间隔。SM-5 算法同样为每个类别设定一套间隔,但这些间隔会根据用户的表现进行调整,也就是说并非一成不变。
一致性在 SM-5 算法中确实比在 SM-2 算法中更为重要,因为虚假数据会导致“错误的自适应”。不过,无论你使用哪种算法,在 SuperMemo 中给出不真实/作弊的评分始终都是不好的做法。在对记忆的认识尚不完整的情况下,自适应能力总是优于僵化的模型。这正是为什么依据一个不精确的平均值进行自适应(如 SM-5 算法)仍然好于依据一个不精确的猜测来设定间隔(如 SM-2 算法)。不用说,最终的定论属于 SM-8 及之后的算法,因为它们会根据实测的平均值进行自适应。
SuperMemo 5 的评估(1989 年)
SuperMemo 5 的优越性如此明显,以至于我并没有收集太多数据来证明这一点。我只在我的 硕士论文 中做了几组对比,而这些对比已经足以说明一切。
存档提示: 为什么使用原文存档?
3.8. SM-5 算法评估
SM-5 算法自 1989 年 10 月 17 日起投入使用,在提供确定最优间隔函数的高效方法方面,其效果超出了所有预期,进而提高了学习速度(9 个月内学习了 15,000 个条目)。图 3.5 显示,其学习速度至少是联合使用 SM-2 和 SM-4 算法所达到速度的两倍!

图: 由 SM-2 和 SM-5 算法管理的 数据库 中学习负担的变化。
对于使用了 10 个月的数据库,记忆保持率提高到了约 96%。下面列出了部分数据库的记忆保持率数据,以展示 SM-2 与 SM-5 算法之间的对比:
- 日期 —— 测量的日期,
- 数据库 —— 数据库名称;“ALL”表示所有数据库的平均值
- 间隔 —— 数据库中条目当前使用的平均间隔
- 记忆保持率 —— 数据库中的记忆保持率
- 版本 —— 应用于该数据库的算法版本
| 日期 | 数据库 | 间隔 | 记忆保持率 | 版本 |
|---|---|---|---|---|
| 88年12月 | EVD | 17天 | 81% | SM-2 |
| 89年12月 | EVG | 19天 | 82% | SM-5 |
| 88年12月 | EVC | 41天 | 95% | SM-2 |
| 89年12月 | EVF | 47天 | 95% | SM-5 |
| 88年12月 | 全部 | 86天 | 89% | SM-2 |
| 89年12月 | 全部 | 190天 | 92% | SM-2、SM-4 和 SM-5 |
在复习过程中记录到的评分分布如下:
| 质量 | 占比 |
|---|---|
| 0 | 0% |
| 1 | 0% |
| 2 | 11% |
| 3 | 18% |
| 4 | 26% |
| 5 | 45% |
根据 SM-5 算法背后的假设,这一分布得出的平均回答质量为 4。遗忘指数为 11%(评分低于 3 的条目被视为已遗忘)。请注意,记忆保持率数据显示,数据库中只有 4% 的条目未被记住。因此,遗忘指数是实际遗忘条目比例的 2.7 倍。在一个使用了 7 个月的数据库中,发现有 70% 的条目在测量之前的复习过程中从未被遗忘过一次,而只有 2% 的条目被遗忘超过 3 次。
新算法优越性的理论证明
Anki 对 SuperMemo 5 的批评,需要用现代间隔重复理论来做一个简单的证明加以回应。我们可以说明,如今的记忆模型可以映射到 SM-2 算法 和 SM-5 算法 所依据的模型上,而两者之间的关键区别在于:最优间隔函数是否具备自适应能力(在 SM-5 算法中体现为 OF 矩阵)。
设 SInc=f(C,S,R) 为一个 稳定性增长 函数,其参数为 复杂度 C、 稳定性 S 和 可提取性 R。该函数决定了在最优学习中复习 间隔 的渐进增长。
SM-2 和 SM-5 这两种算法都忽略了 可提取性 这一维度。理论上,如果这两种算法都能完美运作,我们可以假设它们的目标是 R=0.9。而正如在 SuperMemo 中可以测量到的那样,这两种算法在这方面都未能成功,因为它们并不了解相应的 遗忘曲线。它们根本没有收集遗忘曲线数据。这一函数直到 1991 年才在 SM-6 算法 中被引入。
然而,如果我们假设 1985 年 和 1987 年 的启发式方法都是完美的猜测,那么理论上,该算法可以使用 SInc=F(C,S),并将 R 固定为 90%。
由于 SM-2 对 稳定性增长 和条目 复杂度 使用了同一个数值—— EF,因此对于 SM-2 而言,SInc=f(C,S) 这一方程被表示为 EF=f'(EF,interval),而通过数据很容易证明 f<>f’。令人惊讶的是,SM-2 所使用的启发式方法之所以能够奏效,恰恰是因为它把 EF 与条目复杂度之间的实际联系解耦了。数据显示 SInc 会随着 S 的增加而不断减小,这意味着按照定义,在 SM-2 算法中,如果 EF 要代表条目复杂度,那么所有条目都必须在每次复习后复杂度增加。实际上,SM-2 算法使用的是 EF=f'(EF,interval),这可以转化为 SInc(n)=f(SInc(n-1),interval)。
让我们假设,正如 SM-2 算法的用户所声称的那样,EF=f(EF,interval) 这个启发式方法是一个绝佳的猜测。设 SM-5 算法中的 SInc 由 O-因子表示,那么我们就可以把 SInc=f(C,S) 表示为 OF=f(EF,interval)。
在 SM-2 算法中,OF 是恒定的,等于 EF;而在 SM-5 算法中,OF 具有自适应能力,可以根据算法的表现进行调整。显然,通过降低 OF 矩阵条目来惩罚表现不佳,通过提高 OF 条目来奖励表现良好,这种做法要优于让 OF 保持恒定不变。
有趣的是,尽管 SM-2 算法的支持者声称它表现出色,神经网络版 SuperMemo 的支持者却一直指责代数算法缺乏自适应能力。实际上, SM-17 算法 的自适应能力是迄今为止最强的,因为它基于最精确的记忆模型。
可以想象,SM-2 中使用的启发式方法本可以足够精确,以至于 OF=f(EF,interval) 的最初猜测无需任何修正。然而,实际应用表明,OF 矩阵会迅速演化,并收敛到 Wozniak、Gorzelańczyk(1994) 所描述的数值上,这些数值与硬编码在 SM-2 算法 中的假设有着实质性的差异。
小结:
- 今天:SInc=f(C,S,R),3 个变量,f 具有自适应能力
- sm5:SInc=f(C,S,0.9),2 个变量,f 具有自适应能力
- sm2:SInc=f(SInc,S,0.9) —— 1 个变量,f 是固定的
收敛性
SM-5 算法展现出快速的收敛性,那些一开始使用单一值 OF 矩阵 的用户很快就证明了这一点。这与 SM-4 算法形成了鲜明的对比。
存档提示: 为什么使用原文存档?
3.6. 改进预设的最优因子矩阵
应用于 OF 矩阵变换的优化程序表现出令人满意的效率,使 OF 条目能够快速收敛到其最终值。
然而,在所考察的这段时间内(1989 年 10 月 17 日至 1990 年 5 月 23 日),似乎只有那些修正-验证周期较短(少于 3-4 个月)的最优因子才达到了各自的平衡值。
还需要再过几年,才能就 OF 矩阵的最终形态得出更可靠的结论。在分析使用了 7 个月的 OF 矩阵后,最有趣的一点是:当 E-因子为 2.5 时,第一个复习间隔应长达 5 天,而当 E-因子为 1.3 时,甚至应长达 8 天!对于第二个间隔,相应的数值分别约为 3 周和 2 周。
新获得的最优间隔函数可以表述如下:
I(1)=8-(EF-1.3)/(2.5-1.3)*3
I(2)=13+(EF-1.3)/(2.5-1.3)*8
当 i>2 时 I(i)=I(i-1)*(EF-0.1)
其中:
- I(i) —— 第 i 次复习后的间隔(单位:天)
- EF —— 所考虑条目的 E-因子。
为了加快优化过程,应使用这个新函数来确定 OF 矩阵的初始状态(SM-5 算法的第 3 步)。除第一个间隔外,这个新函数与 SM-0 到 SM-5 各版本算法所使用的函数并无显著差异。这一事实或许可以归因于优化程序本身效率不足,毕竟这些程序终究受到了采用预设 OF 矩阵这一做法的先天影响。为了确认这并非事实的全部,我请三位同事使用了采用单一值 OF 矩阵的 SuperMemo 5.3 实验版本(其中两个实验的所有条目均为 1.5,另一个实验的所有条目均为 2.0)。尽管这些实验数据库只使用了 2-4 个月,但 OF 矩阵似乎正在缓慢收敛到使用预设 OF 矩阵所得到的形态。然而,预设的 OF 矩阵继承了 E-因子与相应 E-因子类别中 OF 条目数值之间的人为相关性(即当 n>3 时,OF(n,EF) 的值接近 EF)。这种现象并不出现在单一值矩阵中,后者往往会让 OF 矩阵更贴近算法中一些人为设定元素所提出的要求,例如 E-因子的初始值(始终为 2.5)、复习后修正 E-因子的函数等。
矩阵平滑
Anki 作者提出的 部分批评,可能是因为没有采用矩阵平滑——这是该算法的一个重要组成部分,并且至今仍在 SM-17 算法 中使用。
存档提示: 为什么使用原文存档?
3.7. 最优因子矩阵中变化的传播
注意到前面提到的 OF 矩阵条目之间关系的规律性之后,我决定通过在整个矩阵中传播修正来加快优化过程。如果某个最优因子增大或减小,那么我们就可以推断,对应更高复习次数的 OF 因子也应相应增大或减小。
这可以从关系式 OF(i,EF)=OF(i+1,EF) 推出,该关系式对所有 E-因子 及 i>2 的情况大致成立。同样地,如果我们记得当 i>2 时有 OF(i,EF’)=OF(i,EF )*EF’/EF (特别是当 EF’ 和 EF 足够接近时),我们也可以考虑因子的合理变化。我只在尚未经复习反馈修正过的 OF 矩阵部分使用这种变化传播方法。这一方法在前一段提到的 SuperMemo 实验版本中使用单一值 OF 矩阵的情况下,被证明尤其成功。
所提出的传播方案可以总结如下:
- 在执行完 SM-5 算法的第 7 步之后,找出 OF 矩阵中所有尚未在复习过程中被修正过的相邻条目,即尚未进入修正-验证周期的条目。这里所说的“相邻条目”,是指复习次数 +/- 1、E-因子类别 +/- 1(即 E-因子 +/- 0.1)所对应的条目。
- 只要以下关系中有一项不成立,就修正相邻条目:
- 当 i>2 时,对所有 EF 均有 OF(i,EF)=OF(i+1,EF)
- 当 i>2 时,OF(i,EF’)=OF(i,EF )*EF’/EF
- 当 i=1 时,OF(i,EF’)=OF(i,EF )
- 对于第 2 步中修正过的所有条目,重复整个流程,找出它们尚未修正的相邻条目。
如果记得最优间隔函数依赖于以下这类参数,就会发现变化的传播似乎是不可避免的:
- 学生的能力
- 学生的自我评估习惯(回答质量是根据学生的主观判断给出的)
- 已记忆知识的性质等。
因此,不可能提供一个理想的、预先确定的OF矩阵,来省去修正-验证过程的使用,在较小程度上也无法省去传播方案。
间隔的随机分散
Algorithm SM-5的关键改进之一是间隔的随机分散。一方面,它极大地加快了优化过程;另一方面,它给几乎所有后续版本SuperMemo的用户带来了不小的困惑:”为什么同样的项目、同样的评分,每次得到的间隔却不一样?”细微的偏差其实弥足珍贵。当”裸版” Algorithm SM-17 在SuperMemo 17早期版本中发布时,这一点暴露无遗。可以看到,那些收藏中积累了大量 顽固记忆项 的用户很容易陷入”局部最小值”,再也走不出来。随机分散机制后来被恢复,虽然延迟了一段时间。这段”裸奔”期是必要的,为了能够准确观察算法的表现,尤其是像我自己这样历经数十年的学习过程。
存档提醒: 为什么要使用原文存档?
3.5. 最佳间隔的随机分散
为了进一步改进优化过程,我们引入了一种表面上似乎与最佳复习间隔原则相矛盾的机制。让我们重新审视Algorithm SM-5的一个重大缺陷:对最佳因子的修正,只有在满足以下条件后才能验证其正确性:
- 修正后的因子被用于计算复习间隔
- 计算出的间隔到期后进行一次复习,得到的回答质量可能表明需要增加或减少该最佳因子
这意味着,即使用于修正某个最佳因子的实例数量再多,在新计算出的值被用于确定新的间隔并在间隔到期后得到验证之前,该因子也不会发生显著变化。
在将修正后的最佳因子应用于复习所需的这段时间之后对其进行验证的过程,后文将称为”修正-验证周期”。复习次数越多,修正-验证周期就越长,优化过程的减速也就越明显。
为了说明修正受限的问题,让我们参考图 3.4中的计算。
可以很容易得出结论:当变量INTERVAL_USED大于20时,若QUALITY等于5,则MOD5的值将等于1.05。由于QUALITY=5,MODIFIER将等于MOD5,即1.05。因此,新提议的最佳因子值(NEW_OF)只能比之前的值高5%(NEW_OF:=USED_OF*MODIFIER)。也就是说,除非USED_OF增大——这等同于将修正后的最佳因子应用于复习间隔的计算——否则修正后的最佳因子永远不会超出5%这一限制。
考虑到这些事实,我决定在某些情况下让复习间隔与最佳间隔有所不同,以绕开修正-验证周期所带来的限制。
我将这种对最佳间隔进行随机修正的过程称为”分散”。
如果允许一小部分间隔比OF矩阵所应得出的值更短或更长,那么这些偏离的间隔就能让最佳因子的变化突破图 3.4 所示机制的限制,从而加速最佳因子的调整——无论是下降还是上升。换句话说,当一个最佳因子的值与理想值相差甚远时,由偏离间隔引起的偶然变化不会被大量标准复习所抹平,因为回答质量往往会促进这种变化,而不是抵消它。
使用围绕最佳值分布的间隔,还有另一个好处,即消除了SuperMemo用户经常抱怨的一个问题——复习安排的”扎堆”现象。所谓复习安排的扎堆,是指复习任务集中堆积在某些天,而相邻的日子却相对轻松。造成这种情况的原因是,学生往往在一次学习中记忆大量项目,这些项目在接下来的几个月里会紧紧地”粘”在一起,只能依靠各自的E-Factor才能逐渐分开。
围绕最佳值对间隔进行分散,消除了扎堆问题。现在让我们看看最新版SuperMemo软件用于在最佳值附近分散间隔的公式。与(根据OF矩阵)被认为是最佳值略有不同的复习间隔,将被称为”近最佳间隔”。近最佳间隔将按以下公式计算:
NOI=PI+(OI-PI)*(1+m)
其中:
- NOI——近最佳间隔
- PI——上一次使用的间隔
- OI——根据OF矩阵计算出的最佳间隔(参见Algorithm SM-5)
- m——属于<-0.5,0.5>范围内的一个数(见下文)
或者使用OF值表示为:
NOI=PI*(1+(OF-1)*(1+m))
修正值m决定了偏离最佳间隔的程度(当m=-0.5或m=0.5时偏离最大,当m=0时完全不偏离)。
为了在加速优化与消除扎堆现象(二者都需要间隔高度分散)和高记忆保持率(需要严格应用最佳间隔)之间找到折中方案,修正值m在大多数情况下应取接近于零的值。
以下公式用于确定修正值m的分布函数:
- 选取范围在<0,0.5>内的修正值的概率应等于0.5:0到0.5的f(x)dx积分=0.5
- 假设选取m=0的概率是选取m=0.5的概率的一百倍:f(0)/f(0.5)=100
- 假设概率密度函数具有负指数形式,参数a和b由前两个方程求得:f=a*exp(-b*x)
以上公式得出,当m以百分数表示时,a=0.04652,b=0.09210。
由分布函数
-m到m的a*exp(-b*abs(x))dx积分 = P(P表示概率)
可以得出修正值m的值(适用于m>=0的情况):
m=-ln(1-b/a*P)/b
因此,计算近最佳间隔的最终步骤如下:
a:=0.047;
b:=0.092;
p:=random-0.5;
m:=-1/b*ln(1-b/a*abs(p));
m:=m*sgn(p);
NOI:=PI*(1+(OF-1)*(100+m)/100);
其中:
- random——一个在<0,1)范围内按均匀概率分布产生数值的函数
- NOI——近最佳间隔
- PI——先前使用的间隔
- OF——OF矩阵中的相应条目
1990年:记忆的通用公式
最佳复习与间歇复习的对比
到1990年,我已经确信无疑:我手中握有一项重大发现。我破解了 遗忘 的难题,知道了简单记忆的最佳复习时机。一旦获得了在我的 硕士论文 中描述这些发现的许可,我对发现的渴望便愈发强烈。我希望能找到一个适用于长期记忆的通用公式——一个能帮助我追踪任何接触或提取模式下记忆行为的公式。
我手上已经有一批数据,或许能帮我找到这个公式。在 1985年 发现最佳复习间隔之前,我一直使用成页的问题来复习知识。这种复习是混乱无序的,取决于是否有时间、是否有需要,或者当时的心情。我把这种方式称为” 间歇学习“。我拥有每一页、每一次复习的回忆数据。这正是理想的数据类型,因为它不带有SuperMemo那种周期性,恰恰是解决记忆问题所需要的那种数据。然而,这些数据当时只存在于纸面上。
1990年春天,我请姐姐帮忙打字。不,我没有一个乐意做这种事的妹妹。我姐姐比我大17岁。当时我对她的时间有些不够体谅,利用她对我的爱,让她做这种苦力活。我为此感到愧疚。她两年后就去世了。我再也没有机会回报她对间隔重复理论所做的贡献——而她甚至从来没有机会理解这个理论。从1990年5月1日起,她利用我不在电脑前的时间,把数据从纸面誊录到电脑里。她花了许多天慢慢打字。这一切都值得。
间歇学习模型
整个1990年夏天,我没有专心写硕士论文,而是投入到” 间歇学习模型“的研究中。我常常一连工作10个小时,或者忙到早上7点空手而归才去睡觉,或者让电脑整夜运算数字。
坚持和不断摸索是有回报的。只有年轻人才能负担得起这种代价,也应该被给予这样的空间和自由。尽管我已经28岁,家里人还是相当宽容地容忍着我,就像容忍一个还没长大的少年。我住在姐姐的公寓里,靠她的善意”蹭吃蹭住”。长时间守在电脑前被解释为” 在写硕士论文“。但事实是,没有人要求我这么做,没有人逼我这么做,这甚至也没有让 SuperMemo 有多大进展。这纯粹是出于科学上的好奇心。我只是想知道记忆到底是如何运作的。
我手头有几十页的题目及其复习记录。我尝试预测”每页的记忆遗漏数”。我使用 均方根偏差 来预测遗漏情况(下文记为 Dev
)。到1990年7月10日星期二,我把Dev降到了<3,感觉问题几乎”解决”了。7月12日,我又把它提高到Dev=2.877(顺便说一句,我的论文里写的是2.887241)。然而,到1990年8月27日,我却宣布这个问题无法解决。那天的笔记是这样写的:
个人轶事。 为什么要使用轶事?
1990年8月27日: 我解决了 间歇学习的问题—— 证明了它是无法解决的!单一参数无法描述与整页项目相关的记忆强度。这表明 对于 E-factor 较低的项目,根本不存在 最佳间隔 !
1990年8月30日,我在硕士论文中描述了这个模型。这部分文字长达15页,读起来并不轻松。我敢说从来没有人有耐心把它全部读完。事实上,当我的硕士论文在上世纪90年代末以节选形式上线时,这一章甚至都没有被发布到 supermemo.com 上。
然而,基于这个模型得出的结论,在随后的几十年里对我关于记忆的思考产生了深远的影响。这个模型背后的整体思路,其实与后来用于开发 Algorithm SM-17 (2014-2016年)所采用的优化方法颇为相似。
当我宣布这个问题无法解决时,我的意思是我无法准确描述”困难页面”的记忆情况,因为不同质的材料需要更复杂的模型。然而,1990年8月31日的笔记听起来要乐观得多:
个人轶事。 为什么要使用轶事?
1990年8月31日: 不停地研究间歇学习模型。到了晚上,电脑还是没能让我更接近答案。不过,我想到了一个绝妙的主意:用IL模型的破纪录函数来计算最佳间隔。当我在屏幕上看到结果时,简直不敢相信自己的[bleep]眼睛。这些间隔和我 1985年发现 的、当时试图构建 SuperMemo 方法时得到的间隔完全一致。我高兴得像条摇着两条尾巴的狗一样,在屋子里蹦来蹦去。所以我可以说,我真的解决了IL问题(对比1990年8月27日的记录)。但这个成功还不是我今天要发现的全部。我还发现:
- 最佳因子 会随着连续间隔的增加而减小(此前我一直有这种直觉),
- 当 遗忘指数 为10%时, 记忆保持率 为94%(与EVF 数据库 中的数值一致)
- 记忆保持率 与 遗忘指数 呈线性关系 [comment 2018: in a small range for heterogeneous material] (这一点在我1月份进行的模拟实验中无法计算出来)
- 该模型表明, 遗忘指数 理想值为5%-10%(工作量与记忆保持率之间的权衡)
- 当间隔为最佳间隔的两倍时, 记忆强度 增长得最多!!!
- 当 遗忘指数 为20%时, 记忆强度 增长得最多。
[…] 我的公式只有在间隔不比之前的记忆强度短太多时才有效。
过去(1990年)与现在(2018年)的对比
这一章末尾的结论以及推导过程本身,都让我想起2005年我在寻找 记忆稳定性 增长的通用公式时所用的方法,以及2014年 Algorithm SM-17 基于更精确得多的记忆数学描述时所用的方法。和最新的SuperMemo算法一样,这个模型也能够针对任意复习安排计算出 记忆保持率。当然,由于所依据的数据质量较差,它的精确度远远不及现在。而且, SuperMemo 17 如今能实时完成的运算,在1990年却需要好几个小时的计算。
我硕士论文中这部分看似枯燥的老旧内容,如今却显得愈发重要。我敢说,当年那项工作与25年后才出现的 Algorithm SM-17 之间,唯一的差距就是数据质量不够好。下面我引用这段文字,只做了一些细微的符号和文风上的改进,并省去了关于遗忘曲线的那一章——由于计算中使用的材料高度不均质,那一章的内容是有误的:
存档提醒: 为什么要使用原文存档?
本段文字选自:” Optimization of learning “,作者 Piotr Wozniak (1990年)
间歇学习模型
SuperMemo模型为计算在时间最优学习过程中应当分隔各次复习的 最佳间隔 提供了基础。
然而,如果复习是按不规律的间隔进行的,该模型就无法预测记忆变量的变化。
下面,我将尝试对SuperMemo模型进行扩展,以便它也能用于描述间歇学习的过程。
在 第3章 中,我提到过在SM-0算法出现之前,我学习英语和生物学所采用的方式。
那段时期(1982-1984年)收集的数据,为构建间歇学习模型提供了极好的基础。按照 最小信息原则 编写的 项目 (通常是词对的形式)被归入若干页面,接受不规律的复习过程。这些以计算机可读形式保存的数据,包含71页的复习记录,此外还有80页在SM-0计划安排下进行复习的类似页面。
与Algorithm SM-17的相似之处
请注意,这个问题的表述方式,让人想起 Algorithm SM-17 中用于计算 稳定性增长矩阵(SInc[]) 的过程。 记忆稳定性 经过重新标定,以便可以将其理解为一种间隔。甚至连符号都很相似:S与偏差D,以及用页面遗漏数代替R。
我一向喜欢摆弄各种优化算法。在 SuperMemo 17 中,你现在仍然可以直观地看到该算法运行曲面拟合优化的过程(见 图片)。用12个变量来做这件事或许效率不算高,但只要能得到有趣的结果、为理解记忆的运作方式带来新的启发,我从不在意方法本身。
对于熟悉 Algorithm SM-17 的读者,我们在下文中调整了符号表示。此外,像In和Ln这样的印刷符号很容易被误读为对数符号。
变更列表:
- Ln -> Laps n
- In -> Int n
- Dn -> Dev n
- R -> RepNo
间歇学习问题的表述
存档提醒: 为什么要使用原文存档?
11.1. 间歇学习问题的表述
- 共有161页。
- 每页大约包含40个项目。
- 对于每一页,其学习过程的描述(在实验性复习过程中收集)具有以下形式:
- Int i ——第i次复习之前所使用的复习间隔(范围为1到800),
- Laps i ——第i次复习中记忆遗漏的次数(范围为0到40),
- n——复习总次数(范围为3到20)。
- 求出由以下公式描述的函数f和g:
- S(n)——第n次复习后与记忆强度相对应的任意变量(参见 第10章),
- Int n ——第n次复习之前使用的间隔;取自间歇学习过程中收集的数据,
- Laps n ——第n次复习中记忆遗漏的次数;取自间歇学习过程中收集的数据,
- Laps(n)——对第n次复习中记忆遗漏次数的估计值(应与Laps n 相对应)
- S1——一个常数,
- Dev——描述函数f和g所得出的值与间歇学习过程中收集的值之间差异的函数(它反映了实验数据与理论预测数据之间的差异)
- RepNo——所有页面上记录的复习总次数
- Dev i ——函数Dev中描述第i页偏差的分量,
- Laps(j)——使用函数f和g针对第i页第j次复习计算出的遗漏次数,
- Laps j ——第i页第j次复习的记忆遗漏次数;取自间歇学习过程中收集的数据,
- sqrt(x)——x的平方根,
- sqr(x)——x的平方。
请注意,只有当函数f和g足够简单、由有限数量的参数所定义时(例如a*ln()+b或a*exp()+b等),它们才能为有价值的生物学思考提供基础。否则,总可以构造出一个庞大而毫无意义的公式,让Dev自动归零。
间歇学习问题的解答
存档提醒: 为什么要使用原文存档?
11.2. 间歇学习问题的解答
为寻找能使Dev值最小化的函数f和g,我采用了Wozniak(1988b)中描述的数值最小化程序[ A new algorithm for finding local maxima of a function within the feasible region. Credit paper ]。
搜索过程中使用的示例函数可能如下所示:
S(1)=x[1]
S(n)=x[2]*Int n*exp(-Laps n*x[3])+x[4])
Laps(n)=x[5]*(1-exp(-Int n/S(n-1)))
其中:
- x[i] ——由最小化过程计算得出的变量,
- S(n)、Laps(n)、Laps n 和 Int n ——定义见 11.1。
请注意,描述 S(n) 的函数 f 并不以 S(n-1) 作为其参数(问题的表述允许但并不要求根据先前的记忆强度来计算新的记忆强度)。
为了保持简洁并节省时间,我将最小化过程中使用的变量数量限制在 12 个以内。
我测试了大量根据关于记忆的直观规律构建的数学函数(例如,随着时间推移,遗忘次数会增加)。
这些函数包括指数函数、对数函数、幂函数、双曲函数、S 形函数、钟形函数、多项式函数,以及它们之间合理的组合。
在大多数情况下,最小化过程能将 Dev 值降低到 3 以下,而函数 f 和 g 无论其性质如何都呈现出相似的形状。
在使用少于 12 个变量的情况下,得到的最低 Dev 值为 2.887241。
函数 f 和 g 如下:
constant S(1)=0.2104031;
function Sn(Intn,Lapsn,S(n-1));
begin
S(n):=0.4584914*(Intn+1.47)*exp(-0.1549229*Lapsn-0.5854939)+0.35;
if Lapsn=0 then
if S(n-1)>In then
S(n):=S(n-1)*0.724994
else
S(n):=Intn*1.1428571;
end;
function Lapsn(Intn,S(n-1));
var quot;
begin
quot:=(Intn-0.16)/(S(n-1)-0.02)+1.652668;
Lapsn:=-0.0005408*quot*quot+0.2196902*quot+0.311335;
end;在不显著改变 Dev 值的前提下,这些函数可以轻松转换为以下形式:
S(1)=1
对于 Int n>S(n-1):S(n)=1.5*Int n*exp(-0.15*Laps n)+1
Laps(n)=Int n/S(n-1)
请注意:
- 只要不明显影响 Dev 的值,函数中的某些元素就被舍弃或四舍五入,
- 记忆强度被重新缩放,以便将其解释为一个时间间隔——在该间隔内, 遗忘次数 等于 1, 遗忘指数 等于 2.5%(因为每页有 40 个条目,1/40=2.5%),
- 记忆强度公式只有在 Int n 不明显小于 S(n-1) 时才成立。这是因为当 遗忘次数 较低时,计算 S(n) 必须用到 S(n-1) 的值,例如对于 Int n<=S(n-1):S(n)=S(n-1)*(1+0.5/(1-exp(S(n-1))*(1-exp(-Int n)))
函数 g 有意不涉及 S(n-1),以避免在连续多次重复计算中出现误差的递归累积(请注意,所使用的公式并不考虑该过程的历史记录),
- 这些公式不能用来描述任何间隔时间远远超过最佳间隔的过程。这是因为当 Int n 趋向于无穷大时,Laps(n) 的值会超过 100%,
- 这些公式描述的是 难度系数(E-Factor) 分布大致均匀的集合条目的学习过程。因此,它不能被普遍应用于难度各异的条目。
就目前而言,上述公式是对间歇性学习过程的最佳描述,此后将被称为间歇性学习模型(简称 IL 模型)。
基于间歇性学习模型的模拟
有了上面得到的公式,我便可以运行一整套模拟实验,帮助我回答关于记忆在各种情况下表现的许多假设性问题。这些模拟在此后的多年里塑造了 SuperMemo 的发展方向。尤其是工作量与 记忆留存率 之间的权衡,在自 1991 年 SuperMemo 6 以来的学习优化中发挥了重要作用。直到今天,指导学习的标准依然是 遗忘指数 (或 可提取性),而不是那个看似更直观自然的、在较低 回忆 水平下可能出现的 记忆稳定性提升 标准。下文中,设定的记忆 遗忘次数 水平起到了 遗忘指数 的作用。
存档提示: 为什么要使用原始存档资料?
11.4. 间歇性学习模型的验证
为了验证间歇性学习模型与 SuperMemo 理论的一致性,我们来尝试计算应当分隔各次重复的最佳间隔。
最佳间隔将由 遗忘次数 达到所选定值 Laps o 的那一刻来确定。
该算法的步骤如下:
- i:=1
- S(i):=1
- 求使 Laps(i+1) 等于 Laps o 的 Int(i+1)。使用以下公式:
Int(n)=Laps o*S(n-1)(取自 IL 模型)
其中:Int(n) 表示第 n-1 个最佳间隔。 - i:=i+1
- S(i):=1.5*Int(i)*exp(-0.15*Laps o)+1(取自 IL 模型)
- 转到步骤 3
如果 Laps o 等于 2.5( 遗忘指数 为 6.25%),并采用间歇性学习模型的精确变体,则可以观察到惊人的对应关系(可与第 16 页、 第 3.1 章 中呈现的实验对比):
- Rep——重复次数编号
- Interval——该次重复之前的最佳间隔,根据 IL 模型在 Laps o=2.5 的条件下确定,
- Factor——最佳系数,等于该最佳间隔与前一个最佳间隔之比,
- SM-0——基于导出 SM-0 算法的实验所计算出的最佳间隔
| Rep | Interval | Factor | SM-0 |
|---|---|---|---|
| 2 | 1.8 | 1 | |
| 3 | 7.8 | 4.36 | 7 |
| 4 | 16.8 | 2.15 | 16 |
| 5 | 30.4 | 1.80 | 35 |
| 6 | 50.4 | 1.66 | |
| 7 | 80.2 | 1.59 | |
| 8 | 124 | 1.55 | |
| 9 | 190 | 1.53 | |
| 10 | 288 | 1.52 | |
| 11 | 436 | 1.51 | |
| 12 | 654 | 1.50 | |
| 13 | 981 | 1.50 | |
| 14 | 1462 | 1.49 | |
| 15 | 2179 | 1.49 | |
| 16 | 3247 | 1.49 | |
| 17 | 4838 | 1.49 | |
| 18 | 7209 | 1.49 |
显然,这种精确的对应关系在某种程度上是一种巧合,因为导出 SM-0 算法的那次实验并没有那么高的敏感度。
值得注意的是, 最佳系数 呈逐渐递减的趋势! 这一事实似乎印证了近期基于 SM-5 算法所用 最佳系数矩阵 分析所得出的观察结果。
如果 Laps o 等于 4( 遗忘指数 为 10%,与 SM-5 算法中的设定相同),则 最佳系数 的序列与 SM-5 算法中 OF 矩阵 的某一列非常相似。而且知识留存率也几乎与 SM-5 数据库 中的结果完美吻合。
| Rep | Interval | Retention | Factor |
|---|---|---|---|
| 2 | 3 | 93.21678 | |
| 3 | 16 | 93.80946 | 4.89 |
| 4 | 43 | 93.97184 | 2.74 |
| 5 | 102 | 94.04083 | 2.39 |
| 6 | 232 | 94.06886 | 2.27 |
| 7 | 517 | 94.08418 | 2.23 |
| 8 | 1138 | 94.09256 | 2.20 |
| 9 | 2502 | 94.09737 | 2.20 |
| 10 | 5481 | 94.09967 | 2.19 |
记忆保持率 的数值,是通过对最优过程中每一天所计算出的数值求平均而得到的:
R=(R(1)+R(2)+…+R(n))/n
R(d)=100-2.5*Laps(d-dlr)
其中:
- R——平均记忆保持率
- R(d)——过程中第d天的记忆保持率
- Laps(Int)——间隔I之后预期的遗忘次数
- dlr——安排最后一次复习的那一天
工作量与记忆保持率的权衡
尽管异质材料带来了一些误差,但关于 遗忘指数 对学习所需投入时间的影响,仍可以得出可靠的结论。这些观察结果经受住了时间的考验:
存档提示: 为什么使用原文存档?
本文节选自:” 学习优化 “,作者: Piotr Wozniak (1990年)
通过比较间歇学习模型计算出的记忆保持率与工作量数据,可以得出一些非常有趣的结论:
- 指数 ——遗忘指数(Laps o*2.5),用于确定使用IL模型安排的时间最优学习过程中的最佳间隔
- 记忆保持率 ——使用给定的 遗忘指数 时获得的总体记忆保持率(在10,000天后计算得出)
- 重复次数——使用给定的 遗忘指数 时,在该过程前10,000天内安排的复习次数,
- 因子 ——最优因子的渐近值(取自该过程第10,000天的数值)
| 指数 | 记忆保持率 | 重复次数 | 因子 |
|---|---|---|---|
| 2.5 | 97.76 | 每2天 | 1.0000 |
| 4.5 | 96.88 | 65 | 1.0300 |
| 5.0 | 96.64 | 30 | 1.1600 |
| 5.5 | 96.39 | 22 | 1.3000 |
| 6.25 | 96.01 | 17 | 1.4900 |
| 7.5 | 95.37 | 13 | 1.7700 |
| 10.0 | 94.10 | 10 | 2.1900 |
| 12.5 | 92.78 | 9 | 2.4700 |
图11.2表明,用于确定最佳间隔的 遗忘指数 应落在5%到10%的范围内。

图11.2 工作量与记忆保持率的权衡: 一方面,如果 遗忘指数 低于5%,工作量会急剧增加,却不会明显提升记忆保持率。另一方面,当 遗忘指数 超过10%时,工作量几乎不再变化,而记忆保持率则持续下降。显然,工作量与记忆保持率之间的权衡,直接对应于获取速率与记忆保持率之间的折中。通过将可用时间增加X倍(即将工作量减少X倍),就可以将获取速率提高X倍(参见 第5章)。请注意,在这个模型中, 遗忘指数 与 记忆保持率 之间的关系几乎是线性的。 (来源: 学习优化: 间歇学习模型 , Piotr Wozniak,1990年)
另一个重要的观察结果来自对 遗忘指数 的计算,该指数对应的记忆强度增长最大。
根据间歇学习模型可以推出
S(n)=1.5*Laps(n)*S(n-1)*exp(-0.15*Laps(n))+1
对变量Laps(n)求导后,我们得到:
S'(n)=1.5*S(n-1)*exp(-0.15*Laps(n))*(1-0.15*Laps(n))
最后,令其等于零,我们得到:
Laps(n)=7.8
这对应于 遗忘指数 等于20%的情况!这样的遗忘指数意味着间隔比指数等于10%(如SM-5算法中所用)时确定的最佳间隔长2倍。然而,必须记住,与工作量进行权衡的唯一因素是知识记忆保持率,而不是记忆强度。因此,上述发现并不会推翻SM-5算法的有效性。
结论:间歇学习模型
本章末尾得出的最终结论经受住了三十年的考验。唯一不准确的是关于 遗忘曲线 非指数形状的说法。由于整个模型基于异质数据, 遗忘的指数性质 当时未能被揭示出来。
存档提示: 为什么使用原文存档?
本文节选自:” 学习优化 “,作者: Piotr Wozniak (1990年)
阶段性总结
- 间歇学习模型的构建,使得在不同复习计划下估算知识记忆保持率成为可能
- 该模型强烈表明 遗忘曲线 不是指数型的[ 错误:参见 遗忘的指数性质]
- 该模型与实验数据相当吻合
- 该模型以惊人的准确度,逼近了SuperMemo模型所隐含的最佳间隔和知识记忆保持率
- 该模型表明,最优因子在连续复习中会递减,并逐渐逼近最终值
- 该模型表明,用于时间最优学习的 遗忘指数 的理想值应落在5%到10%之间
- 该模型表明遗忘指数与知识记忆保持率之间几乎呈线性关系
- 该模型表明,当间隔大约是 SuperMemo方法 所用间隔的2倍时,记忆强度的增长最大。这相当于遗忘指数等于20%
1991年:运用遗忘曲线
SuperMemo World的艰难诞生(1991年)
1991年是 SuperMemo 诞生以来最重要的一年。这是一个充满重大决定、压力、戏剧性变化、发现与艰苦工作的年份。年初时,SuperMemo有三位最坚定的信徒: Biedalak、 Murakowski 和我自己。我们三人当时都处于人生的同一阶段:正从大学里那种无忧无虑的岁月,过渡到独立成年后的不确定之中。我们默认都梦想着在美国从事重大科学研究:Biedalak梦想着人工智能,Murakowski梦想着量子物理,而我则想要破解分子记忆的秘密。回想起来,来自东欧集团、成绩单优异、考试成绩出色、推荐信过硬的研究生,在美国还是相当受欢迎的。但如果他们要求全额资助,事情就会变得复杂。我一分钱都没有。而且,急切的东欧人常常被当作勤勉的劳动力对待,他们对自己项目和伟大想法的热忱,反倒可能不太受欢迎。我永远也不会知道答案。我们三位信徒对SuperMemo的未来各有不同的愿景。
1991年1月3日,我开始为SuperMemo 6实现新的间隔重复算法。同一天,Murakowski前往伦敦,一边追求他的求学梦想,一边试图出售SuperMemo 2。他不会通过分销渠道或商店来销售,而是需要一个一个地去找人,向他们解释这个程序的优点,希望能借此赚到一点钱,让希望继续燃烧。
同一时期,我和Biedalak经常一起进行10公里跑步,中间会结合冬泳,回家路上还会进行头脑风暴。我们大多谈论的是去美国留学以及出售SuperMemo的事。渐渐地,创办自己公司的想法开始越来越频繁地出现。
我带着一些将永远改变SuperMemo的想法,开始了新间隔重复算法的研究。SuperMemo 6所使用的SM-6算法是一次突破,将在接下来的25年里持续推动其发展。它会以自动化的方式,重新运用 1985年 催生间隔重复的那个简单实验程序。它会收集表现数据,并选择最佳的复习时间:绘制出用户的 遗忘曲线。这也意味着,用户将能够为每一个知识条目决定可接受的遗忘概率(即记忆保持率与工作量权衡的最优水平)。
当时,我仍然受限于360 KB的磁盘。因此,SuperMemo仍无法在大规模上保存能够完全复现 1985年 那种做法所需的全部复习历史。不过,在1990年1月6日,我有了一个简单的想法:我可以只针对不同难度和 稳定性 的条目类别,收集遗忘曲线数据。我不需要完整记录,只需更新一个近似值,表示某个类别中在给定时间有多少条目仍保留在记忆中(即处于给定的 可提取性 水平)。这个想法一直延续至今,仍是SuperMemo的核心之一。即使今天已经拥有完整的复习历史记录,SuperMemo仍能即时知道某个类别条目的预期可提取性。
在人生的十字路口,我终于摆脱了学校的束缚。数以百万计的青少年和年轻人在生活中都会面对一种强烈的情绪:从名为”学生”的奴役状态,痛苦地转变为成为一个”失业的成年人”的自由。如果从”好学生”变成”28岁失业、还跟妈妈住在一起的人”,这种心理冲击会更加剧烈。就像开关一样:整个世界似乎瞬间从欢欣的支持,变成了带着怜悯的愁容与责难。
我在自由与不确定交织的氛围中继续学习,并为SuperMemo构思新点子。对我来说,不确定性本身就是一种动力。然而,1991年2月12日,我得知我母亲被诊断出患有晚期癌症。这在自由与不确定的混合情绪之上,又添上了一层阴郁。而对我来说,阴郁同样也能成为一种动力。我把关于癌症的学习量提高到原来的三倍,仿佛希望能自己找出某种神奇的疗法。这说明不理性的乐观,恰恰可能是保持高效、度过艰难时期的关键。通过更努力地工作,我可以驱散阴郁。高效的工作本身就是一种可靠的”抗抑郁药”。我拼命工作,没有给阴暗的念头留下任何空间。我很有信心,我一定能治好我妈妈!
顺带一提,在我妈妈被确诊的那一刻,我也在写一个程序,用来模拟记忆对环境做出反应时的最优行为——试图用数学方法证明,怎样才能让 记忆双成分模型 达到最优。确诊之后,我把这项工作从日程中砍掉,转去学习癌症知识。我从未完成那个程序,那个想法至今仍悬而未决,被其他项目一再挤到一边。
1991年3月6日,在一次与 Biedalak 一起跑步兼头脑风暴的日子里,有人随口提出了 SuperMemo World 这个名字。我们当时完全没有想到,四个月后它就会成为我们公司的名字,而这家公司如今已经存续了27年。
1991年3月12日,我在SuperMemo 6中用新算法做了第一次复习,当时我妈妈正躺在病床上,走向生命的尽头。一周后,她在睡梦中平静地离世,年仅70岁。在类似的情形下,常见的画面通常是家庭聚会、哀悼、葬礼,以及一整套源自宗教、我始终无法认同为理性的传统。相反,在妈妈去世9小时后,我就开始研究一种更好的方法,用于快速近似计算 OF矩阵。在这项工作中,我利用了自己曾为ZX Spectrum所做的工作成果:沿难度列采用线性回归,沿复习行采用负指数回归。多年以后,我发现幂函数回归对后者更为合适。只有四年后开发出的 SM-8算法 才真正充分利用了这些想法。不过,我提到这件事,主要是想说明努力工作和高效率,可以成为对抗阴郁与潜在抑郁的绝佳良方。那段时间我发现,情感创伤的影响会遵循一种昼夜节律曲线:我早上会拼命工作,但到了晚上,阴郁又会悄悄爬回我的脑海。睡眠则是一种解脱,也是最好的”抗抑郁药”。从那些早年的日子起,我就坚信睡眠和学习本身携带着解决抑郁问题的方案,只是我从未真正有机会去深入研究它。如果我自己多受一些苦,或许会更有帮助,但要么是我天生就有较好的心理韧性,要么更可能是,我在艰难时刻会本能地运用良好睡眠和高效工作这两个工具。自从 Sapolsky 把抑郁症称为”世界上最糟糕的疾病”以来,我就一直想找到一个预防抑郁症的公式。我感觉那应该是一个很简单的公式。也许,那种天真的、孩子般的乐观本身,就是答案的一部分?
1991年4月13日,我们决定将SuperMemo 2作为免费软件发布。我们希望这能让海外的潜在用户了解间隔重复的力量。不过,一开始,我们只能自己出钱,把装有免费SuperMemo的磁盘寄出去。直到1993年,我们才把SuperMemo上传到一个名为”Onkonet”的本地BBS上。又过了几年,我们才能把后续版本上传到Simtel和其他免费软件站点。这个免费软件的想法带来了一个有趣的副作用:到年底时,情况已经很清楚——人们会开始使用这个程序,然后又放弃它。这暗示了间隔重复本身存在的一个固有问题:因技能不足导致的动力不足,会造成很高的放弃率。我们还听说,有人试图把SuperMemo 2当作商业产品来出售。
1991年5月2日,我在SuperMemo 6中实现了设置所需 遗忘指数 的选项。1991年7月5日, SuperMemo World 正式诞生。我们最早的投资之一,就是一台带硬盘的PC,这终于帮我摆脱了缓慢的软盘时代。
1991年11月23日:SuperMemo被宣布为”Software for Europe”竞赛的决赛入围者。这拯救了 SuperMemo World。
商业化SuperMemo的缓慢起步
1991年7月5日,当我们与 Krzysztof Biedalak 一起创立 SuperMemo World 时,前景看起来一片光明,光明到我们都需要戴上墨镜。地球上遍布着聪明绝顶、都需要学习各种东西的人口,而这整个人群就是我们的市场。唯一的问题是,该如何说服所有这些聪明人:两个在铁幕后受教育的穷学生,能提供什么有价值的东西。我们当时无法借助互联网来完成这件事——SuperMemo的历史比互联网本身还要久。由于缺乏资金,我们也负担不起广告费用。1991年的波兰,根本没有风险投资文化。我们能做的,只是把最初几份SuperMemo装进文件夹,摆放在附近电脑商店的货架上。由于我们目标是称霸全球,我们甚至连一份波兰语的说明书都没有。结果换来的不是首批销售,而是一整个漫长、寂静、疑虑渐生的夏天。

图: 1991年, 我们 把首批DOS版SuperMemo 5送到了波兹南(波兰)的商店,装在贴有标签的粉色文件夹里。说明书没有波兰语翻译。令人惊讶的是, 我们 还是找到了几位买家。第一笔销售发生在1991年9月9日到11日之间的某个时候(Axe Prim电脑商店)
(根据原始文件夹与标签重建)
为什么第一份拷贝卖得这么难?我可以根据我们最早一位顾客的说法,还原出当时的情景——他确实去了商店,亲眼看到了公开展示的第一份SuperMemo。在摆满电脑程序的货架上,紧挨着微软那些光鲜的盒子,他注意到一个破旧的文件夹上写着诱人的字样:” 你的突破性速学软件 “。他拿起文件夹,翻开说明书,那是一堆用英语写的、复印质量很差的纸页。文字写得很动人,讲述了一个令人难以置信的故事:更快的学习速度、极佳的记忆保持率、全新的科学方法、极少的时间成本,等等——好得让人难以相信是真的。他并没有打算购买——这个套装相当贵(大约100美元,在1991年的波兰这可不是小数目)——不过,他还是找销售员问了问,SuperMemo背后到底是什么人。店主对SuperMemo相当了解,解释了一番,这个故事开始显得可信起来。这位顾客一直没有忘记这段经历。几个月后,他在当地某份期刊上又听到了SuperMemo的消息,于是成了最早的付费客户之一。他的注册凭证于1992年1月寄到,从他此后升级的记录来看,他与SuperMemo相伴了几十年,如今他的儿子也是常客之一。
然而,回到1991年夏天,我们当时没有任何销售,到了秋天,除我以外的所有人都开始产生严重的怀疑——不是怀疑SuperMemo本身,而是怀疑这项生意能否存活下去。
了解一下我们是如何相识的,可能会有帮助。我和 Biedalak 是从很久以前就认识的朋友。我曾和他的弟弟就读同一所学校,我们住得只相距200米,又恰好在大学里读同一年级的计算机科学。我说不清自己是怎么说服Biedalak相信SuperMemo很了不起的——我们本来就太熟了,他一直都在这个圈子里,这部分毫不费力。 Tomek Kuehn 是最早坚信SuperMemo的人之一。他也是一位出色的程序员、一个很棒的灵感来源,他一下子就领会了这个想法。他自己写过两个版本的SuperMemo:1988年为Atari 800写的,1989年为Atari ST写的。1989年1月,他甚至在一份名为Komputer的电脑期刊上打广告,卖出了10份SuperMemo 2——我估计他没能收回投入的钱。毕业之后,他已经拥有了自己的生意:一家电脑商店。这家商店也是最早向顾客展示SuperMemo的商店之一。他的合伙人兼朋友Marczello Georgiew也没怎么费力就被说服了。最后但同样重要的是,我是在1990年布达佩斯的GRE考试期间认识 Janusz Murakowski 的。他有着出色的数学头脑,可能是史上被SuperMemo说服得最快的人。在我们乘火车返回波兰的路上,我提到了SuperMemo,他立刻就被吸引住了。几天后,他就已经是SuperMemo 2的热情用户了(始于1990年6月13日)。在我们公司的说唱队歌里,我们唱道:” 我们就是卖SuperMemo的家伙“。要说服人们相信SuperMemo真的有效非常难,但团队里的这几个人一直都充满热情。
到1991年11月,那股热情开始消退。如果我们继续毫无成果地坚持下去,团队成员会依照各自投入和热情的程度逐渐流失。再过几个月,公司可能就会消亡。但SuperMemo本身不会消亡:我肯定会去寻找买家,或者以某种方式继续下去。我和这个产品的联系太深了,我自己也在使用它,所有的知识都投入到了我的数据库里。我也许会重新考虑去美国读博士的想法。就像1989年我能把在荷兰大学的工作和”业余时间”编程结合起来那样,我很可能会继续下去,直到出现某种突破,比如说在网络上的突破——也许它会变成一个开源产品?幸运的是,生物聚合物生化学系的Wojciech Makałowski博士建议我们把SuperMemo提交去参加”Software for Europe”竞赛。凭着某种奇迹般的好运,我们入围了决赛,这立刻被波兰媒体、尤其是电脑期刊注意到了。从那时起,SuperMemo在波兰媒体那里就一路顺风,媒体对它越来越感兴趣。Andrzej Horodeński是 第一个报道的人,而 Pawel Wimmer是第二个,也是至今最忠实的一位。Wimmer实际上使用的是SuperMemo 2,他很可能是在1989年Tomasz Kuehn那份KOMPUTER期刊广告刊出时,从他那里拿到的。
在诞生1.5年后, SuperMemo World 终于开始盈利。不错。
SuperMemo World 从一开始就是一个绝佳的架构。1991年的波兰没有风险投资的注入,因此我们只能靠自己,通过销售在旁人眼中不过是”蛇油”的东西,白手起家。我们本可能轻易失败,但凭着满腔热情、坚定信念,还有一点点运气,我们活了下来。
SM-6算法的起源
SM-6算法首次应用于SuperMemo 6(1991年),此后在SuperMemo 7(1992年)中不断演进。尽管历经多次改动,却从未出现过所谓的”SM-7″版本。其中最值得一提的是,从1994年起,SuperMemo 7 for Windows开始使用指数函数来近似 遗忘曲线。 OF矩阵 的近似方法也随着时间不断改进。

图: SuperMemo 7 for Windows(1992年)显示的基于平均值的 遗忘曲线。

图: SuperMemo 7 for Windows(1994年)显示的用指数函数近似得到的 遗忘曲线。纵轴表示以百分比呈现的 记忆保持率。横轴对应时间,以 U因子 表示
SM-6算法最重要的部分,是收集有关遗忘速率的数据。 遗忘曲线 让准确确定 最佳间隔 变得容易,从而不再需要SM-5算法那种缓慢且不精确的”强制震荡”方法:
存档提示: 为什么要使用原文存档?
本文节选自:” 学习的经济学 “,作者 Piotr Wozniak (1995年)
在 SM-5算法 中,确定最佳因子矩阵中单个条目数值的过程如下(见前文):
- 将初始值设为此前实验中得到的平均最佳因子(OF)值
- 如果该条目产生的评分(1)高于期望值,则提高OF值;(2)低于期望值,则降低OF值;(3)等于期望值,则不改变OF值
上述方法表明,只有经过大量重复才能达到OF的最佳值,而更糟的是,重复的序数越大,执行”修改-验证”循环(即修改一个OF条目,并在安排下一次间隔相应延长的重复时予以验证的循环)所需的时间就越长。
引入遗忘指数的概念
SM-6算法的新颖之处,在于近似出最佳因子矩阵中某一条目所对应的 遗忘曲线 的斜率,并直接根据这条近似曲线计算出相应最佳因子的新值。换言之,由于在遗忘曲线与最佳重复间隔之间建立了确定性关系,SM-6算法不再需要”修改-验证”循环。最佳因子的修改会在一次重复之后立即发生,依据的是根据最近一次应答给出的评分所推算出的新的遗忘曲线。这一改动不仅大大加快了确定最佳因子矩阵数值的过程,还提供了一种方法,可以设定在学习过程中最终会达到的知识 保持率 水平(参见示例 遗忘曲线)。
期望的知识 保持率 水平,由在 重复 时未被记住的 条目 所占的比例决定。这一比例被称为 遗忘指数 (条目是根据学生对自身学习进度进行自我评估时给出的 评分 来分类为”记住”或”遗忘”的)。

图: 在重复过程中绘制的一条示例 遗忘曲线 (记录了超过40,000个重复案例)。
在上图中,横轴以天数表示时间的推移。纵轴以百分比表示知识保持率。位于保持率90%处的水平线,确定了所要求的遗忘指数,即在重复时应被遗忘的条目所占的期望比例。最佳间隔自然就出现在所要求的遗忘指数线与 遗忘曲线 的交叉点处。在上面的例子中,最佳间隔为七天。所展示的遗忘曲线是根据40489个记录的重复案例绘制而成的。有关R因子(RF)、O因子(OF)等数值的解释见下文。由于直接从遗忘曲线计算出的最佳因子矩阵具有高度不规则的特性,在SM-6算法中,用于安排重复间隔的矩阵,是所谓保持因子矩阵(RF矩阵)的平滑版本,而RF矩阵则直接由对应OF矩阵各条目的遗忘曲线推导而来。换言之,遗忘曲线决定了RF矩阵各条目的数值,而在计算最佳间隔时,只使用后者经过平滑处理后得到的等价矩阵,即OF矩阵。
SM-6算法
下面对该算法的描述取自我的 博士论文,并做了一些澄清,反映的是1994年时的现状:
存档提示: 为什么要使用原文存档?
本文节选自:” 学习的经济学 “,作者 Piotr Wozniak (1995年)
- 所学的知识被拆分成尽可能小的单元,称为条目
- 条目以问答形式呈现
- 条目通过一种自定进度的淘汰技术来记忆,即不断回答所提出的问题,直到给出全部正确答案为止
- 在记住一个条目之后,系统会安排第一次重复,其间隔对所有条目都是相同的。这个数值由期望的知识保持率水平决定,而期望的保持率又可以借助从某个普通学生的普通数据库中得到的平均 遗忘曲线 ( Wozniak 1994a)换算为间隔。期望的保持率通过所谓的 遗忘指数 来指定,它对应于重复时被遗忘的条目所占的比例(关于如何由遗忘指数计算保持率,以及反过来如何计算,见下文)。需要注意的是,为了加快优化过程,第一个间隔可能会被随机缩短或延长(间隔的变化能提高遗忘曲线近似的准确度)。
- 第一个间隔的计算方式,是针对一个普通学生和一个普通数据库进行的。然而,一旦记录到的遗忘指数值偏离所要求的水平,第一个间隔的长度就会相应地被修改。间隔的新数值,是从在重复过程中绘制的负指数遗忘曲线的近似结果中推导出来的。随着每一次重复评分被记录下来,这条曲线会变得越来越精确,所使用的最佳重复间隔数值也会逐渐稳定在能够确保所选知识保持率水平的那一点上。每次重复之后,学生都会给出一个评分,该评分决定了正确答案被再现的准确度和难易程度。
- 根据这些评分,条目会被划分到不同的难度类别中。它们的难度会在随后的每一次重复中重新估算。每个条目的难度,由前文提到的 E因子 (E代表”easiness”,即容易程度)来刻画。在进入学习过程之初,所有条目的E因子都等于2.5,此后会在随后的重复中被修改。例如,高于四分的评分会使E因子略微提高(高分表明条目容易),而低于四分的评分则会降低E因子。历史上,E因子曾被用来确定在给定难度条目的连续重复中,间隔应该增加多少倍。目前,E因子仅用于对最佳因子矩阵和保持因子矩阵进行索引,与实际间隔增长本身可能已没有太大关系。
- 不同难度的条目采用不同的最佳间隔。
- 已被重复过不同次数的条目,采用不同的间隔。
- 最佳间隔的函数会不断被修改,以产生由遗忘指数所决定的期望知识保持率。换言之,该算法会检测学生应对重复的表现如何,并据此调整重复间隔的长度。
- 最佳间隔的函数用最佳因子矩阵(简称OF矩阵)来表示,定义如下:当n=1时,I(n,EF)=OF(n,EF);当n>1时,I(n,EF)=I(n-1,EF)*OF(n,EF),其中:
- I(n,EF) – 难度为EF时的第n个间隔
- OF(n,EF) – 第n次重复、难度为EF时的最佳因子
- 最佳因子矩阵是通过对所谓的 保持因子矩阵(简称RF矩阵)进行平滑处理而得到的。保持因子矩阵的定义方式,与 最佳因子矩阵 相同。
- 保持因子矩阵中的各条目,旨在估算最佳因子矩阵中对应条目的数值。每一个最佳因子,都对应着一个能在重复时产生期望保持率(由所要求的遗忘指数决定)的最佳间隔。保持因子矩阵中的每个条目,则对应着不同的E因子取值和重复次数。
- 保持因子矩阵中的条目,称为 R因子 ,是根据重复历史记录勾勒出的 遗忘曲线 的形状计算得出的
- 遗忘曲线图上时间的推移,用所谓的 U因子 来衡量,它是当前间隔与前一个间隔的比值,只有第一次重复例外——此时U因子等于以天数表示的间隔(如 图 所示)。重复记录使得针对不同的U因子数值计算保持率成为可能。以时间推移(U因子)为横轴绘制的保持率图,就构成了一条遗忘曲线。遗忘曲线与期望保持率水平的交叉点,决定了最佳R因子,而在对保持因子矩阵进行平滑处理后,就能得到最佳O因子
- 每个难度类别和重复次数,都拥有自己的一份重复记录,用来勾勒出一条独立的遗忘曲线。换言之,不同难度的条目,以及被重复了不同次数的条目,都会采用不同的间隔。
- 学习中使用的间隔,包括第一个间隔,都会围绕最佳值有轻微的分散,目的是提高遗忘曲线勾勒的准确度,进而提高优化过程的收敛速度。通过让间隔略微分散,遗忘曲线的近似计算将能使用图上更为分散的一组数据点
1994年:遗忘的指数性质
遗忘曲线:幂函数还是指数函数
遗忘曲线 的形状,对理解记忆至关重要。曲线背后的数学原理,甚至可能有助于理解睡眠所扮演的角色(见后文)。当艾宾浩斯最初测定遗忘速率时,他得到了一组相当不错、与幂函数吻合良好的数据。然而,今天我们知道遗忘其实是指数性的。这一差异的解释见 此处。
根据赫尔曼·艾宾浩斯(1885年)改编的遗忘曲线。该曲线是根据艾宾浩斯发表的原始表格数据重新绘制而成(Piotr Wozniak,2017年)
错误的思路反而助推了间隔重复
多年以来,曲线的实际形状在间隔重复中并没有起到太大作用。我早期的直觉随情境不同而变化不定。早在1982年,我曾以为进化设计出遗忘,是为了让大脑不至于耗尽记忆空间。遗忘的最佳时机会由环境的统计特性来决定。衰减会被设计成能使生存机会最大化。一旦没有进行复习,记忆就会被删除,以便为新的学习腾出空间。
我曾错误地认为存在一个”最佳遗忘时机”,而这个错误其实反倒对发明间隔重复起到了帮助作用。那种”最佳时机”的直觉,促成了 1985年的第一次实验。所谓最佳遗忘时机,意味着遗忘曲线应呈S形,并存在一个决定最佳性的清晰拐点。在复习之前,遗忘应该微乎其微;而延迟复习则会导致迅速遗忘。这正是当时寻找最佳间隔显得如此关键的原因。后来数据开始大量涌入时,由于确认偏误,我仍然没能看清自己的错误。我在硕士论文中曾这样描述S形遗忘:” 这直接源于这样一个观察:在最佳间隔到期之前,记忆遗漏的数量微不足道“。我大概是忘记了 自己在1984年底绘制的那条遗忘曲线图。
今天看来这似乎荒谬可笑,但即便是我提出的 间歇学习模型,当时也为这一理论提供了某种支持。在我研究间歇学习模型时收集的数据中,指数近似产生了特别高的偏差误差,而针对不同 E因子 的S形曲线叠加,很容易模拟出早期的线性特征。在现有数据的记忆保持率范围内,线性近似看起来与间歇学习模型完美契合。难怪面对整页整页异质材料,遗忘的指数本质仍然隐藏得很好。
相互矛盾的模型
我并没有太多思考过遗忘曲线。然而,我早在1988年提出的生物学模型,谈到的却是 可提取性 的指数衰减。显然,在那些年里,遗忘曲线和可提取性在我脑中可以作为两个互不相干的概念并存。
在为一门计算机模拟课程(Katulski博士,1988年1月)提交的学分论文中,我的图表清楚地显示出指数型遗忘曲线:

图: 最佳学习过程中可能涉及的假设机制。(A)分子层面的现象 (B)突触中的量变。
到那时,我可能已经从文献中获得了更好的想法。1986至1987年间,我在大学图书馆里花了大量时间,寻找有关间隔重复的优质研究,却一无所获。我可能当时已经知道艾宾浩斯的遗忘曲线,我的 硕士论文 中就提到了它。
收集数据
我在 1984年底 为我的第一张 遗忘曲线 图收集了数据。由于所有的学习都是在长达11个月的时间里纯粹为学习而进行的,而绘制这张图的成本又微乎其微,我把它忘在了一边,它就在我的档案中闲置了34年:

图: 我 早在1984年绘制的、关于英语词汇 保持率 的第一张 遗忘曲线,也就是 在纸上设计出SuperMemo 的几个月之前。这张图并不是某个实验的一部分,只是对间歇学习英语词汇成果的一次累积性评估。这张图很快就被遗忘了,34年后才被重新发现。记忆完成后,49页、每页约40个英语词对被以不同的间隔进行复习,并记录下回忆错误的数量。剔除异常值并求平均后,得到的曲线明显比艾宾浩斯(1885年)的曲线平缓得多——艾宾浩斯当年使用的是无意义音节,并采用了不同的遗忘衡量方式:重新学习所节省的时间
我在1985年做的实验,也可以被视为收集 遗忘曲线 数据的一次带有噪声的尝试。然而,最初的几代SuperMemo根本不关心 遗忘曲线。优化方式本质上是”强制震荡”式的,尽管今天看来,收集保持率数据似乎是显而易见的解决方案(就像1985年那样)。
直到我开始用 SuperMemo 软件收集数据——在其中每个条目都可以被独立审视——之前,我都无法完全摆脱早期关于遗忘的错误观念。
SuperMemo 1 for DOS(1987年)收集了完整的重复历史记录,原本可以据此确定遗忘的性质。然而,仅仅10天后(1987年12月23日),我就不得不放弃这份完整的重复记录。当时我的磁盘空间只有360KB——没错,就是这么小。我当年是从老式的5.25英寸磁盘上运行SuperMemo的。完整的重复历史记录直到8年之后(1996年2月15日)才重新回到SuperMemo中,这归功于 Janusz Murakowski博士 的一番紧张努力,他认为每一分钟的流逝,都是在浪费本可用于驱动未来算法和记忆研究的宝贵数据。二十年后的今天,我们已经拥有了足够多、能够有效处理的数据。
即便没有重复历史记录,我仍可以借助独立收集的遗忘曲线数据来研究遗忘。1991年1月6日,我想出了一种方法,可以把遗忘曲线记录在一个不会让数据库体积膨胀的小文件中(即无需完整的重复历史记录)。
直到1991年,才有SuperMemo 6开始收集遗忘曲线数据,以确定最佳间隔。它所做的事情,与 我的第一次实验 相同,只不过是自动完成的,规模庞大,而且是针对被拆分成独立问题的记忆进行的(这解决了异质性问题)。SuperMemo 6最初使用二分法来寻找与遗忘指数相对应的最佳时刻。而一个良好的拟合近似,还要等三年之后才会出现。
最初的遗忘曲线数据
到1991年5月,我已经有了一些初步数据可供窥看,而这令人大失所望。我原以为需要一年才能看出任何规律性,可实际上,每隔几个月,我都要为几乎毫无进展而记录下自己的失望。收集数据的进度慢得令人痛苦,等待过程更是煎熬。一年过后,我离目标依旧没有更近一步。如果艾宾浩斯凭借无意义音节就能绘出一条不错的曲线,那么他为缺乏 一致性 所付出的痛苦一定是值得的。而面对有意义的数据,真相浮现的速度却极其缓慢——即便一切都由计算机代劳,即便学习本身充满乐趣,依然如此。
1992年9月3日,SuperMemo 7 for Windows第一次让人能够真切地窥见一条遗忘曲线的样貌,那一幕令人着迷:

图: SuperMemo 7 for Windows于1992年编写完成。到1992年9月3日,它已经能够显示用户的 遗忘曲线 图。在这张特定的图中,横轴标注为 U因子,对应的是天数。第14天到第20天之间出现的折点,正是难以判断遗忘本质的原因之一。旧有的错误假设很难被证伪。在第13天之前,遗忘看起来几乎是线性的,也同样能与指数函数良好拟合。又花了两年时间收集数据,才最终找到答案(来源:《SuperMemo 7:用户指南》)
遗忘曲线的近似
到1994年,我依然无法确定遗忘的本质究竟是什么。我拿出前三年(1991-1994年)收集到的数据,决心一次性把这条曲线弄清楚。我把重点放在了自己超过20万次重复记录得到的数据上。然而,这并不容易。如果SuperMemo把重复安排在R=0.9处,那么你完全可以从R=1.0到R=0.9画一条直线,在有噪声的数据上也能得到相当不错的效果:

图: 近似遗忘曲线之难。早在1994年,由于SuperMemo收集到的数据大多集中在高记忆保持率区间,想要弄清遗忘的本质非常困难。
我1994年5月6日的笔记,清楚地展现了当时的不确定程度:
个人轶事。 为什么要使用轶事?
1994年5月6日: 整整一天都在疯狂尝试更好地近似遗忘曲线。一开始我尝试用 R=1-i n/(H n+i n),其中i为间隔,H为记忆半衰期,n为协同因子。到了深夜,我让这个公式运转了起来,虽然速度相当慢,但……结果显示r=exp(-a*i)的效果也差不到哪去!就连老掉牙的线性近似,效果也没差太多(S形曲线:D=8.6%,指数曲线D=8.8%,线性曲线D=10.8%)。也许,遗忘曲线终究是指数型的?凌晨2点50分上床睡觉
要把线性函数、幂函数、指数函数、齐夫函数、希尔函数等区分开来,并不容易。指数、幂函数乃至线性近似,在不同情况下都能带来相当不错的结果,而这些情况却很难区分清楚。只有当我按照 复杂度 把 遗忘曲线 分类整理,再观察 稳定性 较高水平下的曲线时——尽管这些图的数据量偏少——我才能更清楚地看到遗忘的指数本质。
1994年的一个误导因素在于,我自然而然地收集到了最多关于第一次复习的数据。刚进入学习流程的新条目,仍然构成一个异质群体,遵循的是遗忘的幂律。
用SuperMemo收集到的、针对新学知识的首次复习遗忘曲线。
而后,当这些条目按照 复杂度 和 稳定性 分类之后,就开始呈现出指数特性。在SM-6算法中,复杂度和稳定性分别由 E因子 和重复次数来不完美地表达。这导致了算法上的种种缺陷,使分类也不够完美。此外,当遗忘接近线性时,SuperMemo始终停留在高保持率的区域内。
到1994年5月,我的 高级英语 数据库中,主要的首次复习曲线已经收集到18,000个数据点,看起来是最好的分析素材。然而,那条曲线涵盖的是进入学习流程的全部材料,而不区分难度。我当时并不知道,这条曲线其实受幂律支配。我得到的最佳偏差值是2.0。
关于2018年一条类似曲线,可参见:

图: 2018年用SuperMemo 17针对平均难度(A因子=3.9)得到的遗忘曲线。在19,315次重复、最小二乘偏差为2.319的情况下,它与1994年的曲线相当相似,只不过它最适合用指数函数来近似(幂函数的例子见: 遗忘曲线)。
指数型遗忘占据主导
到1994年夏天,我已经相当确信遗忘的本质是指数性的。到1995年,我们发表了 《记忆的两个组成部分》,给出公式R=exp(-t/S)。这篇论文基本上被主流科学界所忽视,但在讨论遗忘曲线的网络内容中却随处可见。
有趣的是,1966年,诺贝尔奖获得者 赫伯特·西蒙 曾研究过源自 艾宾浩斯 1897年工作的 约斯特定律。 西蒙注意到, 遗忘 的指数本质,必然意味着存在着一种如今我们称之为记忆 稳定性 的记忆属性。西蒙写了一篇短文,随后便转向了他手头繁忙的其他数百个项目。他的这篇文章在很大程度上被人遗忘,但却颇具先见之明。1988年,类似的推理引出了 长期记忆双成分模型 的构想。
今天,我们还可以再加上一层推论:如果遗忘是指数型的,那就意味着单位时间内遗忘的概率是恒定的,这又意味着存在神经网络的干扰,进而意味着睡眠或许并不是通过强化记忆来建立稳定性,而只是简单地清除干扰的来源——那些不必要的突触。 朱利奥·托诺尼 关于睡眠中突触净减少的看法或许是对的,只不过他认为这种减少是体内平衡性的。而指数型遗忘则表明,这种减少可能远不止于此,它或许是一种” 智能遗忘“,清除的是那些干扰清醒时被强化的关键记忆的东西。
负指数遗忘曲线
直到2005年,我们才更详细地论述了遗忘的指数本质。在 Gorzelańczyk博士 在波兰一次建模会议上发表的论文中,我们写道:
存档提示: 为什么要使用原文存档?
尽管人们一直怀疑遗忘的本质是指数型的,但要证明这一点却从来不是件容易的事。指数衰减普遍存在于从放射性衰变到木材干燥等各种生物和物理系统中,只要预期衰减速率与样本大小成正比,且单个粒子衰变的概率恒定,就会出现这种衰减。自 艾宾浩斯(Ebbinghaus,1885年)那个年代 以来,以下几个问题一直阻碍着建立遗忘模型的努力:
- 样本量过小
- 样本异质性
- 把 遗忘曲线,与重新学习曲线、练习曲线、节省曲线、学习试验曲线、错误曲线以及学习曲线家族中的其他曲线相混淆
通过使用 SuperMemo,我们可以克服这些阻碍,来研究记忆衰减的本质。作为一款大众化的商业应用,SuperMemo能够几乎无限地获取来自世界各地学生所收集的大量数据。程序中每个用户都能看到的 遗忘曲线 图( 工具 : 统计 : 分析 : 遗忘曲线),是基于相对同质的数据样本绘制而成的,是随时间推移的记忆衰减的真实反映(区别于其他形式的学习曲线)。不过,追求同质性会显著影响样本量。需要指出的是,记忆稳定性和知识难度不同的材料,其遗忘曲线也不相同。 记忆稳定性 会影响衰减速率,而异质的学习材料则会产生多条各自具有不同衰减速率的独立遗忘曲线的叠加。因此,即便在参与学习过程的信息量多达数十万条的庞大数据体系中,能够筛选出的相对同质的数据样本仍然相当小,很少能超过几千个重复案例。即便如此,这些数据体量也远远超过了在受控条件下研究记忆特性的研究者所能获得的样本质量。然而,遗忘的随机性依然使人难以对衰减函数的数学本质给出最终定论(见下面两个例子)。在分析了数十万个样本之后,我们已经比以往任何时候都更接近于证明遗忘是一种指数衰减的形式。

图: SuperMemo绘制的一条示例遗忘曲线。从近百万个重复案例的数据库样本中,筛选出难度为平均水平、稳定性较低(A因子=3.9,S在[4,20]之间)的案例,得到5850个重复案例(占整体样本不到1%)。红线是采用R=e -kt/S 回归分析的结果。用其他基本函数进行曲线拟合的结果表明,指数衰减与数据的匹配度最佳。图中使用的时间度量是所谓的U因子,定义为当前间隔与前一个重复间隔的比值。请注意,在R从1到0.9的区间内,指数衰减完全可以被合理地近似为一条直线,而如果衰减的特征是幂函数,情况就不会是这样。

图: SuperMemo绘制的一条示例遗忘曲线。从近百万个重复案例的数据库样本中,筛选出难度为平均水平、稳定性为中等(A因子=3.3,S>1年)的案例,得到1082个重复案例。红线是采用R=e -kt/S 回归分析的结果。
遗忘曲线:可提取性公式
在 SM-17算法 中, 可提取性R 对应的是 回忆 的概率,代表着指数型的 遗忘曲线。可提取性由 稳定性 和 间隔 推导而来:
R[n]:=exp -k*t/S[n-1]
其中:
当我们考虑到,如果 条目 本身较难,或者难度参差不齐时,遗忘可能并不完全是指数型的,这一简洁的理论方法就会变得稍微复杂一些。此外, SuperMemo 中的 遗忘曲线,还可能受到用户使用策略的干扰。
在SM-8算法中,我们曾希望能够从评分中推导出可提取性信息,结果证明这是错误的。评分与可提取性之间的相关性极弱,而这主要是因为复杂的条目本来就会得到较差的评分,且更容易(至少在初期)被更快遗忘。
保持率与遗忘指数
遗忘的指数本质意味着,所测得的 遗忘指数 与 知识保持率 之间的关系,可以用下面这个公式来准确表达:
保持率 = -FI/ln(1-FI)
其中:
举例来说,在默认情况下,执行良好的间隔重复,在遗忘指数为0.1(即10%)时,应能带来0.949(即94.9%)的保持率。94.9%这个数字说明了指数衰减在初期是多么接近于线性函数。若遗忘是线性的,这个数字应为95.000%(即100%减去遗忘指数的一半)。
表述不佳材料的遗忘曲线
1994年时,我很幸运,我的 数据库 大多表述得相当好。而 SuperMemo 的用户往往并非如此。对于表述不佳的 条目 来说, 遗忘曲线 会变得平坦,不再是纯粹的指数型(而是 多条指数曲线叠加)。SuperMemo永远无法预测某一个具体条目被遗忘的确切时刻。遗忘是一个随机过程,只能在平均意义上加以处理。围绕SuperMemo流传的一个常见谬见是,它能预测遗忘发生的确切时刻——这并不属实,也根本不可能做到。SuperMemo所做的,是寻找出在给定难度下,条目有可能表现出给定遗忘概率(例如10%)的 间隔。这些被拉平的遗忘曲线导致了一个悖论:忽视复杂条目,可能反而使它们在长期未复习之后依然有很高的存活率。即便对于一条纯粹的负指数遗忘曲线,间隔估计出现10倍偏差,也只会导致 保持率 产生R2=exp 10*ln(R1) 的差异,相当于从98%跌落到81%。而对于表述不佳条目所典型呈现的那种被拉平的遗忘曲线,这一跌幅可能小到只是从98%降到95%。由此可以得出一个结论:把复杂材料保持在较低的 优先级 上,是一种良好的学习策略。
指数遗忘曲线叠加会产生幂律
为了说明同质样本在研究 遗忘曲线 时的重要性,我们来看看把难知识和易知识混在一起,会对遗忘曲线的形状产生什么影响。下图展示了为何异质样本可能导致关于遗忘本质的错误结论。在这个演示中,异质样本最适合用幂函数来近似!通过对指数遗忘曲线求平均而产生幂曲线这一现象,此前已有其他研究者报告过(Anderson&Tweney 1997;Ritter&Schooler,2002)。

图: 遗忘曲线 的叠加,可能会掩盖遗忘的指数本质。这里构造了一个理论样本,包含两种记忆痕迹:样本中50%的痕迹稳定性S=1(细黄线),另50%的痕迹稳定性S=40(细紫线)。叠加后的遗忘曲线自然会呈现出可提取性R=0.5*Ra+0.5*Rb=0.5*(e -k*t+e -k*t/40)。这样一个复合样本的遗忘曲线,在图中以黑色颗粒状呈现。粗蓝线表示指数近似(R2=0.895),粗红线表示对同一条曲线的幂函数近似(R2=0.974)。在这个例子中,即便各子样本本身的遗忘是负指数型的,与数据匹配度最好的,反倒是幂函数。
SuperMemo 17中还有一条单独的遗忘曲线,最适合用幂函数来近似,那就是条目刚被记住之后的第一条遗忘曲线。在记忆的那一刻,我们并不知道条目的 复杂度,正因如此,这部分材料是异质的,于是我们得到了一条幂函数遗忘曲线。

图: 用 SuperMemo 收集到的、针对新学知识的首次复习 遗忘曲线。由于刚被引入学习流程的学习材料具有异质性,这里使用了幂函数近似。由于没有按 记忆复杂度 进行区分,导致不同衰减常数的指数遗忘发生了叠加。在半对数图上,幂回归曲线呈对数形态(黄色),看起来几乎是一条直线。该曲线显示,在所展示的这个案例中,四年内回忆率仅降至58%,这可以用记忆知识在现实生活中被高频重复使用来解释。在可提取性 为90%时,首次复习的最佳 间隔 为3.96天。 遗忘曲线 可以用公式R=0.9907*power(interval,-0.07)来描述,其中0.9907是一天后的回忆率,-0.07则是衰减常数。在这种情况下,该公式给出的结果是4天后回忆率为90%。绘制该图使用了80,399个重复案例。如果材料中包含更高比例的 困难 知识(尤其是 表述不佳的知识),或者面对记忆技巧较弱的新学生,回忆率的下降会更为陡峭。第15到20个间隔处曲线的不规则性,来自于该处重复样本量较小(在对数尺度上,较靠后的间隔类别涵盖的间隔范围更宽)
1995年:超媒体版SuperMemo
SM-8算法在一间山间小屋中诞生
1995年, SuperMemo 被彻底重写,这也为基于 SM-6算法 使用四年间所积累的数据,实现一套新的间隔重复算法,提供了绝佳的机会。
1995年3月,在汉诺威的CeBIT展会上,我们见到了Borland推出的一款令人惊艳的新开发环境:Delphi。它把老旧的Borland Pascal提升到了一个全新的水平,也为SuperMemo打开了无数的开发可能。我们决定按照我 博士论文 中所描绘的思路重新设计这款程序。除了间隔重复之外,我们还希望拥有知识结构和超媒体。用户将不再只是堆砌一大堆条目,而是构建一棵知识树。我们不再满足于问题、答案、图片、声音这种老旧的模板,而是希望拥有所有可能的组件类型,可以自由组合成用来表达知识的全新超媒体形式。当时还有一个梦想,那就是打造一个可编程的SuperMemo,让开发者能够为任何形式的训练编写自己的程序,包括程序性训练、触摸打字,或者求解二次方程。与此同时,我们也收集到了大量数据,表明SuperMemo所用的算法还有改进的空间。举例来说,最佳因子矩阵所具有的数学本质已经变得相当明显。
1995年5月,我把我的Pentium电脑带到了波兰南部一间偏远的山间小屋,专心钻研这些想法。那是一段长达100天、几乎完全与世隔绝的时期,唯一的打断,是 Krzysztof Biedalak 的一次短暂来访,期间我们重新统一了对SuperMemo未来的构想。到1995年9月,新算法已经准备就绪,并在我自己的数据上完成了测试。回到波兹南后,我开始逐步把我在SuperMemo 7中多个知识库里的整个学习进程,迁移到这个被戏称为”Genius”的新环境中。两年后,当这个新程序补齐了原本只存在于SuperMemo 7中的全部功能时,Genius便成为了SuperMemo 8。
帮助开发算法 SM-8 的主要数据,是用 SuperMemo 6 和 SuperMemo 7 收集到的遗忘曲线和 OF 矩阵数据。这些数据消除了算法中大量的猜测成分。与后来的 算法 SM-17(2014-2016) 相比,这项工作相当轻松——那时我要处理堆积如山的重复历史数据,对精度和优质指标的要求也提高了三倍。算法 SM-17 花了两年时间才开发完成,而算法 SM-8 从设计、实现到充分测试,只用了短短 100 天。
算法 SM-8 背后的主要思想如下:
- 基于实时近似值对 OF 矩阵进行精确的数学确定。我不想再像 SuperMemo 5 那样对矩阵做平滑处理,而是想找到能够描述该矩阵、并能实时更新的确切数学函数。很容易确定,用今天的说法,一个负幂函数就能确定 OF=f(RepNo)(这其实是 SInc=f(S) 的另一种表达)。难度对 SInc 的影响则需要更多猜测。我选择用线性近似来描述难度( A-Factor)与 SInc 衰减常数(D-Factor)之间的映射函数,该常数表示 稳定性增量 随稳定性/间隔增长而下降的规律。这个线性赌注一直沿用至今,证明是个不错的猜测。
- 有了良好的 OF 矩阵定义,我就能对条目难度给出精确的定义:与可以被用户随意用评分手动调整的、流动性的 E-Factor 不同,我想要一个绝对难度值 A-factor,它被定义为在 R=0.9 时进行第一次重复后的 稳定性增量。这使得 SuperMemo 能够在每次重复时,通过校正条目实际表现与 OF 矩阵所预期表现之间的拟合度,来调整条目难度
- 通过将首次评分与 A-factor 相关联,更快地确定起始难度。这是一个作用微弱、意义不大的机制,事实证明,即便有了多次重复的历史记录,条目难度仍然是个模糊的概念。在这一点上,应该提醒用户:最好的做法是把条目编写好,并让它们保持简单
- 根据记忆遗忘次数,用指数拟合来估算遗忘后的首个间隔。这种方法最大的价值在于打破了一个迷思:遗忘发生后缩短间隔长度可以加快学习(一些基于算法 SM-2 开发软件的作者曾采用过这种方案,但事后证明是错误的)
- 将评分与 遗忘指数 相关联的想法是失败的,并未对改进算法有所贡献。这一事实浮现得很慢,花了将近十年才得出最终结论:评分与遗忘指数的相关性很弱。诞生于 算法 SM-2 的那种直觉,只是勉强正确
有趣的是,算法 SM-8 并不需要元素的完整重复历史记录。完整的重复历史记录要到 1996 年 2 月才实现。这样做的好处是实现起来更简单,缺点则是:一旦用户手动干预学习过程,算法就没有该次干预的记录,也就无法防范错误数据可能的流入。当然,也正是完整的重复历史记录,才使得二十年后实现 算法 SM-17 成为可能。
我用自己的数据进行算法 SM-8 的第一次”实盘”重复,是在 1995 年 8 月 16 日(周三)。为了测试,我”牺牲”了一个只有 100 个条目的小型集合——用于记忆数字的记忆钩子列表。在接下来的两年里,我逐步把自己所有其他的集合都转换过来,使其能在新算法和新的 SuperMemo 环境中运行。到 1997 年,我所有的知识终于整合进了一个结构良好的单一数据库。在 1995-1997 年间,我们把这样的数据库称为”知识系统”。今天我们则简单地称之为 集合 (即知识片段的集合)。
直到今天,这个诞生于 1995 年的算法核心仍在 SuperMemo 17 的后台运行,如果用户对 算法 SM-17 给出的建议不满意,仍然可以选择基于这个旧算法的间隔。
绝对条目难度
在 SuperMemo 1.0 到 SuperMemo 3.0 中, E-Factor 的定义方式与 O-Factor 相同(即连续间隔的比值)。它们是条目 难度 的一种近似度量(E-Factor 越高,条目越容易)。然而, 间隔重复优化 会强制 E-factor 与随 稳定性 增长而下降的 稳定性增量 相对应。换句话说,按照定义,在 算法 SM-2 中, 条目 经过连续多次重复后,会被标记为越来越”困难”。这有点反直觉,但用户似乎从未注意到这一点。
从 SuperMemo 4.0 开始,E-Factor 被用来为 O-Factor 矩阵建立索引。它们仍然用于反映条目难度,也仍然用于计算 O-Factor。不过,它们可以与 O-Factor 有所不同,因而能更好地反映难度。
在 SuperMemo 4 到 SuperMemo 7 中,给定数据库中材料的难度会影响 O-Factor 与 E-Factor 之间的关系。举例来说,在一个较简单的集合中,起始 O-Factor(即对应第一次重复、假定起始 难度 的那个值)会相对较高。由于重复中的表现决定了 E-Factor,所以在简单集合中,同样难度的条目自然会比困难集合中完全相同的条目拥有更低的 E-Factor。这一切在引入 A-Factor 的 SuperMemo 8 中发生了改变。A-Factor 与 O-Factor 矩阵的第二行”绑定”,这使它们成为条目难度的绝对度量。它们的数值 不依赖于 集合 的内容。举例来说,如果 A-Factor 是 1.5,你就知道第三次重复的间隔会比第一次间隔长 50%。
归档提示: 为什么使用原文归档?
A-Factor 是 集合 中每个 元素 都拥有的一个数值。A-Factor 决定了学习过程中 间隔 增长的幅度。A-Factor 越高,间隔增长得越快。A-Factor 反映了条目的 难度。A-Factor 越高, 条目 就越容易。最难的条目的 A-Factor 等于 1.2。A-Factor 被定义为重复中使用的第二个 最优间隔 与第一个最优间隔之比
遗忘后间隔
算法 SM-8 中对遗忘后间隔的近似方法,打破了两个迷思:
- 遗忘后缩短间隔是个好主意(这一想法在 1991-2000 年间曾被多次提出)
- 第一个间隔应该始终是 1 天(如一些较早期 SuperMemo 方案中的做法)
在下面的图中可以看到,随着遗忘次数不断增加,最优的遗忘后间隔会略微缩短。这只说明了一个事实:只有那些编写得很差的条目,或者因语义性质或知识干扰而真正难以记住的条目,才会达到这么高的遗忘次数。对于遗忘次数(Lapse)从 10 开始的记忆,我提出了一个术语——” 有毒“——来表达它们对学习过程的影响。如果大脑已经拒绝接受某条信息这么多次,我们就应该得到一个信号:这条知识编写得不好,或者因其他原因(例如与学习相关的压力,比如在学校里)而变得”有毒”。
归档提示: 为什么使用原文归档?
第一个间隔 ——第一次重复之后的第一个间隔的长度,取决于该条目已被遗忘的次数。请注意,这里的”第一次重复”指的是遗忘之后的第一次重复, 不是 有史以来的第一次重复。也就是说,一个已经重复过两次的条目,一旦被遗忘,其重复序号会变回一,而不会是三。第一间隔图显示了一条指数回归曲线,用来近似不同遗忘次数(包括对应新记忆条目的”零次遗忘”类别)下第一个间隔的长度。在下图中,蓝色圆圈对应学习过程中收集到的数据(圆圈越大,记录的重复次数越多)。

图:上图包含了超过 13 万次重复的数据,新记忆的条目最优的重复时间是七天之后。而遗忘过 10 次的条目(这在 SuperMemo 中很少见)则需要两天的间隔。(由于采用对数刻度,圆圈大小与数据样本量并非线性对应;Lapses=0 的重复案例数量远远大于 Lapses=10,这一点可以在 Distributions : Lapses 中看到)
首次评分与 A-Factor 的关系
将首次评分与估算的条目难度关联起来,目的是在进入学习流程时,帮助按难度对条目进行分类。这种相关性看起来较弱,而且高度依赖于用户的评分体系。对一些用户来说,几乎不存在相关性(图 1);而对另一些用户来说,这种相关性足以覆盖整个难度(A-factor)范围(图 2)。


此外,在从算法 SM-8 衍生出的算法 SM-11 中,用户被允许提前执行重复。这些提前重复会体现 间隔效应,但它们仍会计入图表,并高估困难条目的评分。如果大量使用 渐进式阅读,这会使图表变得更平坦。
算法 SM-17 不使用评分与难度的相关性,而是从整个重复历史中推导难度。实践表明,即便如此,这种估算也很难做,好的学习实践是让所有条目都保持简单(即与学生已有知识达成可接受的记忆契合)。
归档提示: 为什么使用原文归档?
首次评分与 A-Factor ——G-AF 图将条目获得的首次评分与其 A-Factor 最终估算值关联起来。每次重复时,当前元素旧的 A-Factor 估算值会从图中移除,并加入新的估算值。 算法 SM-15 利用这张图,在我们对某个元素所知的全部信息只有它第一次重复所得的首次评分时,快速估算出 A-Factor 的初始值。
评分与遗忘指数的关系
通过将评分与预期遗忘指数(预测的 可提取性)相关联,我希望能够计算出估算遗忘指数(重复后对实际 可提取性 的估计值)。由于所有用户都倾向于使用自己的评分体系,而且这些体系往往并不一致,这种相关性显得很弱。评分与 R 之间的相关性,主要来自这样一个事实:复杂的条目得分更差,而且(至少在初期)往往更快被遗忘。从这个意义上说,评分更能反映 复杂度,而不是 可提取性。
在下图中,预期遗忘指数的整个范围似乎都落在评分 3 附近。

对于评分<=3,我们可以读出最大的估算遗忘指数;对于评分>=4,则可以读出最小的估算遗忘指数。由此可见,两级评分体系对算法的影响,与六级评分体系完全相同。
对另一些用户来说,曲线甚至可能在某些预期遗忘指数水平上出现峰值,仿佛评分反映出一种”希望记住那些真正难记的条目”的心理(即宽松评分)。
算法 SM-17 大量使用重复后估算出的可提取性,但它是从纯粹的记忆结果数据和预期可提取性中推导出来的。评分与可提取性的相关性也会被收集,但其权重可以忽略不计。
归档提示: 为什么使用原文归档?
评分与遗忘指数 ——FI-G 图将 预期遗忘指数 与重复时获得的评分关联起来。要理解这张图,你需要先理解 算法 SM-15。可以这样想象: 遗忘曲线 图的纵轴,也可以用平均评分取代 记忆保持率。如果把这个评分与 遗忘指数 相关联,就得到了 FI-G 图。这张图用于计算 估算遗忘指数,该指数进而用于对评分进行归一化处理(适用于延迟或提前的重复),并估算条目 A-Factor 的新值。评分的计算公式为: Grade=exp A*FI+B ,其中 A 和 B 是对重复过程中收集到的原始数据进行指数回归得到的参数。
FI-G 图会在每次重复后,利用预期遗忘指数和实际评分进行更新。预期遗忘指数可以很容易地从重复之间使用的间隔,以及由 OF 矩阵计算出的最优间隔中推导出来。预期遗忘指数越高,评分就越低。通过评分和 FI-G 图,我们可以计算出估算遗忘指数,它对应于刚刚完成重复的条目,在假设的重复前阶段被遗忘的概率(重复后的估计值)。由于遗忘和记忆本身具有随机性,同一个条目在大脑当前的整体认知状态下,可能被记住,也可能不被记住——即便所有相关突触的记忆强度和可提取性完全相同!这样,我们就可以谈论一个刚刚被记住(或未被记住)的条目,在重复之前的记忆概率,这个概率正是由估算遗忘指数来表达的。
算法 SM-15
算法 SM-8 经过多年改进,先演化为算法 SM-11(2002 年),再演化为算法 SM-15(2011 年)。这里我只介绍最新版本:算法 SM-15(用于 SuperMemo 15、SuperMemo 16,并作为 SuperMemo 17 的备用算法)。
在这二十年间,对算法 SM-8 所做的关键改进包括:
- 改进的稳定性索引方式:从 SuperMemo 8(1997 年)开始,算法不再使用重复序号,而是使用”重复类别”这一概念,它大致相当于 稳定性
- 对提前和延迟重复的容忍度:从 SuperMemo 11(2002 年)开始,新增了一种启发式方法,用于体现 间隔效应
- 将 U-Factor 中时间的表示范围从 60 天扩展到 15 年(2011 年)
- 对超出原始 U-Factor 时间跨度的重复延迟,对 遗忘曲线 数据进行校正(2011 年)
归档提示: 为什么使用原文归档?
算法 SM-15 通过存储每个条目的记忆结果记录(即学习过程中获得的评分),来着手计算最优的重复间隔。这一记录用于估算给定记忆痕迹当前的强度,以及其背后知识(条目)的难度。条目难度体现了记忆的复杂程度,反映了要形成清晰、稳定的记忆痕迹所需付出的努力。SuperMemo 将 要求的记忆保持率 (例如 95%)作为优化标准,并计算出满足该标准的间隔。最优间隔的函数以矩阵形式表示(OF 矩阵),并会根据学习过程的结果不断修正。尽管满足优化标准相对容易,但算法的复杂性在于:要在已知记忆模型的基础上,尽可能获得最快的收敛速度。
重要提示! 算法 SM-15 只用于计算条目重复之间的间隔。主题(Topic)的复习间隔是用完全不同的算法计算的(本文不作介绍)。主题复习的时间安排,是为了管理阅读顺序而优化的,并不以辅助记忆为目的。SuperMemo 中的长期记忆,主要是通过条目形成的,而条目的复习则遵循算法 SM-15 计算出的时间表。
以下是对算法 SM-15 更详细的描述:
- 最优间隔:重复间隔使用以下公式计算:I(1)=OF[1,L+1]I(n)=I(n-1)*OF[n,AF]其中:
- OF——最优因子矩阵,在重复过程中会不断被修正
- OF[1,L+1]——取自 OF 矩阵第一行、第 L+1 列的条目值
- OF[n,AF]——对应第 n 次重复、条目难度为 AF 的 OF 矩阵条目值
- L——某条目被遗忘的次数(来自” 记忆遗忘(Lapses)“)
- AF——反映某条目绝对难度的数值(来自” Absolute difficulty Factor(绝对难度因子)“)
- I(n)——某条目第 n 个重复间隔
- 提前重复:由于重复的执行可能会提前(例如考试前的强制复习),用于计算最优间隔的实际最优因子(OF)会按照体现学习中间隔效应的公式,减去 dOF:dOF=dOF max* a/(t half+ a)dOF max=(OF-1)*(OI+t half-1)/(OI-1)其中:
- 延迟重复:由于重复的执行可能会延迟,OF 矩阵实际上并不是按重复序号来索引的,而是按”重复类别”来索引的。例如,如果第 5 次重复被延迟了,就会用 OF 矩阵计算出重复类别,即与重复前所用间隔相对应的重复序号理论值。这个重复类别可能取值,比如说 5.3,于是就得到 I(5)=I(4)*OF[5.3,AF],其中 OF[5.3,AF] 是由 OF[5,AF] 和 OF[6,AF] 推导出的中间值
- 最优间隔矩阵:SuperMemo 不像早期一些版本那样存储最优间隔矩阵,而是保存一个最优因子矩阵,该矩阵可以按第 1 点中的公式转换为最优间隔矩阵。第 1 点中所用的最优因子矩阵 OF,是根据遗忘的数学模型,以及基于多位用户创建的集合、经过多年重复所收集数据构建的类似矩阵推导得出的。它的初始设置对应于低于平均水平学生的取值。在重复过程中,随着收集到越来越多关于学生记忆的数据,该矩阵会逐步被修正,以更贴近该学生实际的记忆特性。经过多年重复之后,新数据还可以被反馈回来,用于生成更精确的初始 OF 矩阵。在 SuperMemo 17 中,可以通过 Tools : Statistics : Analysis : 3-D Graphs : O-Factor Matrix 以 3D 形式查看这个矩阵
- 条目难度:绝对条目难度因子( A-Factor),在第 1 点中记作 AF,表示条目的难度(数值越高,条目越容易)。值得注意的是,AF=OF[2,AF],也就是说,AF 表示第二次重复之后的最优间隔增长因子,这也等同于该条目最大的间隔增长因子。与 SuperMemo 6 和 SuperMemo 7 中所用 算法 SM-6 中的 E-Factor 不同, A-Factor 表示的是绝对条目难度,不依赖于同一学习材料集合中其他条目的难度
- 从 RF 矩阵推导 OF 矩阵:OF 矩阵各条目的最优值,是通过一系列近似程序,从 RF 矩阵推导出来的。RF 矩阵的定义方式与 OF 矩阵相同(见第 1 点),唯一的区别是其数值来自正在为其运行优化的那名学生的实际学习过程。最初,OF 矩阵和 RF 矩阵是相同的;但 RF 矩阵的各个条目会随着每次重复而被修正,然后再用近似程序,根据 RF 矩阵计算出 OF 矩阵的新值。这样一来,OF 矩阵实际上就是 RF 矩阵的平滑形式。简单来说,RF 矩阵在任意时刻对应的都是从学习过程中得出的最佳拟合值;但每个条目都是独立地被视为最佳拟合条目,即脱离其他 RF 条目的数值单独考虑。与此同时,OF 矩阵则作为一个整体被视为最佳拟合。换句话说,RF 矩阵是在重复过程中逐条计算出来的,而 OF 矩阵则是 RF 矩阵的平滑副本
- 遗忘曲线:RF 矩阵的每个条目,是根据针对该条目单独近似出的 遗忘曲线 计算得出的。每条 遗忘曲线 对应着不同的重复序号取值,以及不同的 A-Factor 取值(对第一次重复而言,则对应不同的记忆遗忘次数)。RF 矩阵条目的数值,对应于遗忘曲线经过由 要求遗忘指数 推导出的知识保持点的时间点。举例来说,对于一个新条目的第一次重复,如果 遗忘指数 等于 10%,而 知识保持率 所显示的 遗忘曲线 在四天后跌破 90%,那么 RF[1,1] 的取值就是四。这意味着所有新进入学习流程的条目,都会在四天后被重复(假设 OF 矩阵和 RF 矩阵在第一行第一列的取值没有差异)。这满足了 SuperMemo 的核心前提:重复应该发生在遗忘概率等于 100% 减去以百分比表示的 遗忘指数 的那个时刻。在 SuperMemo 17 中,可以通过 Tools : Statistics : Analysis : Forgetting Curves (或以 3D 形式通过 Tools : Statistics : Analysis : 3-D Curves)查看 遗忘曲线:图: Tools : Statistics : Analysis : Forgetting Curves 显示了 20 个重复序号类别乘以 20 个 A-Factor 类别的情况。图中, 蓝色圆圈 代表重复过程中收集到的数据,圆圈越大,记录的重复次数越多。 红色曲线 对应通过指数回归得到的最佳拟合 遗忘曲线。对于结构不佳的材料, 遗忘曲线 会出现弯折,即并非严格的指数形态。水平的 浅蓝色线 对应要求遗忘指数,而垂直的 绿色线 则显示近似的 遗忘曲线 与要求遗忘指数线相交的时间点。这个时间点决定了相应 R-Factor 的取值,并间接决定了 最优间隔 的取值。对第一次重复而言, R-Factor 对应第一个 最优间隔。 O-Factor 和 R-Factor 的数值显示在图的顶部,后面跟着用于绘制该图的重复案例数量(即 21,303)。在学习过程刚开始时,还没有重复历史,也没有重复数据可用来计算 R-Factor。你需要一些时间,才能画出自己的第一条 遗忘曲线。正因如此,RF 矩阵的初始值取自低于平均水平学生的模型。之所以不使用平均水平学生的模型,是因为从较差的学生参数向上收敛,比反方向收敛更快。图顶部显示的 偏差(Deviation) 参数,反映了负指数曲线与数据的拟合程度,偏差越小,拟合越好。该偏差是用平方差平均值的平方根计算出来的(即最小二乘法中所用的方法)。图: 针对单一条目难度、在不同记忆稳定性水平下(按 U-Factor 归一化)的一组遗忘曲线的 3D 表示。图: 针对混合 复杂度 和混合 稳定性 学习材料的累积 遗忘曲线。该图是将 400 条按衰减常数 0.003567 归一化后的遗忘曲线叠加得到的,该常数对应于在所示时间跨度的 100% 处记忆保持率为 70%(即图右边缘处 R=70%)。该图共纳入了 401,828 个重复案例。各条单独曲线用黄色数据点表示,累积曲线用蓝色数据点表示,反映了全部 400 条曲线的平均记忆保持率。圆圈大小对应数据样本的规模。
- 从遗忘曲线推导 OF 矩阵:OF 矩阵是通过以下步骤从 RF 矩阵推导出来的:
- 沿 RF 矩阵各列,对 R-Factor 的下降趋势进行定点幂函数近似(该定点对应第二次重复,近似曲线在此处经过 A-Factor 取值),
- 对所有列,计算表示该幂函数近似衰减常数的 D-Factor,
- 对 RF 矩阵各列间 D-Factor 变化进行线性回归,以及
- 根据 D-Factor 图中最佳拟合直线的斜率和截距,推导出整个 OF 矩阵。这最后一步所用的具体公式,超出了本说明的范围。
- 条目难度: A-Factor 的初始值,是根据条目获得的首次评分,以及首次评分与 A-Factor 的相关性图( G-AF 图)推导出来的。每次重复中估算出新的 A-Factor 数值,并将其与条目首次评分相关联后,该图都会被更新。真实 A-Factor 数值的后续近似,则是在每次重复后,通过评分、OF 矩阵,以及显示评分与预期遗忘指数对应关系的相关性图( FI-G 图)来完成的。用于计算初始 A-Factor 的评分是经过归一化处理的,即根据实际使用的间隔与遗忘指数等于 10% 时的最优间隔之间的差异进行了调整
- 评分与预期遗忘指数的相关性:FI-G 图会在每次重复后,利用 预期遗忘指数 和实际评分进行更新。 预期遗忘指数 可以很容易地从重复之间使用的间隔,以及由 OF 矩阵计算出的 最优间隔 中推导出来。 预期遗忘指数 越高,评分就越低。通过评分和 FI-G 图(参见 Tools : Statistics : Analysis : Graphs 中的 FI-G 图),我们可以计算出 估算遗忘指数,它对应于刚刚完成重复的条目,在假设的重复前阶段被遗忘的概率(重复后的估计值)。由于遗忘和记忆本身具有随机性,同一个条目在大脑当前的整体认知状态下,可能被记住,也可能不被记住——即便所有相关突触的记忆强度和可提取性完全相同!这样,我们就可以谈论一个刚刚被记住(或未被记住)的条目,在重复之前的记忆概率,这个概率正是由 估算遗忘指数 来表达的
- 计算 A-Factor:根据 (1) 估算遗忘指数、(2) 间隔长度,以及 (3) OF 矩阵,我们就可以很容易地计算出最准确的 A-Factor 数值。请注意, A-Factor 是 OF 矩阵的索引,而 估算遗忘指数 则用来找到 OF 矩阵中的哪一列,其 最优间隔 对应于经过 估算遗忘指数 与 要求遗忘指数 之间偏差校正后的实际使用间隔。每次重复时,都会对旧的 A-Factor 和新估算出的 A-Factor 数值取加权平均。新得到的 A-Factor 会在计算新的最优重复间隔时,用于索引 OF 矩阵
总结一下:重复会得出一组描述学生记忆特性的参数:RF 矩阵、 G-AF 图,以及 FI-G 图。它们同时也用于计算描述学习材料难度的各个条目的 A-Factor。RF 矩阵经过平滑处理后生成 OF 矩阵,后者又被用来计算不同难度( A-Factor)、不同重复次数(对第一次重复而言,则是 记忆遗忘次数)条目的最优重复间隔。最初,学生所有的记忆参数都取自低于平均水平学生的模型(低于平均水平的收敛速度比平均或高于平均水平更快),而所有 A-Factor 则被假定为相等(未知)。
1997 年:引入神经网络
神经网络:兴趣萌发
20 世纪 80 年代中期,我读了迈克尔·阿尔比布(Michael Arbib)的《 大脑、机器与数学》。这本书巩固了我把大脑视为一台高效计算机器的看法。
对任何对大脑运作方式感兴趣的人来说——几乎每个人都是如此——神经网络自然极具吸引力。在学习计算机科学的过程中,我获得了看待大脑与神经网络的一种全新的、计算性的视角。由于神经网络具有惊人的自我建模能力,用它们来研究记忆数据、解答记忆运作方式的问题,似乎顺理成章。然而,神经网络有一个重大缺陷:它们不容易把自己的发现清晰地表达出来。这有点像大脑本身的问题——它能做出神奇的事情,却很难说清楚内部到底发生了什么。编写神经网络软件是件有趣的事,我在 1989 年也曾略有涉猎。但看着神经网络实际运行,乐趣就没那么大了。
SuperMemo 所采用的代数方法之所以胜过神经网络,原因有两点:(1) 我对记忆提出的问题,似乎总是太简单,用不上神经网络;(2) 网络需要数据,数据需要学习,学习需要算法,而算法需要先回答简单的问题。在这场”鸡与蛋”的竞赛中,我的大脑总是比借助神经网络从现有数据中得出的结论快上一步。
代数方法的优势显而易见:只需绘制一条遗忘曲线,再用回归分析找出记忆保持率跌破 90% 的那一点,就能找到最优间隔。在我 1985 年的实验 中,这一点甚至更加极端——我的”遗忘曲线”只有 5 个点,我完全可以只挑自己最喜欢的那一个。那简直是幼儿园水平的练习,根本用不上什么重型武器。
1990 年,在研究 间歇学习模型 的时候,我最接近于真正使用神经网络。1990 年 7 月 6 日,在与 穆拉科夫斯基(Murakowski) 长达 7 个小时的讨论之后,我们得出结论:神经网络也许能提供一些答案。然而,我的电脑当时已经在用代数爬山法处理数据了,这本质上类似于神经网络中的特征提取。一旦我得到了答案,使用神经网络的动力也就消失了。
尽管如此,在 20 世纪 90 年代中期,关于算法适应性以及是否可以采用神经网络的问题越来越多。这些问题主要是那些不太理解 SuperMemo 的人提出的。SuperMemo 背后的模型很简单,优化工具也很简单,而且它们运行得相当好,足以让我们满意。最早的计算方法—— 算法 SM-2 ——至今仍在使用。人们对记忆的不满,通常来自学校课程体系所塑造的不合理期望,以及我们缺乏将知识编写成便于健康吸收形式的能力。而这种缺陷又被我们从学校带来的死记硬背习惯不断强化。SuperMemo 的算法无法弥补这种对学习本身的不满。它们一直表现良好,过去 30 年也带来了可以用数学方式衡量的进步,但这种进步并不容易转化为 学习乐趣 的提升。
推动使用神经网络的声音
在 20 世纪 90 年代,寄给 SuperMemo World 的邮件中经常暗示,神经网络方法会更优越。即便使用 SuperMemo 长达十年,也不能阻止一位学生这样写道:
“SuperMemo 没有考虑到不同用户的能力和需求差异,而是假定每个学习者都是‘差生’。因此,每个学习者都会得到相同的重复间隔,其底层算法是固定不变的,但如果你是一个更优秀/不同类型的学习者,这可能效率不高。[……] 神经网络则考虑到存在各种截然不同类型的学习者,他们需要不同的最优重复间隔。在复习新单词、并通过‘告诉’程序自己表现好坏的过程中,学习者会不断透露出自己究竟属于哪一类型。得到这些反馈后,程序就能在必要时调整并优化其底层的重复间隔”
这段话反映出对 SuperMemo 缺乏理解。SuperMemo 并不使用”差生模型”。它只是在收集到关于学生记忆的第一批数据之前,从较短的间隔开始起步。选择较短间隔的原因,是这样可以更快地逼近最优模型。换句话说,SuperMemo 会针对每个学生进行调整,而”低于平均水平学生模型”只适用于尚未收集任何数据的起始阶段。
在 SuperMemo 中,平均水平学生模型只是在寻找该学生真实记忆模型这一过程中的初始条件。
在有限维轨迹优化问题中,良好的初始状态猜测能带来最快的收敛速度。虽然由于最优间隔函数本身是简单的三维结构,这一点在 SuperMemo 中并不那么明显,但在一般情况下,如果初始猜测不佳,求解过程可能会失败,优化也就无法奏效。与旧版 SuperMemo 出于研究目的所使用的单值矩阵不同,神经网络算法如果没有经过预训练,就会产生混乱的结果。这正是为什么要用先前的学习数据,去更新 SuperMemo 中所用的平均水平或低于平均水平学生模型,以获得最快的收敛速度。
请注意,在 算法 SM-17 中,这种平均水平学生的做法的重要性更低,因为它对学习过程中的多个参数和函数(例如条目难度、稳定性增量函数等)都采用了最佳拟合近似。这意味着 SuperMemo 总会最大限度地利用现有数据(基于我们目前对记忆模型的最佳认知)。
遗忘曲线 的大致形态已经为人所知超过一个世纪(参见: 艾宾浩斯遗忘曲线的误差)。SuperMemo 会针对不同难度、不同记忆稳定性的条目,收集关于遗忘曲线形态的精确数据。基于这些遗忘曲线,SuperMemo 可以轻松推导出最优间隔。这些数据只来自一名学生,而每一次重复都会提升计算的精确度。也就是说,你在 SuperMemo 上花的每一分钟,程序都会对你了解得更深一些。而且,一两个月之后,它对你的了解就已经足够充分了。你完全不需要担心算法的效率问题。
神经网络总带有一种神秘的光环,人们以为它们能揭示所研究现象背后隐藏的特性。但人们容易忘记,如果输入了错误信息,或缺失了某些关键信息,神经网络也很容易失效。间隔重复领域中唯一投入实际使用的神经网络——大卫·卡林斯基(David Calinski)开发的 MemAid——就是这样的例子。
MemAid 网络设计上的错误,在于用”间隔+重复次数”作为输入来表示记忆状态,而这两个变量并不对应稳定性 :可提取性这一对变量。已经证明,稳定性和可提取性才是表示长期记忆痕迹状态所必需的变量。也就是说,该网络并没有获得计算最优间隔所需的全部信息。更好的设计应该对完整的重复历史进行编码,例如使用稳定性和可提取性变量。要体现集中呈现造成的间隔效应,或延迟重复中通过评分带来稳定性的显著提升,就需要完整的重复历史。不过,卡林斯基的设计仍能满足在”最优”间隔中学习的基本要求,与间隔重复的规则(与 算法 SM-2 差不多)相比,偏差并不大。
SuperMemo 是僵化的吗?
“SuperMemo 是带有偏见的,而神经网络没有”——这种说法并不成立。SuperMemo 中的优化矩阵完全有可能偏离记忆模型,产生出乎意料的结果。确实,随着这些年来我们对记忆运作方式的了解越来越深入,SuperMemo 所用的算法也被加上了各种限制条件和定制化的子算法。但这些都不是凭空猜测的结果。SuperMemo 算法中”偏见”的演进,只是对过去多年研究发现的反映。如果任何一种神经网络的实现方式想要最大化其表现,同样也不可避免地会受到这种影响。
同样,认为 SuperMemo 优化矩阵最初预设的数值是一种偏见,这种说法也不成立。这些预设值相当于神经网络中的预训练。没有经过预训练的神经网络,收敛到最优模型的速度也会更慢。这正是为什么 SuperMemo 会用平均水平学生的模型进行”预训练”。
间隔增长的速率是由最优间隔矩阵决定的,绝非固定不变。而且,最优间隔矩阵会随着用户的表现,随时间不断变化。只有在使用数月或数年之后,你才可能产生”这是个固定或僵化算法”的印象(变化速度与可用学习数据量成反比)。这种收敛现象,反映的其实是人类记忆系统本身的不变性。无论你采用代数方法还是神经网络方法来处理这个优化问题,最终都会得到反映你记忆真实特性的间隔重复函数。从这个角度看,收敛速度本身应该被当作衡量算法质量的一个基准——间隔函数”固定下来”的速度越快,算法就越好。
最后,还有一个领域,神经网络必须要么使用已有的记忆模型知识(也就是带上一定的”偏见”),要么就得牺牲效率。实验性的神经网络 SuperMemo、MemAid,以及 FullRecall,都暴露出一个固有的弱点。当间隔产生了期望的效果(例如测得的遗忘指数达到某个特定水平)时,网络才会达到稳定状态。而每当网络偏离最优模型时,就要根据重复中获得的评分,给它输入一个关于最优间隔数值的启发式猜测(例如,评分=5 对应 SuperMemo NN 中最优间隔的 130% ,或 MemAid 中的 120%)。而代数方法的 SuperMemo,则可以计算出难度估算值,利用准确的记忆保持率测量结果,对 稳定性增量 矩阵的数值做出精确调整。也就是说,它不需要去猜测 最优间隔,而是针对那一次具体的重复,直接计算出确切的数值。对记忆矩阵的调整是加权的,能产生稳定、不振荡的收敛。换句话说,正是这个记忆模型,使得消除猜测因素成为可能。在这一点上,代数方法的 SuperMemo 比神经网络版的 SuperMemo 更少带有”偏见”。
微调间隔重复算法的徒劳之处
算法 SM-17 是一次重大的进步,但很多用户并不会注意到这种改进,依然沿用旧算法。这种认知问题导致了”SM3+ 迷思”,我在这篇 文章 中曾试图澄清这一点。与此同时,新算法对进一步研究进展的价值却是巨大的。换句话说,实际需求与理论需求之间存在很大的落差。我在 1994 年接受《Enter》杂志采访时说过的话,至今依然成立:
我们已经看到,进化论支持了 SuperMemo,心理学领域的发现与这一方法相吻合,分子生物学的事实与沃兹尼亚克(Wozniak)模型得出的结论似乎也是相辅相成的。现在是时候看看,上述这些机制在程序本身中是如何被付诸实践的。在重复过程中,SuperMemo 会为学生绘制遗忘曲线,并在记忆保持率——即记住知识的比例——降到预先设定的水平时,安排下一次重复。也就是说,SuperMemo 会检查你一周后还记得多少,如果记得的比预期少,它就会要求你以短于一周的间隔进行重复;反之,它会在更长的一段时间后检查记忆保持率,并相应地增加间隔。这幅简单图景上唯一的小复杂之处在于:不同难度的条目需要用不同的间隔来重复,而且随着学习过程推进,间隔也会不断增长。此外,还必须先知道针对一般人而言的最优重复间隔,并在程序能够收集到关于真实学生的数据之前使用这些数值。显然,要让整套机制运转起来,背后必须有一整套数学工具。总而言之,沃兹尼亚克说,在他的人生中,至少有过 30 天,他觉得 SuperMemo 所用的算法有了显著的升级,每一次都像是一次重大突破。整个开发过程,不过是试错、测试、改进、实现新想法……如此循环往复的漫长过程。可惜,那些美好的日子已经过去了。自 1991 年以来,算法再也没有出现过突破性的改进。稍感安慰的是,从那以后,软件本身开始迅速发展,为用户提供了越来越多的新选项和新方案。那么,SuperMemo 还能变得更好、更快、更有效吗?沃兹尼亚克对此持悲观态度。任何对算法的进一步微调,无论是应用人工智能还是神经网络,都会被淹没在干扰的噪声之中。毕竟,我们的学习并非与世隔绝。当程序把下一次重复安排在 365 天之后,而某个事实恰好在更早的时候被偶然回想起来时,SuperMemo 无从得知这次偶然的回忆,仍会按原计划执行重复。这并不是最优的,但改进算法也无法解决这个问题。如今改进 SuperMemo,就像是在一间嘈杂的汽车装配车间里精调一台收音机。SuperMemo World 的人们现在也不再那么专注于科学本身。在他们看来,在完成了科学层面的发明之后,现在是时候进行 SuperMemo 的”社会性发明”了。
德雷格尔的神经网络项目
1997 年 5 月 20 日,我在前网络时代的 BBS 论坛上结识的网友巴特克·德雷格尔(Bartek Dreger)提出了一个很棒的想法:他也要在波兹南理工大学计算机科学研究所,以 SuperMemo 为题写自己的硕士论文。这将是在我 自己的论文 完成八年之后,不同的是,他打算用神经网络来看看效果如何。尽管他比我年轻将近二十岁,但他的计划是在我在本文其他地方常提到的那个由文格拉兹(Węglarz)领导的运筹学研究团队里进行这个项目。早在 1990 年,纳夫罗茨基博士(Dr Nawrocki)就提出过用神经网络来改进 SuperMemo 的想法,而担任指导老师的,则是才华出众的罗曼·斯沃维恩斯基教授(Prof. Roman Słowiński)。这个项目真的有可能成功。
到 1997 年 6 月,另一位网友皮奥特·维尔泽耶夫斯基(Piotr Wierzejewski)也加入了这个项目,随后又有 3 名计算机科学专业的学生加入进来。这是一支由五个年轻大脑组成的可爱团队,五人年龄加起来正好 100 岁。很快,项目又扩展出一个昵称为”WebSorb”(意为从网络上吸收知识)的在线 SuperMemo 构想。正如热情洋溢的年轻团队常常会遇到的情况,我们把摆到桌面上的东西铺得太大,最终只实现了目标的一小部分。只有在线 SuperMemo 这个想法一直在不断演化,以一种迂回曲折的方式不断分支,期间诞生又消亡了好几个小项目(例如 e-SuperMemo、Quizer、Super-Memorizer、Memorathoner 等等),直到 3GEMs 的出现,它后来变成了 supermemo.net,并最终演变成了今天的 supermemo.com。
在类似项目中,年轻人最大的优势是创造力和热情,而最大的障碍则是学业,以及之后的其他责任,包括养育孩子。这个了不起的智囊团,最终也未能逃脱学校那个古老的问题:一个源于热情的项目,渐渐变成了带有截止日期、报告、测试、考试和评分的学校作业。正如 这里 所解释的,SuperMemo 本身也是在那种充满风险的校园环境中诞生的。成功的关键在于为自由而战——束缚会摧毁热情。 SuperMemo 这个理念之所以能挺过学业的压力存活下来,正是因为我一直 推动教育自由。
神经网络版 SuperMemo :为什么记忆模型对 SuperMemo 算法至关重要
为间隔重复神经网络提出的特征提取方法,依据的是长期记忆两个组成部分的存在——这一点已被充分证实,详见 此处。
这两个记忆变量 足以表示学习过程中一个原子记忆痕迹的状态。有了这些变量,就可以计算出最优间隔,并体现 间隔效应。延迟重复带来记忆稳定性增量的函数关系也早已为人所知。正因如此,一个简单的优化算法,就能轻松快速地确定 SuperMemo 中最优的重复间隔安排。而神经网络则需要为每个条目编码完整的重复历史,最显而易见的编码选择就是记忆 稳定性 (S)和记忆 可提取性 (R)。也就是说,无论是代数方法还是神经网络方法,重复间隔算法的设计背后都是相同的假设。不用说,代数方案更简单、更快,收敛速度快,而且不需要预训练(因为记忆模型已经封装在最优间隔矩阵之中)。
一个使用完整重复历史的神经网络,得出的结果会和用于建立记忆稳定性的爬山算法一样。爬山法只是完成这项工作更好、更快的工具而已,它会带有与神经网络相同的局限性,也就是说,答案的好坏,取决于所提出问题的好坏。
神经网络版 SuperMemo:设计方案
我和巴特克·德雷格尔一起设计了一个简单的人工神经网络(ANN)系统,用来处理间隔重复问题(1997 年 12 月)。需要说明的是,没有克日什托夫·克拉维茨博士(Dr Krzysztof Krawiec)的专业知识,这个项目本不可能完成,他帮助我们完善了整个设计:
归档提示: 为什么使用原文归档?
重复间隔问题,是指在人类学习过程中,计算出最优的重复间隔。这些间隔是针对单个知识片段(后来称为”条目”)、并针对某一具体个人计算出来的。全部的输入数据,就是学生在学习过程中重复各个条目时所获得的评分。到目前为止,这一问题最有效的解决方案,是一系列先后相继的算法,商业上称为 SuperMemo,由波兰 SuperMemo World 的沃兹尼亚克博士(Dr. Wozniak)开发。用于开发最新版本算法( 算法 SM-8)的沃兹尼亚克 记忆模型,还不能被视为对人类长期记忆的终极代数描述。最值得注意的是,突触模式的复杂程度与条目难度之间的关系,目前还没有被很好地理解。如果采用神经网络,在记忆状态、评分与条目难度之间建立起恰当的映射关系,或许能为这一关系带来更多启示。
依照目前最先进的技术方案,神经网络在实时学习过程中的应用是否具有技术可行性,似乎取决于能否恰当运用对学习过程的理解,来充分定义将要交给神经网络的问题。如果只是把成千上万个条目在重复过程中获得的评分历史直接作为输入,就期望网络自己生成解决方案,这是不可能的。这种做法所带来的计算和空间复杂度,自然会远远超出网络实时学习和响应的能力范围。
利用沃兹尼亚克关于长期记忆两个组成部分的模型,我们推测下面这种神经网络方案,可能会带来快速的收敛速度和较高的重复间隔精度。
描述一个特定记忆痕迹(engram)状态所需的两个记忆变量,是记忆的可提取性(R)和稳定性(S)( Wozniak, Gorzelańczyk, Murakowski, 1995)。下面这个方程描述了 R 和 S 之间的关系:
(1) R=e -k/S*t
其中:
- k 为常数
- t 为时间
利用公式(1),我们可以推断在给定稳定性下,可提取性随时间的变化情况,也可以确定在给定稳定性和给定遗忘指数下的最佳复习间隔。
描述每次复习后稳定性变化的确切代数形式尚不清楚。不过,实验数据表明,在复习时机恰当的情况下,稳定性通常会增加1.3到3倍,具体增幅取决于项目难度(难度越大,增幅越小)。通过提供由 SM-8算法 的优化矩阵所得实验数据推算出的最佳复习间隔近似值,可以对神经网络进行预训练,使其能够计算 稳定性函数:
(2) S i+1=f s(R,Si,D,G)
其中:
- S i 为第i次复习后的稳定性
- R 为复习前的可提取性
- D 为项目难度
- G 为第i次复习给出的评分
稳定性函数是神经网络需要确定的第一个函数。第二个函数是项目难度函数,其输入参数与之类似:
(3) D i+1=f d(R,S,Di,G)
其中:
- D i 为第i次复习后的项目难度近似值
- R 为复习前的可提取性
- S 为第i次复习后的稳定性
- G 为第i次复习给出的评分
因此,一个具有四个输入(D、R、S和G)和两个输出(S和D)的神经网络,就可以封装计算复习间隔所需的全部知识(参见: 复习间隔神经网络的实现)。
为验证上述方法的可行性,将采用以下步骤:
- 神经网络的 预训练将基于从 SM-8算法 所用函数推导出的S和D近似函数,以及由此收集的实验数据来进行
- 这样一个预训练完成的网络将以 SuperMemo插件DLL 的形式实现,用以取代Windows版SuperMemo 8所使用的标准 sm8opt.dll。在神经网络DLL的alpha测试阶段,网络的训练将在真实的学习过程中继续进行。将采用专门为此次实验设计的流程,以生成累积结果和最终的神经网络。该流程会用alpha测试阶段所使用的多个神经网络来训练将参与beta测试的网络。alpha测试网络会被输入一个参数矩阵,其输出将作为最终网络的训练数据
- 在最后一步,神经网络的beta测试将直接通过SuperMemo网站向所有互联网志愿者开放。志愿者只需在实验的最后阶段提交各自训练出的网络,用于开发最终的网络。同样,所有beta测试网络都将用于训练最终的网络。未来神经网络版SuperMemo的用户(如果该项目取得成功)将获得一个对人类记忆有相当理解的网络,并能够针对特定学生和特定学习材料在日常活动与学习过程相互干扰的情况下,进一步优化其反应。
所有间隔算法面临的主要问题,是在比较最佳间隔函数的输出与实际应用某一复习间隔所得结果之间存在延迟。每次复习时,都必须记住上一次复习时网络的状态,才能生成网络的新状态。实际上,这就意味着要在各次复习之间存储数量庞大的网络状态。
幸运的是,Wozniak的模型表明,函数S和D与时间无关(有趣的是,它们很可能也与用户无关!);因此,可以采用以下方法来简化这一流程:
| 时间点 | T1 | T2 | T3 |
|---|---|---|---|
| 决策 | I 1N 1O 1=N 1(I 1) | I 2N 2O 2=N 2(I 2) | I 3N 3O 3=N 3(I 3) |
| 上一次决策的结果 | O* 1E 1=O* 1-O 1 | O* 2E 2=O* 2-O 2 | |
| 用于训练的评估 | O’ 1=N 2(I 1)E’ 1=O* 1-O’ 1 | O’ 2=N 3(I 2)E’ 2=O* 2-O’ 2 |
其中:
- E i 是与O i 相关的误差范围(参见 记忆稳定性的误差修正 和 项目难度的误差修正)
- E’ i 是与O’ i 相关的误差范围
- I i 是T i 时刻的输入数据
- N i 是T i 时刻的网络状态
- O i 是N i 在输入I i 后的输出决策,即在T i 时刻、第i次复习之后做出的决策
- O* i 是本应在T i 时刻获得、而不是O i 的最佳输出决策;它可以根据评分和O i 计算得出(评分表明O i 应如何变化才能获得更好的近似值)
- O’ i 是N i+1 在输入I i 后的输出决策,即在第i次复习之后、若在T i+1 时刻做出将会得到的决策
- T i 是给定项目第i次复习的时间
上述方法只需在T i-1 和T i 两次复习之间为每个项目存储I i-1 ,这大大减少了学习过程中所需存储的数据量(E’ i 在训练中与E i 同样有价值)。这样一来,所提出方案的空间复杂度就可以与 SM-8算法 相媲美!整个过程中只需记住神经网络的一个(当前)状态。
以下是本项目当前的实现假设:
- 神经网络:单向、分层,采用弹性反向传播;输入层含四个神经元,输出层含两个神经元,另有两个隐藏层(各含15个神经元)
- 项目难度的定义:与 SM-8算法 中相同,即由 A-因子 定义
- 每个项目存储:上次复习日期、 稳定性 (上次复习时的值)、 可提取性 (上次复习时的值)、 项目难度、上次评分
- 默认 遗忘指数:10%
- 网络DLL输入 (每次复习时):项目编号和当前评分
- 网络DLL输出 (每次复习时):下一次复习日期
- 神经网络DLL的实现语言:C++
- 神经网络DLL的外壳程序,Windows版SuperMemo 98(与32位 SM8OPT.DLL 的外壳相同)
神经网络版SuperMemo:实现
这个网络实际上是被直接奉上了间隔重复算法,唾手可得。它唯一的作用就是随着时间不断微调性能表现。这正是自 SM-5算法 以来所有 SuperMemo 算法所做的事情。从这个意义上说,这一设计并不是要求网络去做出发现,而是要求它在既有发现的基础上加以改进。模型本身已经被写入了设计之中。
存档提示: 为什么使用原文存档?
基本假设
记忆的状态将仅用两个变量来描述:可提取性(R)和稳定性(S)( Wozniak, Gorzelańczyk, Murakowski, 1995)。以下方程描述了R和S之间的关系:
(1) R=e -k/S*t
其中:
- k 为常数
- t 为时间
为简化起见,我们将设k=1,以明确地定义稳定性。
输入和输出
以下函数将由网络来确定:
(2) S i+1=f s(R, S i, D, G)
(3) D i+1=f d(R, S, D i, G)
神经网络应在输入R、S、D和G的情况下,在输出端生成稳定性(S)和项目难度(D):
(4) (Ri, Si, Di, Gi) => (D i+1,S i+1)
其中:
- R i 是第i次复习前的可提取性
- S i 是第i次复习前的稳定性
- S i+1 是第i次复习后的稳定性
- D i 是第i次复习前的项目难度
- D i+1 是第i次复习后的项目难度
- G i 是第i次复习给出的评分
难度D的误差修正
目标难度的定义与 SM-8算法 中相同,即第二个间隔与第一个间隔之比。 神经网络插件 (NN.DLL)将为所有独立项目记录该数值,并将其用于网络训练:
(5) D o=I 2/I 1
其中:
- D o 是用于误差修正的指导难度(D o 越高,难度越低)
- I 1 是为该项目计算出的第一个最佳间隔(对所有项目相同)
- I 2 是为该项目计算出的第二个最佳间隔
重要提示!最佳间隔I 1 和I 2 并非网络在验证之前提出的间隔,而是在所提出的间隔已被执行并验证之后,用于误差修正的间隔(参见 稳定性S的误差修正)!
难度的初始值将设为3.5,即D 1=3.5。这只是为了与SM-8算法保持相似。由于初始难度未知,因此无法用它来确定第一个间隔。在给出第一个评分之后,由于第二个最佳间隔仍未知,因此仍无法进行误差修正。一旦该值已知,就可以用D o 对输出端的D进行误差修正。
为避免网络出现收敛问题,将使用以下公式来确定D的正确输出:
(6) D opt=0.9*D i+0.1*D o
其中:
- D opt 是第i次复习后用于误差修正的难度
- D i 是第i次复习前的难度
- D o 是公式(5)中的指导难度
公式(6)中0.9这一收敛系数是任意设定的,可能会根据网络性能而调整。
稳定性S的误差修正
以下公式由公式(1)在遗忘指数为10%、k=1的条件下推导而得,便于在稳定性与最佳间隔之间进行换算:I=-ln(0.9)*S
在最佳情况下,网络应为每次复习生成所要求的遗忘指数。一旦稳定性S已知,就可以方便地使用可变遗忘指数(参见公式(1))。为简化起见,在后续分析中我们将使用10%的遗忘指数。
为加快收敛速度,网络将针对25类复习分别测量遗忘指数。这些类别由以下两方面设定:(1) 五个难度区间:1-1.5、1.5-2.5、2.5-3.5、3.5-5以及大于5;(2) 五个间隔区间:1-5天、5-20天、20-100天、100-500天以及超过500天。我们将这些类别的遗忘指数测量值记为FI(D m,I n)。此外,还将测量总体遗忘指数FI tot,并用于稳定性的误差修正。
最终目标是使所有类别的遗忘指数都达到10%。稳定性的误差修正将使用以下公式:
(7) FI opt(m,n)=(10*FI tot+Cases(m,n)*FI(m,n))/(10+Cases(m,n))
其中:
- FI opt(m,n) 是属于类别(m,n)的复习之后用于误差修正的遗忘指数
- FI tot 是在各次复习中测得的总体遗忘指数
- Cases(m,n) 是用于测量类别(m,n)遗忘指数的复习案例数
公式(7)旨在随着各个类别中案例数量的增加,将误差修正的权重从总体遗忘指数逐渐转移到该类别记录的遗忘指数上。显然,当Cases(m,n)=0时,FI opt(m,n)=FI tot。当Cases(m,n)=10时,总体FI与类别FI的权重达到平衡;当案例数很大时,FI opt(m,n) 将趋近于FI(m,n)。
下表说明了FI opt(m,n)、评分与所应用间隔修正之间假定的关系:
| 评分 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| FI opt(m,n)>10% | 40% | 60% | 80% | 无修正 | 无需校正 | 无需校正 |
| FI opt(m,n)=10% | 无需校正 | 无需校正 | 无需校正 | 无需校正 | 无需校正 | 无需校正 |
| FI opt(m,n)<10% | 无需校正 | 无需校正 | 无需校正 | 110% | 120% | 130% |
在 SuperMemo中,低于3的评分被解释为遗忘,而等于或高于3的评分则被理解为成功回忆。正因如此,当FI达标时,及格评分不需要校正;当FI高于要求值时,不及格评分也不需要校正。举例来说,若应用间隔为10天时评分为2(遗忘率过高),一个典型的校正值是80%。于是,网络会被告知将间隔=8视为正确值。正确的稳定性则可由S=-8/ln(0.9)推得,并用于误差校正。间隔校正值的具体大小是任意选定的,但不能破坏网络的收敛性。若出现罕见的稳定性问题,可以适当减小校正值(需要注意的是,学习过程中的环境噪声对结果的影响,远远大于校正系数选择不当所带来的影响!)。类似的校正方法曾在历代SuperMemo算法中使用,效果令人满意。
边界条件
为了加快收敛速度,将对神经网络施加以下附加约束:
- 两次连续重复之间的间隔增长率必须至少为1.1(因此难度不能低于1.1)
- 首次重复后的间隔增长率不能超过8,之后的重复中不能超过4
- 首个间隔必须介于1天到40天之间
- 难度值不能超过8
这些条件不会给网络带来不利影响,因为在过去十年间使用SuperMemo及其各种实现的实践中,它们已被充分证实为真。
预训练
在预训练阶段,将使用以下形式的方程(2)和(3):
(8) D i+1:=D i+(0.1-(5-G)*(0.08+(5-G)*0.02))
(9) S i+1:=S i*D i*(0.5+1/i)
其中D 1=3.5,S 1=-3/ln(0.9)。
方程(8)是由 SM-2算法 推导而来的(参见E-因子方程)。方程(9)大致是根据 SM-8算法 中的OF矩阵推导而来的。D 1=3.5与SM-8算法中相同的设定值一致。S 1=-3/ln(0.9)对应于首个间隔为3天、遗忘指数为10%的情形。3天这个数值接近于在广泛的学生群体和学习材料难度范围内取得的平均值。预训练同样会采用前一段中提到的边界条件。
神经网络本身存在诸多问题:实现、程序缺陷、收敛性、干扰等等,不一而足。要真正检验这个网络,唯一有效的办法就是把它接入真正的SuperMemo,看看它在真实数据上的表现如何。我于是想出了一个办法:把算法做成可插拔的DLL插件。这样我们就能在同一个程序外壳中研究不同的算法变体。我们先后试用了 SM-2算法、 SM-8算法,现在轮到神经网络也这样做。遗憾的是,那个DLL实现的方案难度超出了预期。等到那些满怀热情的孩子们毕业后,他们很快就各奔东西,找了工作、结了婚,我也就再没有机会在自己最喜欢的程序外壳——当时的SuperMemo 9(又称SuperMemo 98)——中把这个插件用到自己的学习中去。
神经网络SuperMemo是一个学生项目,唯一目的是验证神经网络在间隔重复中的可行性。不用说,神经网络确实是一种可行的工具。而且,任何可以想到的有效优化工具,只要经过充分的打磨,最终都必然会产生与SuperMemo目前所取得的成果相近的结果。换句话说,只要学习程序能够快速收敛到最优模型,并产生所需的知识保持水平,那么用来实现这一目标的具体优化工具本身反倒是次要的。
考虑到早期阶段遇到的种种问题,我怀疑就算插件做成功了,也未必会改变我对神经网络的看法。我是一个程序员,也是个喜欢动手的人,我喜欢看到自己创造出来的东西究竟是什么样子。神经网络对我来说实在太像个黑箱了。至于那个团队,他们如今在各自的事业上都很成功。这些孩子后来也为SuperMemo的其他一些项目做出了贡献。青春充满创造力,也充满不可预测性,我很高兴我们当年接下了这个项目。
David Calinski 与 FullRecall
David Calinski(生于1981年)是上世纪九十年代早期年轻的SuperMemo爱好者之一。他对加速学习、心理学、精神病学等诸多领域都表现出浓厚的兴趣。
我很快就看出了他的才华,希望能招募他参与一些SuperMemo项目,其中包括Linux版SuperMemo,然而,许多天才都喜欢独来独往。在某个时刻,他从SuperMemo转向了开发自己的应用程序(FullRecall,详见后文),从那以后,他就再也没有放弃过这个项目。
我们关于神经网络的讨论始于2001年。David是SuperMemo的粉丝,但他也承认自己从未真正研究过这个算法。这引出了他的一番批评:
我不清楚SM算法具体的细节(我对此从来都不太感兴趣),但这里重要的是其中的核心思想。SM里的算法接收一些数据(比如重复次数、条目难度、当前评分等等),然后返回它计算出来的下一个最优间隔。这种算法,就算它很”智能”,能以某种方式自我校正,它依然是笨的——它自我校正的程度永远不会超出设计时所设定的范围。
他说得没错, SM-17算法 本质上是与 长期记忆双成分模型 绑定在一起的,不过这是一段美满的联姻。要打破这种绑定,只能靠反面证据,而这样的证据在过去三十年里始终没有出现。
David的立场完全说得通。这一切都取决于建模方式和先验知识。对David来说, SM-8算法 是复杂的。神经网络在他看来则是一种消除这种复杂性的简单方式。而对我来说,我自己的算法就像乘法口诀表一样简单。这种建模上的差异常常会导致认知上的分歧,而这其实是件好事。如果没有这些差异,我们今天对间隔重复中神经网络的了解只会少得多!
2004年我给David写信说: “SuperMemo所用算法的进一步改进,未必能带来学习速度上的进一步提升。不过,在处理一些特殊情况方面,比如大幅延迟的重复、集中式呈现、内容发生变化的条目、条目之间的语义联系等等,仍有改进的空间。有趣的是,算法方面最大的进步很可能来自于对人类长期记忆模型更好的定义。特别是,描述不同可提取性水平下记忆稳定性变化的函数,正在被越来越好地理解。这可能会大幅简化算法。更简单的模型需要更少的变量,从而简化优化过程。基于记忆痕迹的稳定性和可提取性的算法,也可能更好地处理低可提取性的条目。然而,由于学习过程中出现的特殊条目情况只占少数,而测试一个新算法需要好几年时间,目前还不清楚这样的实现是否真的会付诸行动”。
David开发了自己的神经网络,名为MemAid。后来他把它转变成了一款商业产品。从免费转向商业化的过程并不容易,因为用户往往更倾向于价格下降,这一点不难理解。尽管经历了种种起伏,David坚持了下来,而他那种自己动手钻研的劲头,以及对科学和编程的热情,一直是他的优势所在。像Anki一样,他也努力让自己的程序保持跨平台,这也给简洁性带来了一些限制和要求。用他自己的话说: “我热爱速度,热爱不受限制,不想只依赖于某一种解决方案、某一个系统、某一台电脑等等。”
如今FullRecall已经免费。详见 更新日志。

图: FullRecall中的间隔分布。借助神经网络安排的重复
开源的 MemAid项目 于2006年停止维护,但FullRecall延续了下来。另一个受MemAid启发的项目——Mnemosyne——也是如此。不过,Mnemosyne选择使用了他们自己版本的 SM-2算法。直到今天,Mnemosyne仍在生成数据,供间隔重复爱好者或 Mnemosyne项目 的研究人员使用。
和Calinski一样,Peter Bienstman也对较新的算法持怀疑态度: “SuperMemo现在使用的是SM-11。不过,我们对新版SM算法的巨大复杂性能否带来统计学上显著的好处持一定的怀疑态度。但这正是我们希望通过自己的数据收集来弄清楚的事情之一。”
“统计学上显著的好处” 取决于评判标准。对用户而言,具体采用哪种算法可能是次要的。而对研究来说, SM-17算法 则是一座金矿(正如Mnemosyne这类程序所能生成的数据一样宝贵)。
FullRecall中的神经网络为何存在缺陷?
这两个记忆变量 既是表示间隔重复中原子记忆所必要的,也是充分的。而且,这两个变量还可以用来解释集中呈现中的 间隔效应。它们也能解释本文所讨论的、高 遗忘指数 对长期记忆保持所带来的好处。我们把长期记忆的这两个变量分别命名为 稳定性 和 可提取性,它们是表示记忆状态所必需的。任何想要在间隔与回忆之间的关系中寻找规律的神经网络,都必须在输入端接收到完整的记忆状态信息,否则它永远无法计算出最优的间隔。这种状态可以是完整的重复历史记录形式,也可以是稳定性与可提取性这一对数值(如果能够计算出来的话),还可以是从重复历史中推导出记忆状态的其他任何编码方式。
FullRecall网络的设计并不满足这些标准:
- 输入:last_interval_computed_by_ann(神经网络计算出的上一个间隔)[0-2048天](若这不是复习而是首次呈现,则为零)
- 输入:real_interval_since_last_review(自上次复习以来的实际间隔)[0-2048天](同上说明)
- 输入:number_of_repetitions_of_an_item_so_far(条目迄今的重复次数)[0-128]
- 输入:current_grade(当前评分)[0-5,5为最高]
- 神经网络给出的输出:new_interval(新间隔)[0-2048]
间隔和重复次数都无法反映记忆的稳定性或可提取性。在受间隔效应影响的集中呈现中,即便记忆稳定性几乎没有增加,也能获得很高的重复次数。与此同时,在非最优的安排下,长间隔也可能导致稳定性和可提取性双双偏低。简而言之,对于同样的间隔,记忆的状态取决于重复在时间上的分布方式。
这一点可以用一个例子来说明:对于10次重复、1000天而言,先在9天内完成9次重复,再加上991天的间隔,得到的稳定性会趋近于零(假设不存在干扰)。而与此同时,面对同样的一对输入值,如果采用最优间隔安排的重复,则可以带来接近100%的可提取性,以及能够支撑接近1000天最优间隔的稳定性。
唯一能让这个网络表现良好的场景,是用户严格遵循最优的间隔重复安排。而这又只能来自一个经过预训练的网络,比如用 SM-2算法 预训练。在这种情况下,网络其实是不稳定的,也无法收敛到最优状态,因为任何偏离最优安排的情况——包括由网络自身误差造成的偏离——都会使网络的状态偏离原本还能够从输入中计算出记忆状态的那个初始状态。
稳定性和可提取性这两个变量,在理想情况下对于单一的单突触联结已经足够。而在现实生活中,与某个联结相关的语义网络往往会涉及多个这样理想化的单一记忆。这正是SuperMemo采用绝对条目难度这一概念的原因。在 SM-17算法 中,绝对条目难度是由默认 遗忘指数 为10%时,首次最优安排复习所带来的记忆 稳定性 的最大增量来确定的。FullRecall网络同样也没有获得任何可靠的条目难度度量。这会进一步加剧该网络效率低下的问题。
据用户反馈,FullRecall网络据说表现得相当不错。根据本文的分析,这个网络或许采用了精心选择的边界条件,不过这样一来,实际上就等同于回到了旧版SuperMemo所使用的 SM-2算法。不用说,那种旧版SuperMemo算法比SuperMemo现在采用的、基于矩阵的新版代数算法偏差更大、灵活性也更差。
如果FullRecall网络经过了预训练,比如借助 SM-2算法,并且学生严格遵守自己的重复安排,那么这个网络或许还能工作得不错,因为间隔与记忆稳定性之间存在较好的相关性,尤其是当重复次数信息也被纳入其中时。然而,若缺乏适当的边界条件,在 渐进式阅读 中,这个网络必定会失败,因为它可能会接收到虚假的记忆状态信息。视具体情形而定,同样一对”重复次数:间隔”数值,既可能对应稳定性为0的情况,也可能对应与终身记忆相当的最大稳定性。同样,对于网络中同一对输入值,可提取性也可能在0到1之间变化。举例来说,考试前频繁的子集复习,随后是较长的学习中断(比如因为负荷过大造成的),其对应的稳定性和可提取性可能都非常低,尽管它提供的输入与同一时期内正确执行的一系列间隔复习(稳定性和可提取性都高于0.9)完全相同。在 渐进式阅读 中,过载、自动推迟、条目提前、子集复习以及间隔效应,这些对于该网络来说都是不可见的。
假设设计良好,FullRecall的缺陷就只会在间歇性学习中显现出来,而这种情况可能会触发边界条件。这并不应该削弱这款软件本身的价值,我们想强调的只是:神经网络的设计并不容易,最终的效果也可能不尽如人意。
简而言之,它的输入并没有反映出计算最优间隔所需的全部必要信息。特别是,重复次数是衡量记忆稳定性或可提取性的一个很差的指标。更好的做法应该是对完整的重复历史进行编码,或者利用稳定性和可提取性这两个变量来计算记忆状态。无论如何,稳定性和可提取性都必须能够从网络的输入中计算出来。
神经网络在SuperMemo中的未来
在与Calinski的讨论中(2001年),我总结了自己的保留意见,并表示会继续走那条老旧的”保守”路线。17年后,我很高兴当初这样做了。在间隔重复中应用神经网络这一领域,进展一直不算大。这或许恰恰是因为SuperMemo本身就是进步的一种抑制因素。不过,与此同时, SM-17算法 已经揭示出,在间隔重复以及理解人类记忆方面,仍有进一步改进的潜力。只要时间允许,进步还会继续。
SuperMemo将继续沿用其代数算法,理由如下:
- 已知模型:在我们不了解所要映射现象的底层模型时,神经网络更具优势。而遗忘的模型已经为人所熟知,这使得用于计算重复间隔的代数优化方法很容易进行微调。已知模型同样也让SuperMemo能够抵御数据集不均衡的问题,这类问题恰恰可能困扰神经网络,尤其是在学习的初始阶段。最后, 记忆双成分模型 的有效性已经在多方面得到了证实,若是在设计网络时,为了摆脱所谓的”先入之见”而放弃这个模型,那将是一种浪费。这种做法或许只具有研究价值
- 过度学习:由于数组数值的变化是按案例加权进行的,SuperMemo所使用的优化数组不会出现”过度学习”的问题。由于最优间隔函数的大致形态是事先已知的,因此不需要预训练。也不存在数据表示方面的问题,因为所有异常的数据输入都会随着时间被”权重稀释掉”
- 等价性:从数学角度而言,对于连续函数,n输入的网络在映射n个参数的函数时,与n维数组是等价的,唯一的区别在于”参数分辨率问题”。参数分辨率问题的范围,也就是参数取值范围的有限个数,在很大程度上取决于具体函数。粗略地看一下SuperMemo所展示的优化数组就能发现,其”参数分辨率”远远超过了这种特定类型函数实际所需的程度,尤其是考虑到数据中存在大量”噪声”这一点。SuperMemo中使用的爬山算法,与那些旨在对网络进行重新加权的算法有几分相似
- 研究价值:SuperMemo中矩阵的使用,让人可以直观地看到”记忆运作的过程”。神经网络则不那么容易被观察,它们无法有效地展示自己的发现——你无法看出某一条单独的遗忘曲线是如何影响最优间隔函数的。这意味着,神经网络的黑箱特性,使其作为记忆研究工具的吸引力大大降低
- 收敛性:算法的复杂性并不是来自记忆模型本身的复杂性。大部分复杂性来自于那些旨在加快优化过程收敛速度、同时又不损害其稳定性的工具。而这种精细调整之所以能够实现,正是因为我们对底层记忆模型有着深入的了解,加上多年来收集的实际学习数据,帮助我们精确确定了模型各个组成部分的最佳近似函数
- 遗忘曲线:要确定给定遗忘指数下的最优间隔,唯一的方法就是了解特定难度等级和记忆稳定性下的(近似)遗忘曲线。如果一个神经网络不去尝试映射遗忘曲线,它就会始终在最优间隔值附近来回震荡(好的评分会拉高这个值,差的评分则会拉低它)。由于数据存在噪声,这在实际中只是一个理论上的问题;不过,这恰恰说明了使用稳定性-可提取性-难度-时间关系的符号化表示、而不是依赖近乎无穷多种可能的遗忘曲线数据集,是多么强大的做法。如果神经网络不对遗忘曲线进行加权映射,它就永远无法收敛,换句话说,它会一直在最优模型附近来回震荡。而如果神经网络把状态历史和/或遗忘曲线纳入考量,那么它所采取的方式其实就和目前的SuperMemo算法一样了——而这恰恰是神经网络本来想要取代的东西
换句话说,神经网络确实可以用来计算间隔,但从计算能力、研究价值、稳定性,以及最重要的收敛速度来看,它似乎都算不上最佳工具。在设计一个最优神经网络时,我们会遇到与设计代数优化过程相似的难题。最终,”经典”SuperMemo中所设置的各种边界条件,迟早都会在网络设计中重新出现(可参见: 神经网络SuperMemo)。
和所有函数近似问题一样,工具的选择以及算法上的细微调整,都会在收敛速度和映射精度上带来天壤之别的差异。神经网络或许可以用来映射那些鲜为人知的辅助函数,这些函数是用来加快代数算法收敛速度的。举例来说,直到今天, 条目难度 的估算问题依然没有完全被攻克。我们能做的,也只是告诉用户尽量把知识内容保持简单,而这也正是任何一位深知人类记忆的记忆局限的教育者都会给出的普遍建议。
1999年:选定名称——”间隔重复”
寻找一个好的、独特的名称
” 间隔重复 “这个词其实历史悠久,在广告业和行为学研究中已经使用了几十年。然而,这个词基于 最优复习间隔 的现代含义,是直到这个名称被用来代表 SuperMemo方法 (始于1999年)之后才确立下来的。
在 SuperMemo World 创立初期,我们积极地寻找一个公认的科学术语,用来在学术语境中指代” SuperMemo方法“。公司的营销策略是要摆脱” 一个学生开发的程序“这种形象,转变为” 一种基于科学方法的程序“。遗憾的是,除了关于 间隔效应 的短期研究之外,记忆与学习方面的文献相当匮乏,H. Bahrick关于西班牙语词汇保持的研究算是一个值得注意的例外。
长久以来,记忆研究者们一直在研究各种各样的” 重复 安排”。有时他们使用以分钟计的间隔,有时则用”插入的 条目“来分隔复习。三种复习模式最为常见:(1) 集中式 ,即在短时间内进行大量 重复;(2) 分散式 ,即重复分散在时间中进行;以及(3) 扩展式 ,即间隔逐渐增大。间隔重复正是依赖于这种逐步扩展的安排。几十年来,记忆学文献一直无法就如何称呼这种扩展式安排达成一致。Pimsleur使用了 渐进间隔 一词,Bjork使用了 扩展性复习,Baddley使用了 分散练习,我在自己的 硕士论文 中使用了 渐进式安排,而Pavlik则使用了更为一般化的 最优安排 (我们知道这实际上就是渐进式的),等等。
Frank N. Dempster的一篇开创性文章” 间隔效应:一个未能应用心理学研究成果的案例研究“(《美国心理学家》,43,627-634,1988年)为 SuperMemo 的早期发展提供了助力。这篇文章痛心地指出,教育者在学习实践中忽视了 间隔效应 这一事实。SuperMemo恰好可以填补这一空白,提供一个简单通用的间隔学习工具。Dempster在文中随意使用了诸如”间隔呈现”、”间隔复习”、”间隔练习”、”间隔测试”,甚至”间隔阅读”或”良好间隔的呈现”等各种说法。
我们选定了” 重复间隔化“这一术语,用来取代” SuperMemo方法“这种说法。而 第一篇用英语撰写、描述 计算式间隔重复 的学术文章 (1994年)中,使用的仍然是” 重复间隔化“这个说法。
选定名称:间隔重复
1999年2月3日,受到一位 SuperMemo 用户( Tony D’Angelo)来信的启发,我用关键词” 间隔重复“查阅了相关文献。经过这番查阅,我 确信 我们应该从使用” 重复间隔化“这个说法,转向使用” 间隔重复“。” 间隔重复“这个词同样冷僻,使用率也很低,但相比” 重复间隔化“而言,使用次数要略高一些。
我们决定,在未来的SuperMemo中,应该使用” 间隔重复“这个说法,取代” 重复间隔化“。这个词在 supermemo.com 上首次出现,大概是在2000年2月4日发表的 《SuperMemo毫无用处》 一文中
随着时间的推移,” 间隔重复“这个词变得越来越流行。从这个角度来看,SuperMemo也可以说功不可没,正是它让这个通用的科学术语在公众心中扎下了根,并与学习中的 最优间隔 这一具体概念联系在了一起。
名称的未来:间隔重复
自1999年以来,很大程度上是因为我们对这个名称的选择,” 间隔重复 “这个词在涉及闪卡应用(包括基于 莱特纳系统 的那些应用)的文本中,已经稳固地确立了自己的地位。我们也希望,这个词将在科学文献中占据主导地位。所有作者都倾向于坚持自己多年甚至几十年来一直使用的术语。不过,很大一部分术语统一的加速过程,可以归功于维基百科。在那里占主导地位的术语正是 间隔重复,不过,记忆科学家们往往更倾向于使用 间隔提取 或者 分散练习 (这是一个更宽泛的概念)。此外还有一些” 孤岛词条“,比如 间隔学习,被垃圾信息机器人归功于 Paul Kelly (当时是Monkseaton高中的校长)。
这种混乱造成了间隔重复的研究与大众应用之间的脱节,但两者的合并与统一只是时间问题。维基百科有一个” 合并提议“的概念。科学家们可能会反对把他们那种”干净”的版本,与掺杂了商业链接的大众版本合并到一起。然而,这样的合并终将不可避免,而且是件好事。如今有一些研究间隔重复的科学家,甚至不知道”间隔重复”这个词,也从未听说过 SuperMemo。同样也有一些开发间隔重复算法的工程师,对这一领域实际的记忆研究知之甚少。统一术语可以缓解这两方面的问题。剩下的事,谷歌会去完成。
在” 间隔重复“这一旗号下统一术语,将有利于进一步的研究和大众应用的发展
2005年:稳定性增长函数
为什么一个简单的想法迟迟无法实现?
一套完美描述长期记忆的数学模型,如今眼看就要触手可及。这在今天看来或许令人惊讶,但即便这套模型本身如此简单,也足足花了三十年的时间,历经种种断断续续,才最终得以成型。在人类的种种努力中,科学往往只是人类好奇心的一个副产品,而其他一些当务之急的项目常常会优先得到资源。科学的问题在于它是盲目的,在秘密被揭开之前,它几乎什么都不会告诉你。这个故事给我们的一个启示是:所有政府和企业都应该不惜投入资源来支持优质的科学研究。科学有点像 SuperMemo ——今天看起来回报似乎微不足道,但从长远来看,其带来的好处可能令人惊叹。
如今,凭借 SM-17算法 所采用的一整套工具,我们几乎可以近乎完美地描述记忆。制约我们进一步理解记忆的唯一限制,就是想象力、可用的时间,以及提出正确问题的能力。工具我们都已经具备,数据我们也拥有大量。我们甚至还有相当一部分与睡眠日志相结合的数据,这些数据现在可以为模型增添一个新的维度:学习的体内平衡准备状态、体内平衡性疲劳,乃至昼夜节律因素。
SuperMemo背后这个故事的一个重要启示是:如果你有一个想法,那就把它付诸实践(除非你有另一个更好的想法)。想法的麻烦之处在于,它们往往看起来远没有实际那么吸引人。我在 1984年 绘制了我的第一条 遗忘曲线,几个月后就把它忘得一干二净,直到34年后,在我整个生活都围绕遗忘曲线打转的时候,才重新想起这件事。可以想象当时那种惊讶!当我想出第一个间隔重复算法时,我花了两年多的时间才决定招募第一位用户。如果没有 Tomasz Kuehn,Windows版SuperMemo或许要晚两到四年才能问世。如果没有 Janusz Murakowski,SuperMemo中至关重要的大数据——重复历史记录——或许会推迟一到两年。当 渐进式阅读 在2000年问世时,只有我一个人知道这是件了不起的大事。不过,即便是我自己,也花了相当长的时间才真正体会到这件事的分量。如今,我知道 神经创造力 是一种突破性的工具,但我依然对它使用得不够上心,远不如它那个更简单的替代方案—— 子集复习 用得频繁。
1990年:最初的线索
SM-17算法 经过了将近四分之一个世纪的孕育才得以成型。在为本文准备素材的过程中,我在自己的档案里找到了一张名为”new strength(新强度)”的矩阵图片,行标记为”strength(强度)”,列标记为”durability(耐久度)”。这正是1988年至1990年间用来称呼 稳定性 和 可提取性 的原始名称。就像一块古老的化石一样,这张纸告诉我,SM-17算法的构想必定是在1990年前后诞生的。

图: 一张名为”new strength(新强度)”的矩阵图片,行标记为”strength(强度)”,列标记为”durability(耐久度)”。这正是1988年至1990年间用来称呼 稳定性 和 可提取性 的原始名称。这张纸表明, SM-17算法 的构想必定是在1990年前后诞生的。
从 记忆双成分模型 最初诞生的时候起,我就一直想围绕它构建一个算法。但我的动力一直不算强烈—— SuperMemo 本身运作得已经足够好,这使得这件事看起来只是一个精巧的理论练习。然而,今天我发现,这个算法为一个能够回答许多关于记忆问题的模型提供了数据。其中有些问题实际上此前从未被人提出过(比如关于 稳定性 的各个子成分)。这一点其实也和 SuperMemo 本身颇为相似。它一直以来都很艰难,因为它的价值在理论层面很难被人真正认识到。真正能改变优秀学生想法的,往往是实际效果。
1993年:分心
1993年,我自己的想法反倒成了进步的阻碍。对算法的进一步探索被视为次要事项,它们对用户来说带来的好处不会太多。记忆建模纯粹是一种”空中楼阁式”的基础研究。参见:微调算法的徒劳无益。当时,正是 Murakowski 最努力地推动这项进步。他一直抱怨说:” SuperMemo一直在白白流失具有诺贝尔奖价值的数据“。他近乎恶言相向地对我大喊:” 现在就把重复历史记录实现出来!“。这其实只是一场优先事项之争。我们当时手头有新的Windows版SuperMemo要做,还有音频数据的引入、CD-ROM技术的到来,以及来自实力雄厚的竞争对手的冲击——包括在国内,Young Digital Poland公司比我们早了大约一个月,抢走了本国首款CD-ROM产品的头衔。我们至今仍很自豪地认为,自己拥有波兰第一款Windows版CD-ROM产品的殊荣。虽然它实际上仍是在美国制作的,但其内容完全是在波兰制作完成的,几乎百分之百是纯粹的波兰版SuperMemo。
1996年:风险投资
1996年2月,所有的障碍都被清除了,SuperMemo终于开始收集完整的重复历史数据(在当时,这仍然只是一个选项,目的是防止无用数据把性能较弱的系统堵塞住)。我自己的数据现在大部分可以追溯到1992-1993年,因为1996年2月时所有条目的最近一次重复,仍然可以从间隔轻易地反推出来。我甚至还有相当多可以追溯到1987年的历史记录。出于我对数据近乎强迫症般的执着,我曾手动记录一些特定条目的进展情况,后来又通过手动编辑补全了它们的重复历史。因此,我自己的数据现在是间隔重复领域中跨度最长的重复历史数据。整整30年的数据,其中大规模覆盖了22到25年的学习过程。这真是一座金矿。
1996年9月29日,星期日的晚上,我花了两个小时的时间,勾勒出基于 记忆双成分模型 的新算法。一切看起来都非常简单,也不需要太多工作。SuperMemo刚刚开始收集重复历史,所以我手头应该已经有了充足的数据。我们的重心从多媒体课程(比如Cross Country)转向了更简单的项目,比如 Advanced English。这似乎是个不错的时机。不巧的是,第二天我们就接到了Antek Szepieniec打来的电话,他刚和美国的投资人谈过,梦想着把 SuperMemo World 打造成第一家在纳斯达克上市的波兰公司。他激动地预言,我们很有希望获得数百万美元的风险投资注入。这一下子把我推进了新的角色和新的工作之中。从坏的方面来说,这让 SM-17算法 的问世推迟了整整二十年。从好的方面来说,超媒体SuperMemo的概念——也就是 知识机器,又称 渐进式阅读——在理论和设计方面获得了巨大的推动力。实践又一次战胜了理论研究。
2005年:理论方法
2000年,随着 渐进式阅读 的出现,以及后来2006年 优先级队列 的引入,延迟重复的需求以及提前复习的需求都急剧增加。这就需要大幅偏离最优状态。旧版的 SM-8算法 无法有效应对这种情况。最优间隔函数必须扩展到时间这个维度上去(也就是 可提取性 这个维度)。我们需要一个 稳定性增长 函数。
科学进步中一个非常有趣的动态是:对现实世界的枝蔓式探索,往往需要达到某种”临界脑力质量”,才能真正把一个新想法推动起来。2005年, Biedalak 和其他人当时大多不在这个圈子里,忙于把SuperMemo作为一项生意来推广。而我则正在朝着 渐进式阅读 中的一项重大突破迈进:处理信息过载问题。随着维基百科的出现,人们突然发现,导入海量的知识几乎不费什么力气,但低优先级的知识却很容易凭借数量优势淹没高优先级的知识。于是,丰富反而损害了知识的质量。我给这个问题的解决方案,就是采用 优先级队列。这一方案要等到2006年才得以实现。而在此期间, Gorzelańczyk 和 Murakowski 则都在忙于各自的科研项目。
Gorzelańczyk过去常去克拉科夫参加一场控制论会议,而这场会议的召集人正是我早年的灵感来源之一: Ryszard Tadeusiewicz教授。为了准备他2005年的报告,Gorzelańczyk建议我们更新一下记忆模型。随着分子生物学领域新数据的大量涌现,距离上一次建立公式已经过去了十年,情况可能已经天翻地覆。我觉得,我自己关于寻找记忆稳定性构建公式的想法,正好可以作为一个很好的补充。这个最初的火花,很快在与Murakowski的交流中获得了动力。如果没有这三个人齐心协力、彼此激发热情,接下来这一步显而易见的进展,是不可能实现的。借助最初用于 1990年间歇性学习模型 的工具,我决定着手找出 稳定性增长 的函数。一旦我的电脑开始处理数据,各种有趣的小发现就接连不断地涌现出来。原本以为只需要几个晚上就能完成这项工作,结果却花了整整半个冬天。
2013年:重新唤醒宏观视野
和2005年一样,2013年同样需要积累起足够的”临界脑力质量”,才能把新的解决方案推动起来。不过,这一次我必须把大部分功劳归于 Biedalak。正是他起到了压倒天平的作用。在一场为了让 SuperMemo 的领先地位和开创性成就得到承认而永不停歇的战斗中,他要求我们继续推进这个项目,还特意让我休了一段短暂的创意假期,专心把它完成。原本以为这只是一个冬天就能完成的项目,结果却花了两年,而且至今仍占据着我大量的时间。
2014年11月9日,我们进行了一次长达26公里的徒步,讨论新算法的问题。”边走边聊”是我们 最有效的头脑风暴方式,总能带来丰硕的成果。第二天,我们在一处游泳池碰面,还有大数据的崇拜者Leszek Lewoc加入我们,他总是能想出许多绝妙的点子(我第一次见到Lewoc是在1996年,他的妻子据说早在1992年就已经是SuperMemo的用户了[verify!])。那次头脑风暴得出的简单结论是:利用 记忆双成分模型 来简化算法的思路,简化其中的术语,让它更加平易近人(不再有什么 A-因子、 U-因子、 R-因子 之类的东西了)。
记忆稳定性随复述而增长
要理解 SM-17算法,了解用来推导出 记忆稳定性增长 公式的具体计算过程会很有帮助。2005年,我们的目标是找出适用于任意有效R值和S值的稳定性增长函数: SInc= f(R,S)。当时所用的目标和工具,与1990年构建 间歇性学习模型 时所用的颇为相似。
存档提示: 为什么要使用原文存档?
直到2005年,我们都还无法建立一个通用公式,把一次重复与 记忆稳定性的增长 联系起来。重复间隔化算法当时依赖的,只是对稳定性在采用所谓最优重复间隔时如何增长的一种大致理解(这里的最优间隔,定义为能产生一个通常超过90%的、已知回忆率的间隔)。 最优间隔 一词用来指代该间隔在学习中的适用性。上述重复间隔化算法,也能以矩阵形式确定出最优间隔下精确的稳定性增长函数。然而,人们对于低可提取性水平下(也就是间隔并非 最优 的情况下)稳定性的增长却知之甚少。借助 SuperMemo 所收集的数据,我们现在可以尝试填补这一空白。尽管SuperMemo在设计上是为了在学习中应用最优间隔,但在现实生活中,用户常常由于各种原因(比如假期、生病等)被迫延迟重复。这就使得几乎每一份学习材料中,都会出现相当数量的、 可提取性 较低的重复。此外,2002年,SuperMemo引入了”中间间隔重复”的概念,使得缩短重复间隔成为可能。尽管在任何一份数据中,中间间隔重复所占的比例都非常小,但只要数据样本足够大,可提取性极低和极高的重复案例数量,应该就足以让我们把关于记忆稳定性增长的发现,从可提取性为0.9的情形推广到整个可提取性范围。
要通过学习最优地建立记忆稳定性,我们需要知道 最优间隔函数,或者换一种说法, 稳定性增长函数( SInc)。这些函数都接受三个自变量: 记忆稳定性(S)、 记忆可提取性(R) 以及知识难度(D)。传统上,SuperMemo一直专注于S和D这两个维度,因为在计算重复间隔的优化过程中,保持较高的可提取性是主要的判定标准。而对S和D的关注,正是由稳定性增长函数的实际应用所决定的。在本文中,我们把重点放在S和R上,因为我们试图通过分析”纯知识”——也就是那些容易学习、非复合性的记忆痕迹——来消除D这个维度。消除D维度让我们的理论探讨变得更容易,之后得出的结论还可以进一步推广到复合记忆痕迹以及被认为难以学习的知识上。换句话说,随着我们从实践转向理论,我们关注的重点也从(S,D)这一对参数,转移到了(S,R)这一对参数上。基于这一思路,我们所调查的所有数据集都按条目难度进行了筛选。同时,我们还寻找尽可能大的数据集,以便在这些数据集中,由于复述延迟(违反了最优重复间隔安排)而产生的、低可提取性条目所占的比例足够大。我们开发了一套两步程序,用来针对 难度低且均匀的 难度 数据集(也就是所谓易于在记忆中保持的、表述良好的知识数据集),针对不同的 可提取性 水平,提出稳定性增长的符号公式。表述良好且统一的学习材料,能让我们更容易地提炼出通过复述实现长期记忆巩固的纯粹过程。正如本文其他部分所讨论的,表述不良的知识会导致多个独立巩固过程相互叠加,因而不适用于本文所进行的分析。
两步计算法
在SuperMemo 17中,可以遍历完整的重复历史记录来收集 稳定性增长 数据。这样就可以绘制出 SInc[] 矩阵的图形表示。随后,这个矩阵可以用来尝试找出 稳定性增长 函数的符号化近似表达。2005年所采用的正是同样的思路,只不过当时的过程要简单得多。这一方法可以帮助我们更好地理解 SM-17算法:
存档提示: 为什么要使用原文存档?
确定记忆稳定性增长函数 SInc 的两步流程:
- 第一步:使用 SInc 的矩阵表示形式,并通过一个迭代过程,最小化真实学习过程(数据)中的评分与 SInc 所预测评分之间的 偏差 Dev。 Dev 的定义是:对给定知识条目的一系列重复中, R-Pass 之和,其中 R 是可提取性, Pass 对于及格评分取1,对于不及格评分取0
- 第二步:使用爬山算法求解一个最小二乘问题,用以评估 SInc 的各个符号候选公式,从中找出与第一步所得的 SInc 矩阵拟合效果最好的那一个
计算稳定性增量
稳定性增量 ( SInc[])矩阵已在 第一步 中计算完成。2005年时,我们可以任意选取一个合理的 SInc 初始假设值。如今,由于我们已了解该函数的近似性质,可以加快这一过程,使其变为非迭代式(参见 SM-17算法)。
存档提示: 为什么要使用文字存档?
让我们定义一个针对给定复习模式计算记忆稳定性的程序。该程序既可以基于学习过程中实际打出的评分来计算稳定性(实践型变体),也可以仅基于复习时间间隔来计算稳定性(理论型变体)。两者唯一的区别在于:实践型变体允许根据不及格评分所反映的随机性遗忘对稳定性进行修正。
在下文中,我们将使用以下符号:
- S(t) —— 时间t时的记忆稳定性
- S[r] —— 第r 次 复习后的记忆稳定性(例如S[1]表示学习一条新知识后的记忆稳定性)
- R(S,t) —— 稳定性为S、经过时间t后的记忆可提取性(我们知道R=exp -k*t/S ,且k=ln(10/9))
- SInc(R,S) —— 在可提取性为R、稳定性为S的情况下,一次复习所带来的稳定性增量,满足 SInc(R(S,t),S(t))=S(t )/S(t’)=S[r]/S[r-1](其中t’和t 分别表示记忆巩固前后进行复习的时间,且t -t’与零无法区分)
我们的目标是找到适用于任意有效R和S水平的稳定性增量函数: SInc= f(R,S)。
如果我们为 SInc(R,S) 取任意合理的初始值,并令S[1]=S 1 (其中S 1 是首次接触复习后由记忆衰减函数得出的稳定性,对应最优复习间隔),那么对于每一段复习历史,我们都可以通过以下迭代方式计算S:
r:=1;
S[r]:=S1
repeat
t:=Interval[r]; // where: Interval[r] is taken from a learning process (practical variant) or from the investigated review pattern (theoretical variant)
Pass:=(Grade[r]>=3); // where: Grade[r] is the grade after the r-th interval (practical variant) or 4 (theoretical variant)
R:=Ret(S[r],t);
if Pass then
S[r+1]:=S[r]*SInc[R,S[r]]
r:=r+1;
else begin
r:=1;
S[r]:=S1;
end;
until (r is the last repetition)
在 SM-8算法 中,我们可以利用首次间隔图来确定S 1,该值会随着每次不及格评分而逐渐缩短。
我们以矩阵 SInc[R,S] 的一个假设初始值开始迭代过程,例如像 SM-2算法 那样,将所有条目任意设为 E-因子。
然后,我们可以持续对现有的复习历史数据使用上述程序,计算出新的 SInc[R,S] 值,使其与实际学习过程中打出的评分之间的 偏差 更小(为此我们使用 R-Pass 差值)。
如果我们观察到以下情况,就可以进行渐进式改进:
存档提示: 为什么要使用文字存档?
- 如果Pass=true且S[r]<Interval[r],则 SInc[R,S[r-1]] 条目被低估了(可以朝Interval[r]/S[r]* SInc[R,S[r-1]] 的方向进行修正)
- 如果Pass=false且S[r]>Interval[r],则 SInc[R,S[r-1]] 条目被高估了
我们可以对 SInc[] 进行迭代,使其值逐渐与学习过程中打出的评分相吻合。这种方法可以确保无论初始化时设定的 SInc[R,S] 初始值是多少,最终都能得到相同的 SInc[R,S] 终值
在 SM-17算法 中,我们不再采用上述这种“开关式”渐进方法,而是使用真实的 遗忘曲线 来更准确地估计 可提取性,再据此修正估计出的 稳定性。最终的稳定性估计值综合了 可提取性 的理论预测、从 遗忘曲线 中取得的实际 回忆情况(按数据可用性加权),以及如上文所述将实际评分与间隔相结合得到的结果。通过整合这三种信息来源, SM-17算法 能够给出稳定性/间隔估计值,而无需反复对 SInc[] 矩阵进行迭代。
稳定性增量的符号公式
经过多次迭代后,我们得到了使误差最小化的 SInc 值。该过程是收敛的。有了 稳定性增量 矩阵后,我们便可以寻找表达稳定性增量的符号公式。
稳定性增量对S的依赖关系
存档提示: 为什么要使用文字存档?
在第二步中,我们将利用此处得到的 SInc[R,S] 矩阵,推导出 SInc 的符号公式。
第二步 ——将 SInc 表示为符号公式
现在我们可以使用任意一种梯度下降算法,评估各种SInc候选符号公式,找出与上文得到的SInc矩阵拟合度最高的一个。
观察SInc矩阵可以立即发现,当R保持不变时,SInc作为S的函数可以用一个负幂函数很好地描述,如下方示例数据集所示:

在同一图表的双对数版本中,这一点更加明显:

上述关于 SInc 与 S 之间幂函数依赖关系的结论,与此前的发现相互印证。特别是,在 SuperMemo 中,R-因子随复习类别下降的趋势,一直以来都能用幂函数最好地拟合
稳定性增量对R的依赖关系
正如 间隔效应 所预示的那样, SInc 在 R 较低时会更大。但要注意,2005年所用的方法可能引入了一个假象:记忆痕迹随时间存活的情况会线性地作用于新的稳定性估计值。由于 遗忘 具有随机性,这就产生了问题——记忆存活时间更长,可能只是偶然因素所致。在 SM-17算法 中,我们使用了更多证据来估计稳定性,并将 存活间隔 与其他所有证据一并加权考量。
存档提示: 为什么要使用文字存档?
在寻找S恒定时 SInc 与R之间关系的函数时,我们发现数据中的噪声更多,这是因为SuperMemo在低R值处产生的样本要少得多(其算法通常会尽量使R>0.9)。尽管如此,通过检查多个数据集,我们得出了一个有些出人意料的结论:R降低时, SInc 呈指数增长(后文将说明这种增长如何导致 SInc 与时间之间近乎线性的关系)。这种增长的幅度比预期更大,进一步证明了 间隔效应 的强大作用。这一结论应当会对学习策略产生重大影响。
下面是S恒定时SInc作为R函数的一组示例数据。可以看到,SInc=f(R)可以用一个负指数函数相当好地拟合:

以及同一图表的半对数版本,其线性近似趋势线的截距设为1:

有趣的是,当可提取性为100%时,稳定性增量可能小于1。一些分子层面的研究表明,复习那一刻记忆的不稳定性(易变性)会增加。这再次证明,反复填鸭式复习带来的损害,并不仅仅是浪费额外的时间。
稳定性增量对可提取性的依赖关系(2018年)
尽管存在算法差异和各种假象,但对于 表述良好的知识 而言, 稳定性增量 对 可提取性 的依赖关系,与13年后由 SM-17算法 根据数据得出的结果几乎完全一致。
请回想一下,在 SuperMemo 中,我们使用 遗忘曲线 来更准确地估计 可提取性,再据此修正估计出的 稳定性。通过整合多种信息来源, SM-17算法 可以给出更准确的 稳定性 估计值。此前提到的那个假象仍然存在——记忆痕迹的存活情况会线性地影响新的稳定性估计。这一假象可以通过参数化的方式加以权衡消除。然而,每次 SuperMemo 尝试这样做时,其性能指标都会下降。
尽管做了各种改进,数据集也大得多(尤其是低R区间),但对于简单条目来说, 稳定性增量 对 可提取性 的依赖关系似乎已经固定不变。
然而,一旦加入 困难 知识,这幅完美的图景就会崩塌。这部分是因为削弱了上文提到的 长期存活 假象所致。正因如此,新版SuperMemo不再依赖这个看似已被充分证实的记忆公式:

图: 长期记忆的 强度 取决于 复习 的时机。对于 表述良好的知识 而言,较长的复习延迟会带来 记忆稳定性 的大幅增长。最佳复习时机应在这种增长与 遗忘概率 之间取得平衡。在图中, 稳定性增量 与 可提取性 对数(log(R))之间呈线性关系。log(R)表示的是时间。绘制该图使用了近27,000次 复习。观察到的复习前 记忆稳定性 分布范围从2天到110天。在最低的 可提取性 水平下,观察到 稳定性 最大增长接近10倍。此 稳定性增量 矩阵是在SuperMemo 17中用 SM-17算法 生成的
记忆稳定性增量公式
有了稳定性增量矩阵之后,我们就可以寻找稳定性增量的符号表达式。2005年得到的方程,后文将称之为 SInc2005方程。请注意, SM-17算法 所使用的公式有所不同:
存档提示: 为什么要使用文字存档?
在知识难度恒定的前提下,我们采用了二维曲面拟合的方法,得出了 SInc 的符号公式。我们使用了改良版的Levenberg-Marquardt算法,测试了多个可能准确描述 SInc 作为S和R函数的符号函数候选形式。该算法还加入了持续的随机重启循环,以确保能找到全局最大值。我们发现,下面这个公式 (SInc2005方程) 给出的效果最好:
SInc= aS -b *e cR+ d
其中:
- SInc —— 一次成功复习所带来的记忆稳定性增量(复习前后稳定性S的比值)
- R —— 复习那一刻的记忆可提取性,以百分比形式表示的回忆概率
- S —— 复习前的记忆稳定性,以能产生R=0.9的间隔来表示
- a、 b、 c、 d —— 针对不同数据集可能略有差异的参数
- e —— 自然对数的底数
参数 a、 b、 c、 d 在不同数据集之间会略有变化,这可能反映了用户与知识之间交互方式的差异性(也就是说,不同用户接触的学习材料集合可能导致难度分布不同,评分标准也可能不同,这些都会影响最终的测量结果)。举例来说,从多个数据集中取平均值,得到的 a、 b、 c、 d 为: a=76、 b=0.023、 c=-0.031、 d:=-2,其中 c 在各数据集之间变化很小,而 a 和 d 则表现出相对更大的差异。参见示例: 如何使用该公式计算记忆稳定性?
从稳定性增量公式得出的结论
上述 稳定性增量 公式与后来的研究结果略有差异。例如,它似乎低估了 稳定性增量 随S增大而下降的幅度( b 值偏低)。不过,该公式仍可用于推导出许多有趣的结论。
复习价值随时间呈线性增长
由于 间隔效应 的作用, 记忆稳定性 增长的潜力会随着时间推移,以近乎线性的方式持续增大:
存档提示: 为什么要使用文字存档?
上述公式得出的 SInc 值,与同质数据集(即针对单一学生、单一知识类型、低难度、且 A-因子 范围较小所筛选出的复习历史集合)以 SInc 矩阵形式得出的数据相比,平均相差15%。
随着复习间隔增大,尽管存在随时间的双重指数运算, SInc 仍沿着一条近乎线性的S形曲线增长(两个负指数运算相互抵消):

图: SInc随时间变化的图表。该图是在S=240的条件下,使用 SInc2005 方程生成的。
SInc 与时间之间近乎线性的依赖关系,在 SuperMemo 中的体现方式是:新的最优间隔通过将 O-因子 乘以实际使用过的复习间隔来计算,而不是乘以此前计算出的 最优间隔 (在SuperMemo中,O-因子是二维矩阵OF[S,D]中的条目,表示R=0.9时的 SInc)。
记忆稳定性的预期增量
学习的优化可以采用不同的标准。我们可以针对特定的 回忆 水平进行优化,也可以针对 记忆稳定性增量 的最大化进行优化。无论哪种情况,了解 稳定性增量 的预期水平都很有帮助。
我们将记忆稳定性增量的期望值定义为:
E( SInc)= SInc*R
其中:
- R —— 可提取性
- SInc —— 稳定性增量
- E( SInc) —— 稳定性的预期概率增量(即由 SInc 所定义的增量,并按遗忘可能性打折后的结果)
2005年得出的 稳定性增量 公式带来了一个重大意外发现。我们过去一直认为, 遗忘指数 为30%–40%时能取得最佳学习速度。而 SInc2005 方程似乎表明,极低的 记忆保持率 也能带来相当不错的记忆效果。由于2005年时低R数据十分稀缺,这些结论还需谨慎看待:
存档提示: 为什么要使用文字存档?
根据 SInc2005 方程,我们得到E( SInc)=( aS -b *e cR+ d)*R。通过求导数d ESInc/dR并令其为零,我们可以找到在不同稳定性水平下使预期稳定性增量最大化的可提取性:

图: 根据 SInc2005 方程得出的、 记忆稳定性预期增量 E(SInc) 作为 稳定性S 条件下 可提取性R 的函数。用 SuperMemo 用户熟悉的术语来说,短间隔情况下记忆稳定性预期增量的最大值出现在 遗忘指数 为60%时!这也意味着,SuperMemo中允许的最大遗忘指数(20%)所带来的预期稳定性增量,比理论最大值低了近80%(前提是我们愿意为此牺牲较高的 记忆保持率 水平)。

间隔重复中的记忆复杂度
间隔重复中的记忆稳定性取决于复习质量的高低,而复习质量又取决于 记忆复杂度。早在1984年,我就在自己的学习实践中表达过这一点,后来这一想法演变成了 最小信息原则。要实现有效复习,知识必须保持简单。知识可以构成复杂的结构,但接受复习的单个记忆单元本身应当是原子化的。2005年,我们找到了一个支配复杂记忆复习过程的公式。
Georgios Zonnios曾是一位求知欲旺盛的少年 SuperMemo 用户。如今,他已成为一位教育创新者,也是我众多想法的富有创造力的贡献者。他注意到:
在复杂条目稳定性公式中, 稳定性 就像电路中的电阻:许多并联电阻会让电流产生泄漏
顺带一提,在 渐进式阅读 早期,Zonnios独立提出了 渐进式写作 的概念,如今看来,这似乎是将 渐进式阅读 的工具运用于创作过程中的一个显而易见的步骤。本文正是通过 渐进式写作 的方式撰写而成的。
以下是2005年对复杂条目记忆的描述与分析方式:
存档提示: 为什么要使用文字存档?
学习的难度由所记忆信息的复杂程度决定。复杂知识会带来两种效应:
- 与其他信息之间的干扰增加
- 复习时难以对记忆痕迹的各个子成分进行均匀的激活刺激
这两种难度成因都可以通过在学习过程中采用 恰当的知识表述方式 来加以克服。
让我们看看知识复杂度如何影响记忆稳定性的积累。
假设我们想学习以下内容: 玛丽·斯克洛多夫斯卡-居里是1911年诺贝尔化学奖的唯一获奖者。 我们可以采用两种方法:一种是保持知识的复杂性,另一种是使用简单的表述方式。在复杂变体中,为了同时学习玛丽·居里的名字以及她获得诺贝尔奖的年份,可能会设计成一个双重填空。
问:[…]是[…]年诺贝尔化学奖的唯一获奖者
答:玛丽·斯克洛多夫斯卡-居里,1911年
在简单变体中,这个双重填空会被拆分开,波兰娘家姓会被设为可选项,并另外用来创建第三个填空:
问:[…]是1911年诺贝尔化学奖的唯一获奖者
答:玛丽(斯克洛多夫斯卡-)居里问:玛丽·斯克洛多夫斯卡-居里是[…](年份)诺贝尔化学奖的唯一获奖者
答:1911问:玛丽·[…]-居里是1911年诺贝尔化学奖的唯一获奖者
答:斯克洛多夫斯卡
此外,在简单变体中,若要采取彻底的学习方式,还需要再设计两个填空,因为玛丽·居里还获得过1903年诺贝尔物理学奖(以及其他奖项):
问:玛丽·斯克洛多夫斯卡-居里是1911年诺贝尔[…]奖的唯一获奖者
答:化学问:玛丽·斯克洛多夫斯卡-居里是1911年[…]的唯一获奖者
答:诺贝尔奖(化学奖)
现在让我们回到最初的复合双重填空。为便于论述,我们假设记住1911年这个年份和“居里”这个姓氏的难度相同。复合记忆痕迹(即整个双重填空)的可提取性,将是其各个子痕迹可提取性的乘积。这源于一般规律:在大多数情况下,记忆痕迹在很大程度上是相互独立的。尽管遗忘一个痕迹可能会增加遗忘另一个痕迹的概率,但经验证明,在绝大多数情况下,针对同一主题的不同独立问题,其学习过程是完全独立的,回忆与遗忘都是完全不可预测的。让我们看看,把回忆概率视为独立事件,会如何影响复合记忆痕迹的稳定性:
(9.1) R=R a*R b
其中:
- R —— 二元复合记忆痕迹的可提取性
- R a 和R b —— 两个独立记忆痕迹子成分(子痕迹)a和b的可提取性
(9.2) R=exp -kt/Sa*exp -kt/Sb=exp -kt/S
其中:
- t —— 时间
- k —— ln(10/9)
- S —— 复合记忆痕迹的稳定性
- S a 和S b —— 记忆子痕迹a和b的稳定性
(9.3) -kt/S=-kt/S a-kt/S b=-kt(1/S a+1/S b)
(9.4) S=S a*S b/(S a+S b)
我们在进一步分析复合记忆痕迹时使用了公式(9.4)。我们原本预期,如果记忆子痕迹S a 和S b 的初始稳定性差异较大,那么以最大化S为目标(即以R=0.9为准则)进行优化的后续复习,可能会因复习时机不够理想而使各子成分的稳定性变差。但我们证明事实并非如此——在学习过程中,各子稳定性反而趋于收敛!
复杂记忆的稳定性可以由原子记忆的各子稳定性推导得出
复合记忆痕迹子稳定性的收敛
模拟间隔重复中复杂记忆的行为其实很容易。它们的子稳定性会趋于收敛,这导致复习效率低下、稳定性积累缓慢。如今我们可以证明,一旦复杂程度达到某个水平,就再也无法为实现长期 记忆保持 而建立起记忆稳定性。简而言之,要记住一整本书,除了不停地反复重读之外别无他法。而这是一个徒劳无功的过程。
存档提示: 为什么要使用文字存档?
如果我们创建一个双重填空,其实无法确定单次复习是否能对负责存储这两条不同知识的两个记忆回路产生均匀的激活。让我们假设,第一次复习是这两个记忆痕迹之间唯一的差异化因素,其余的学习过程都按照上文给出的公式进行。
为了研究在以R=0.9为准则、针对复合稳定性进行优化的复习模式下,记忆子痕迹稳定性的表现,我们取以下数值:
- S a=1
- S b=30
- S=S a*S b/(S a+S b)(来自公式 9.4)
- SInc= aS -b *e cR+ d (来自公式 SInc2005)
- 复合记忆痕迹通过在R=0.9时进行的复习得到巩固,从而使两条子痕迹都能同样良好地被重新巩固(也就是说,复习复合痕迹不应导致任何子痕迹被忽视)
从下图可以看出,复合痕迹的记忆稳定性总是低于各条子痕迹单独的稳定性;但子痕迹的稳定性会逐渐趋于一致。

图: 针对整条复合记忆痕迹进行优化的相同复习模式下,各记忆子痕迹稳定性的趋同过程(即复习发生在复合可提取性达到0.9时)。横轴表示复习次数,纵轴表示 稳定性 的对数值。 蓝色和红色线条对应两条在最初学习后稳定性差异较大的子痕迹的稳定性。 黑色线条对应复合稳定性(S=S a*S b/(S a+S b))。如果每次复习都能使底层突触结构获得均匀激活,S a 与S b 之间的差异就会自我修正。
复合稳定性增长
存档提示: 为什么要使用原文存档?
现在让我们弄清楚,复合稳定性S与子痕迹稳定性S a 和S b 之间的 SInc 差异有多大?如果假设记忆子痕迹受到的刺激完全相同,并将SInc a 和SInc b 都记为 i,那么对于第r次复习,我们有:
SInc a=SInc b= i
S a[r]=S a[r-1]* i
S b[r]=S b[r-1]* iS[r]=S a[r]*S b[r]/(S a[r]+S b[r])=
=S a[r-1]*S b[r-1]* i 2/(S a[r-1]* i+S b[r-1]* i)=
= i*(S a[r-1]*S b[r-1])/(S a[r-1]+S b[r-1)= i*S[r-1]
换句话说:
(11.1) SInc= i=SInc a=SInc b
上述推导表明,按照所给模型,只要记忆子痕迹得到同等程度的重新巩固,记忆稳定性的增长就与知识的复杂程度无关。
复合稳定性的增长与子痕迹稳定性的增长相同
2014年:Algorithm SM-17
最新的 SuperMemo 算法,其设计本身就可以用来概括自己的演化历程。它同样可以用来撰写间隔重复的反事实历史。如果没有恐龙,人类可能根本不会出现,或者会以完全不同的样貌存在。然而,即便把演化树上整整一条恐龙分支彻底砍掉,人类所在的哺乳动物分支依然能够安然无恙。
以类似的方式,我们可以展示出间隔重复与 Algorithm SM-17 诞生过程中一条看似必然的关联事件链条。借此可以“证明” Biedalak 或 Murakowski 对间隔重复历史的重要性超过了 Ebbinghaus。Anki比Pimsleur更重要。 Gary Wolf 带来的影响也超过了William James。
然而,间隔重复所能产生的最大影响尚未真正显现,多种力量的汇聚也可能重新排列这些早期影响因素的重要性。尤其是随着正当竞争的爆发式增长, SuperMemo 要保住其核心地位,就只能依靠不断的创新(例如参见 神经创造力)。
以下就是我如何用本文所梳理的历史构件,来解释整个 Algorithm SM-17 的:
- 长期记忆保持的关键在于 计算最优间隔 (1985年)
- 由于间隔取决于 记忆复杂度,我们需要先把 条目 按 难度 分类(1987年)
- 我们通过 绘制遗忘曲线 来找到最优复习时间,它标示出 记忆保持率 跌至可接受水平以下的那一刻(1991年)
- 在数据稀缺的情况下要找到最优时间,就需要借助近似方法,而知道 遗忘是指数性的 会大有帮助(1994年)
- 由于 遗忘 的速度取决于 记忆稳定性,整个算法就必须以 记忆的两个组成部分 为核心来设计(1988年)。忽视这一模型,可能是竞争性间隔重复算法开发者所犯的最主要错误,例如 神经网络方法 (1997年)的情况就是如此
- 两个组成部分模型的关键能力,在于使 计算复习时记忆稳定性的增长 成为可能(2005年)
- 算法必须通过收集复习数据来构建记忆模型,必须能够 根据现有信息进行自适应调整 (1989年)
- 在数据还不可用之前,从一个 通用记忆公式 开始会很有帮助(1990年)
- 进一步的细微调整和改进可以 带来天壤之别 (1995年),例如失误后间隔、 绝对难度、快速多维回归等等
就这样,一步一步, Algorithm SM-17 最终登上了间隔重复演化树的顶端。
间隔重复的指数级普及
Algorithm SM-2的缓慢起步
Algorithm SM-2 于1987年12月13日首次被用于学习,经过一些细微调整,至今仍在不少应用中沿用。SuperMemo在1989年就放弃了这一算法,但它依然不断出现在新的应用中,其频率大概接近每月都有新的实现问世。我早就数不清了。其中一些变体违背了 SuperMemo 的原则,却仍然沿用它的名号。最常见的违规做法包括以分钟为单位设置间隔,或在答错 评分 时将间隔减半(Leitner式做法)。这些变体也导致了关于 SuperMemo 的一些假消息。要知道,这些假消息正是促使我撰写本文的最大动因之一。
当Duolingo在论文中谈到 SuperMemo 使用了 手工挑选 的参数时,这一定是因为他们依据了某些较为陈旧的文献,或许是二手资料,或许是针对 Algorithm SM-2 写成的文字。毕竟,SuperMemo早在1989年就已经具备相当强的自适应能力,而 Algorithm SM-17 更是 现存自适应能力最强的样本。
这些错误信息也有我自己的一部分责任,因为我不再在意同行评审,任由这些信息在网络上野蛮生长,而没有花足够的力气去澄清谣言。
最早使用 Algorithm SM-2 的应用,是1980年代Atari版SuperMemo的一些非商业衍生品。后来,一些小型的SuperMemo克隆版本(例如面向掌上电脑的版本)选择了带有各自创新的Algorithm SM-2变体,其中许多都以惨痛的教训证明了以 突击式学习 之名罔顾记忆规律会造成怎样的影响。
到2001年, SuperMemo World 已经把算法向前推进了五代。所有主要的软件系列,包括 在线SuperMemo 和 Windows版SuperMemo,都采用了算法的 数据驱动变体。 supermemo.net 成为最早的一批在线学习平台之一(如今演化为 supermemo.com )。Windows版SuperMemo开创了诸如 渐进式阅读 或 神经创造力 这样的 自主学习 解决方案。与此同时, Algorithm SM-2 则成了其他开发者轻松上手的首选方案。
1998年:公开发表与加速普及
1998年5月10日, Algorithm SM-2 向公众开放,并在网上 发布于此。
Mnemosyne是最早采用这一工具的应用,它是2003年诞生的神经网络工具MemAid的衍生品。到2006年,Mnemosyne仍在运行Algorithm SM-2的一个变体,持续收集复习历史数据。作为一款免费的多平台应用,Mnemosyne迅速吸引了大量用户,例如Linux用户,或者有Latex需求的用户。
Anki诞生于2006年10月6日。它以 Algorithm SM-2 为基础,在近十年间为该算法带来了最广泛的传播。它至今依然势头强劲。Anki在自己的算法中引入了大量创新,但始终拒绝突破其基本原则(参见:对SM3+的批评)。
2007年,我们与 Gary Wolf 相遇的时候,SuperMemo看起来像一座孤零零的荒岛,让人不禁要问:如果它真的这么好,为什么其他人不去照搬这个算法呢?那时Anki和Mnemosyne还鲜为人知。2008年Wolf发表在《连线》(Wired)上的文章,引发了教育软件开发者们蜂拥而至地去实现某种形式的间隔重复。Algorithm SM-2看起来是个容易摘到的果子,其扩散速度也随之加快。许多SuperMemo用户都说,如果没有Wolf那篇《连线》文章,他们根本不会发现这个软件。 Krzysztof Biedalak 却喜欢开玩笑说, Wolf的文章 确实是一次突破——但不是为 SuperMemo 而来的突破。它只是为竞争者们打开了闸门,让他们一拥而入间隔重复这个领域。
2008年:爆发式增长
Quizlet写于2005年,2007年发布。最初它是一款典型的突击式学习工具,但到2015年,在风险投资的支持下,Quizlet宣布将更加重视长期记忆保持,因而采用了 Algorithm SM-2 的一个变体。到2017年,他们决定使用机器学习来部署一种新算法,以充分利用所收集的数十亿条复习记录。 SuperMemo 在Quizlet身上的这段短暂经历,一定让 Algorithm SM-2 的这一变体接触到了迄今为止规模最大的用户群体。当时,Quizlet宣称美国每两名高中生中就有一人在使用它。
Quizlet所采取的新方法建立在坚实的基础之上,也有可能发展成一个非常强大的工具,然而,听到他们转向更好算法背后的动机时,实在令人失望:“ 对许多学生来说,突击式学习是一种现实,我们希望帮助他们无论怎样安排学习时间,都能把这段时间用到最好”。 Algorithm SM-17 给学生提供了更多自由:(1)在需要时提前学习,或(2)推迟低优先级的材料。但我们始终不鼓励把 突击式学习 当作一种好做法。应该是 学校去适应 人脑,而不是反过来。这种在学习效率问题上的固执立场让SuperMemo吃了不少亏,但它永远不会改变。
Quizlet在2017年放弃简单复习计划的举动,或许标志着这一古老算法的人气已经越过了顶点。新的竞争者将需要转向更智能的工具,或者干脆授权使用 Algorithm SM-17。这是个好消息。
有多少人在使用间隔重复?
1991年年中,我的一位同学试图安慰我。他预测我们会成功,能卖出10到20份 SuperMemo。而我更乐观。1993年,我曾预测到1996年会有100万用户。1994年,波兰的《Enter》杂志也提到了Marczello Georgiew同样乐观的看法:
在SuperMemo World收到的问卷调查中,当被问及最喜欢这个软件的哪一点时,SuperMemo用户绝大多数都指向了它的有效性。软件本身或许还算不错,但真正重要的是学习的成果。那么不满意的地方呢?用户们对这个或那个都有些不满,最常见的是,即便在波兰,SuperMemo也总是先出英文版。但没有哪一点特别令人反感、格外突出。毫无疑问,没有人质疑用SuperMemo可以学得更快,也再不必担心遗忘。抱着这幅美好的图景,人们不免会问,为什么SuperMemo至今还没在全球卖出数百万份。SuperMemo World市场总监Marczello Georgiew提议大家回想一下,Graham Bell当年试图推广他那台能通过电线说话的“怪机器”时遇到过怎样的困难,又或者产业未来学家们当年对那台污染空气的“机械马”的普及前景曾做出多么悲观的预测。接着他自信地补充道: Wozniak花了十年时间才把一种必要变成一项发明,给我们一半的时间,我们就能把他的发明变成全球性的必需品。
在我关于100万用户的预测上,我算错了3年,而且还必须区分短期使用者与活跃用户。随着采用范围的扩大,间隔重复的活跃用户比例一直在下降。2007年,我们估计SuperMemo的覆盖人数为500万,其中大多数是免费软件和分册版用户。在这500万人中,只有0.4%到4.0%是活跃用户。这可能仅仅意味着2万名学生左右。
2009年,Gwern Branwen估计活跃用户数量约为10万,这与我的数字大致相符。对于 SuperMemo World 二十年的辛勤努力而言,这个数字听起来并不太令人乐观。
那么,让我们更仔细地看看间隔重复今天的覆盖范围。下面的这些估计遭到过不少质疑。我同意,它们确实建立在大量猜测之上。然而,一旦你处在一条指数增长曲线上,即便估计误差很大,也不会造成太大差别。你可以高估200%,转眼间就能被现实赶上。
正因如此,我毫不犹豫地说,间隔重复采用率的指数级增长正朝着那个大写的“B”迈进:十亿用户。亚马逊的Kindle已经把间隔重复加入了其“单词生成器”(Vocabulary Builder)的闪卡选项中。即便是使用Kindle的SuperMemo用户,也可能对此一无所知。把闪卡与书籍结合起来,正是1996年我们试图说服风险投资人相信其可行性、进而把SuperMemo带上纳斯达克的那个总体构想。
然而,要达到十亿用户,我们还需要一次新的突破。第一个显而易见的候选者就是Facebook,它有可能把间隔重复接入社交互动的喧嚣之中,让自由学习变得不留痕迹,也就是用户在毫无察觉意图的情况下进行学习。
如果你觉得Facebook和间隔重复是两个格格不入的世界,那就想想广告这个世界。如今我们都讨厌广告,无论它的投放有多精准。然而,那些不断骚扰你的一方,可以通过运用间隔重复,把 记忆效果 最大化,同时把烦扰感(也就是 可提取性)降到最低。即便是最引人入胜的电视广告,看到第三次也会让人心烦。间隔复习可以确保 可提取性 低,而 记忆保持率 高。
最后但同样重要的是,间隔复习也可能被坏人所利用。假新闻的制造者,甚至更糟的人。一个公关骗子可能在某位世界领导人背后暗中操纵。他可能以间隔的方式一次次撼动这个世界。这或许会让全世界都暴露在间隔重复之下,确保我们所有人都牢牢记住。
这个金字塔的顶端糟糕到我甚至不愿列出来。我不想给坏人任何启发。
下面这些估计中,包含几个相当确定的点:1985年的 第一位用户,1987年的 第二位用户,2000年达到一百万,以及我在2007年费尽心思估算出的500万。如今,Duolingo宣称有20万用户。Quizlet宣称的数字更多。这一增长几乎还没有显示出饱和的迹象。

图: 我们本以为间隔重复早就该显示出饱和迹象了。然而,经过种种演变,它终将在某个时刻触及十亿用户。一旦它与人类的数字生活融为一体,几乎每个人都会受到影响。如果我的估计没错,借助网络的助力,它的普及速度仍然领先于电话、汽车和收音机。不过,我们从未想过它能与Pokemon或愤怒的小鸟相抗衡。图中的指数回归公式为:Reach=exp((year-1984)*0.63)。由该公式确定的红线,大约就在此刻跨越十亿这一门槛
如今,几乎没有任何门槛,很多学生尝试之后,几周甚至几天就放弃了。活跃用户的比例可能非常低。十亿用户如果学习效果微乎其微,那仍然算不上多少学习。接下来要做的,是推动一场文化范式的转变,为高效的长期学习赋予真正的价值。我们需要从改变 学校教育 体制开始,并采纳 自由学习 的原则。
一旦间隔重复达到十亿用户,就必须实现文化范式的转变,才能把使用人数转化为长期 高质量学习 的真正收益
前方的路依然漫长。
记忆研究总结
间隔重复研究存在的问题
间隔重复的研究史一直受到以下几个因素的困扰:
- 用猜测和经验法则代替数学优化
- 理论与实践之间互动不足:科学研究专注于简单的实验,而实践则专注于简单的工具
- 术语不统一,导致了反复被遗忘又被重新发现的循环!
以上几点与我对 失败因素 的排序相吻合。在个人计算机和互联网出现之前,很难摆脱这种恶性循环。
关于间隔重复的直觉
当我们向青少年提出一系列关于记忆运作方式的问题时,很大一部分人即便从未做过任何测量,也能对复习间隔做出相当不错的猜测。尤其是,他们常常能正确猜出第一个最优复习间隔大约是1到7天,而后续的间隔会不断增长。此外,许多人还能猜出第二个间隔大约是一个月,往后的间隔可能会不断翻倍。换句话说, 间隔重复本身就是一种常见的直觉。
早期的记忆研究
1885年, Hermann Ebbinghaus 为记忆科学做出了重大贡献。他以自己为实验对象,勾勒出了 遗忘曲线 最早的轮廓。他也意识到了 间隔效应 的存在,但他从未研究过间隔重复本身。我并不把Hermann视为自己在间隔重复研究上的灵感来源,因为当时我根本不知道Hermann是谁,也不知道他取得了什么成就。 我自己设计了一套测量方法,才由此走向间隔重复。在一次与此无关、如今已被遗忘的练习中,我还画出了自己的遗忘曲线,这或许也影响了我的思考方式。Hermann的曲线要陡峭得多,实际上可能反而会打消进一步研究的念头(参见: 埃宾浩斯遗忘曲线的误差)。我们亚当·密茨凯维奇大学的图书馆里收藏了大量二战前的“古老”德语文献,但我不懂德语。我的努力完全是孤军奋战、懵懂无知的。后来我才读到关于Ebbinghaus的资料,并在我的 硕士论文 中提到了他的 遗忘曲线。
到1901年,在William James的著作中,间隔复习的优越性似乎已经很清楚了,间隔优化似乎理所当然会成为学习理论中的下一步,渗透进这一领域也只是时间问题。然而事实并非如此。这一等,就是再等了80年。
在1932年出版的畅销书中,C.A. Mace提出了一个简单的间隔重复计划:1天、2天、4天、8天,依此类推。猜得不错!然而Mace的这番努力还是被人遗忘了,因为在互联网时代之前,“纸面上”的间隔重复恐怕很难有什么吸引力。要想开个好头,Mace本该用一个精彩的实例来证明自己。我敢说那并不容易。当时新闻头条被希特勒先生占满了。
1960年代:复兴
1966年,Herbert Simon浏览了大约1897年由Ebbinghaus的研究衍生出的 Jost定律。Simon注意到, 遗忘的指数性质 意味着必然存在一种记忆属性,如今我们称之为记忆 稳定性。Simon写了一篇简短的论文,随后就转向了他手头忙着的数百个其他项目。他的这篇文字基本上被人遗忘了。
大约在同一时期, Robert Bjork 在学习与记忆方面提出了大量富有创见的想法。就像常有的情况一样,他的想法超前于他的时代。教师几乎从不听心理学家的话。学生们甚至连他们的名字都不知道。如果Bjork是个程序员,我们或许能提前十年迎来第一款广受欢迎的间隔重复应用。我想他绝不会轻易放过一个好点子。似乎正是Bjork最早在一个与我们的 记忆双成分模型 类似的模型中,清晰地区分了提取强度与存储强度。
1967年, Paul Pimsleur 清楚地看到,间隔重复可以成为语言学习中记忆单词配对的绝佳工具。和 SuperMemo 一样,他也在术语上颇费思量,最终使用了“递增间隔回忆”(graduated-interval recall)这一说法。在我们的 “锯齿状遗忘曲线”挑战 中,Pimsleur以已知最早的锯齿状曲线图最为接近,如下图所示:

或许我们还会发现更早期的相关构思草图,但出于技术原因,印刷品的年代越久远,其中的图表就越少,而如今我们用Excel就能大批量地生成这类图表。
Pimsleur的间隔一直延伸到以小时、分钟甚至秒为单位。这反映的是一种直觉,而非测量结果。他把自己的推理,从容易测量的陈述性知识(例如单词配对)延伸到了程序性知识和音频模式识别,比如学习发音。 SuperMemo 通过把单词配对学习与发音、拼写、辨识、同义词等区分开来,解决了这个问题。因此,例如在 Advanced English 课程中,我们从不需要把间隔缩短到低于用户标准启动 稳定性 的程度,这一稳定性很少低于一天。出于实际原因,也由于 睡眠所起的作用,SuperMemo从不使用短于1天的间隔。睡眠也是该算法在间隔长度上采用1天分辨率的主要原因。SuperMemo可以让用户在一天之内多次复习,但这属于 子集复习 的一部分,偶尔也可能确实有用(例如为考试而 突击式学习 时)。Pimsleur的间隔建议与Mace或纸面上的SuperMemo( Algorithm SM-0)都不相同。它们不是测量的结果,而是推测的结果,其可靠程度从扎实到薄弱不一而足。Pimsleur考虑的是确保60%的回忆率,按SuperMemo的标准来看这非常低。他把启动稳定性押在5秒上,而SuperMemo使用的是1到15天,对于表述良好的知识来说,这足以保证90%的回忆率。Pimsleur的间隔指数化底数(即 E-因子)为5,而在大多数情况下这个值应该是1.4到2.5。因此,Pimsleur的间隔安排与SuperMemo的间隔安排差异巨大,不应被用作算法度量的基准。在他1967年的原始论文中,Pimsleur提出的间隔为5秒、25秒、2分钟、10分钟、1小时、5小时、1天、5天、25天、4个月和2年。这些差异大多来自基于不同性质材料的实践(相当于SuperMemo中的高 复杂度)。使用秒、分钟和小时这样的单位,无异于 突击式学习,在SuperMemo中是强烈不推荐的。取而代之,我们建议优化 知识表述。
1969年,Alfred Maksymowicz写了《读与思》(Read and think)一书。你在图书馆是找不到这本书的。它是用波兰语写成的,只面向理工科大学中一小圈学生。书中提到了间隔重复、 遗忘曲线,甚至提到了 遗忘指数 如何决定 最优间隔。Maksymowicz提出第一个最优间隔为3天。和之前、之后的许多努力一样,这个好建议基本上被忽视了。学生们急匆匆地应付考试,然后就忘掉了。 突击后抛弃 正是这样一种原则:学校教育的压力摧毁了良好长期学习的前景。我知道Maksymowicz这本书,纯粹是因为我在波兰一所理工大学求学,而且我当时对自己的间隔重复方法相当高调。我只能猜测,历史上还有几十份类似的文字,把某种直觉表述为一条好建议,结果却被大众所忽视。倘若没有时间与空间上的这一巧合,未来关于间隔重复的文献可能永远都不会注意到Maksymowicz曾经存在过。Maksymowicz或许受到了Pimsleur、Mace、他自己的直觉,或者其他我一无所知的文献的启发。Maksymowicz的存在,也印证了对 SuperMemo 持怀疑态度的Szafraniec所说的那句话: “一切都曾发生过”。
1972年:Leitner盒
在SuperMemo出现之前,间隔复习领域最大的实践与算法成功要归功于 Sebastian Leitner。1972年,他提出了 Leitner盒系统 。在Leitner系统中,闪卡会被赋予优先级,并归入对应不同 稳定性 等级的盒子中。相比于此前提出的那些理论性建议,Leitner系统有一个巨大的优势:它非常实用。这是一个任何人只需稍加介绍就能上手使用的系统。相比之下,就连纸面版SuperMemo( 1985年)看起来都显得复杂。

图: Leitner系统 的一种错误变体,答错的卡片只会被退回上一个盒子(图片来源:维基百科)。这一变体曾在Duolingo中使用过一段时间
Leitner盒并不是一种间隔重复工具,而是一种优先级排序工具。其中并没有“间隔”这一概念,更谈不上 最优间隔。之所以叫 盒 (box),是因为它最初的 实现方式 就是一个个实体闪卡盒子,与时间流逝并无关联。当Leitner盒被规律地用于小规模闪卡集合时,它能模拟出间隔重复的行为。如果间隔太短,就会导致 突击式学习;如果间隔太长,就会导致次优结果。不过在 SuperMemo 中,低优先级材料也可以被周期性地推迟,从而产生非常长的间隔,这会降低预期的 稳定性增长,但对于能够撑过更长间隔的条目而言,其 稳定性增长 反而会更大。在1990年代及新千年之初,Leitner系统被用于许多成功的闪卡应用中。随着这些应用不断修改和改进复习流程,它们实际上可能已经演变成了一套完整的间隔重复系统。不过,由于SuperMemo的 Algorithm SM-2 易于实现且远胜一筹而广受欢迎,这些应用的使用率随之下降。
较新的Leitner盒系统软件变体,可能会给优先级盒子附加固定间隔,例如5号盒对应16天,但这种做法存在一些缺陷,无异于 突击式学习:(1)答错仍会导致间隔回退,而正确的做法应该是恢复学习进程;(2)第一个月内复习五次,比起表述良好的知识——在 SuperMemo 中,仅第一个月就能把学习成本降低60%到80%——效果并不理想;(3)还需要更多的盒子。我们在SuperMemo中见过远超人类最长寿命的 间隔。终身应用所需要的间隔,要高出20万个百分点。这就是 永久存储 间隔与16天之间的差距。若 E-因子 为2,要覆盖一生所需,还得再加11个盒子。
如今,最受欢迎的语言学习系统之一是Duolingo。很长一段时间里,它使用的是Leitner系统。如今他们采用了自己基于 可提取性 预测的新算法。不过,他们仍然把Leitner系统当作基准。更糟的是,他们的基准使用了闪卡在优先级盒子间的反向迁移方式(这会高估失误后的 稳定性)。 归一化Leitner 或许可以作为基准,但采用相当于 E-因子 为2的简单归一化方式,与选择E-因子为1.6相比,可能会产生不同的结果。未来,所有算法都应该转向SuperMemo提出的通用度量标准,而 Algorithm SM-2 或许可以成为一个有用的度量基准,与各家的专有方案并行实现。我希望用户能在这方面要求清晰度、统计数据、度量标准以及充分的公开透明。
1970年代,Tony Buzan凭借他在思维导图方面的创新,专注于结构化知识。矛盾的是,由于缺乏一套良好的统一理论,思维导图与SuperMemo之间反而存在着某种冲突。简而言之,我们需要好的模型来理解世界,也需要间隔复习来长期保留这些模型的各个组成部分。Buzan对复习应该如何安排间隔也有自己的想法。他在1990年代初第一次接触SuperMemo时,立刻就认同了这个概念,但他始终更愿意专注于知识结构,而不仅仅是复习本身。
1980年代:SuperMemo
我自己的工作要从1982年说起,那时我实在厌倦了永无止境的遗忘过程。我想学习生物化学和生理学。我会读书、做笔记,但由于遗忘的过程,这一切往往都白费了。即便是最重要的事实,也会在最不合时宜的时刻(比如考试)从记忆中溜走。我决定采用 主动回忆。我不再只是做笔记,而是把笔记做成一问一答的形式。我可以遮住答案,用主动回忆的方式作答。这大大提升了学习效果。这也正是SuperMemo至今仍在采用的方式。这种新方法极大地激发了我对学习的热爱。
到1984年,我对主动回忆这套方法已经相当熟练,因而明白复杂的问题是行不通的。如果你在答案里塞进太多内容,比如列出一长串清单,你就会不断遗忘。这样的学习是徒劳的。后来我把这种追求简洁的做法称为“ 最小信息原则”。如今,这一原则是知识表述 20条规则 中最先被提及的原则之一。
真正的突破发生在1985年,恰好是Ebbinghaus发表其记忆学论文的100年之后。我想弄清楚复习间隔会如何影响回忆效果。我需要找出复习之间最优间隔的长度。显然,这样的间隔是存在的,我只需要把它们测量出来。这个实验的描述见 此处。这个实验简单、粗糙、偷懒又仓促。我没有耐心花上几年时间去搞清楚所有细节,而是在6个月后就提出了第一个 SuperMemo 算法。可以说,这是第一个带有几分科学色彩的间隔重复案例。我的研究只基于一个人、一种学习材料,但它却足够通用,多年后拥有了众多忠实用户。 1985年7月31日,我开始用这种新方法学习生物化学。这就是计算化间隔重复的生日。SuperMemo for DOS这款电脑程序于1987年问世,而“SuperMemo”这个名字则是在1988年确定的。
1980年代,Jaap Murre的 记忆链模型(Memory Chain Model)是早期的记忆模型之一,本有可能催生出一套扎实的间隔重复算法。它甚至有过自己的早期应用——Captain Mnemo,本可能与SuperMemo在这一领域争夺首创地位。Captain Mnemo和OptLearn正是很好的例子,说明在学术环境中,伟大的理论往往未能伴随能够获得更广泛认可的实际实现。
1991年, SuperMemo World 成立,其创立经过记录在 此处。到1999年,我们开始使用“间隔重复”这一术语,而不再使用 “SuperMemo方法” 这个说法。有关 SuperMemo World 近期的发展情况,请参见 此处。
失败与成功的剖析
研究失败的公式
关于间隔重复的一些直觉相当普遍。这就引出了一个重大问题:为什么间隔重复没有更早被研究,也没有渗透进学习实践中?光有直觉是不够的,良好的实验设计同样至关重要。本节将解释为什么其他人明明已经很接近,却最终功败垂成——Ebbinghaus或Spitzer本可能在90到130年前就让间隔重复问世。同行评审和争夺经费背后那种追求即时满足的心态,必然存在某种问题。为什么给学生用药以应付学校学习这样的领域会引起如此大的关注,而在欠发达国家造成沉重死亡代价的疾病却几乎无人问津?
在这一章中,我试图弄清楚间隔重复为何来得如此之晚。以下是我按影响因子排序给出的看法:
- 计算机对间隔重复的学习效率带来了巨大的改变;即便在互联网时代,早期的表述方式也很难像病毒般迅速传播开来
- 网络让知识得以延续,并将其精髓结晶下来(例如维基百科)
- 直觉并不能保证良好的实验设计。我自己、Ebbinghaus、Spitzer以及其他人所设计的实验,反而给这个问题增添了更多的噪音和复杂性
- 人类文化始终处于不断流变之中。我们大规模地遗忘,又重新发现旧有的发现。个体如此,文化亦然。科学同样也会受到潮流、时尚和遗忘的影响。只有到了今天,间隔重复才终于达到了成为 “常识” 所需的 “影响密度”。参见: 间隔效应研究中的不连续性
- 自身利益和 自主学习 是推动实际应用的最佳动力。科学正是通过实际应用渗透进人们的生活之中。 SuperMemo 是间隔重复的第一个实际应用,得以触及 先是数千、后来数百万的用户
- 过去在短期记忆与长期记忆之间、清单内的间隔与单日内的间隔之间,甚至在程序性学习与陈述性学习之间,都存在着大量的混淆
- 递增、递减或等间隔的复习计划,只要时间安排得当,都可以 变得更优
- 实验者往往使用异质性的材料(诗歌、清单、无意义音节、成页的问题、不同的学生群体等等)
- 在使用被动复习而非 主动回忆 的实验中,无法获得 测试效应 带来的益处
- 以 间隔项目数 来衡量间隔的实验,所依据的是不同的记忆机制,甚至根本不应被称为 间隔重复。至今,研究中许多混乱正是由于在没有明确区分术语的情况下混用不同的间隔度量方式所致
- 研究项目周期过短,使得对间隔重复的深入研究几乎无法进行
- 对课堂应用的关注扰乱了研究结论。 学校并不是一个适合学习的地方。那些针对学校环境进行优化的研究,对 自由学习 而言意义甚微
- 学习 与 记忆保持 之间那种历史悠久的区分,扰乱了人们对最优教育方式的思考。这种区分来自学校教育,在这种模式下,我们先学习,然后祈祷自己不要忘得太多
- 术语不断变化,这使得新一代研究者很难借助前人的成果。就连我们自己1994年的 那篇论文 也使用了 复习间隔安排(repetition spacing)这一说法。有关术语变化的清单,请参见这条术语表条目。网络、群体智慧以及诸如 这一个 的维基,有望缓解术语上的问题
2006年,Will Thalheimer完成了一篇关于间隔重复研究的出色综述,基于100多篇研究文献。然而在总结部分, Thalheimer对递增间隔的价值提出了质疑。这说明,如果实验设计所依据的模型本身就是错的,那么即便有几十篇论文,也无济于事。
在间隔重复中,复习间隔仅仅是递增的还不够,它需要以最优的方式递增
失败的实验
我将列举三个注定会失败或造成混乱的实验案例:
- Herman Ebbinghaus (1885年)出于对记忆科学的兴趣而展开研究。他的直觉非常出色,但出于追求纯粹性的考虑,他把研究重点放在了无意义音节上。不经意间,他反而加剧了他本想避免的 记忆复杂度 和 干扰 问题。他的 遗忘曲线 冷酷无情,令人望而生畏。倘若Ebbinghaus当初学习的是有意义、他感兴趣的材料,他本可以扩大实验的范围。我们都从学校生活中体会过,死记硬背无意义的内容是一种精神折磨。倘若Ebbinghaus像我一样选择了实际应用,我们本可能提前整整100年,就迎来一个纸面版的间隔重复。当然,没有计算机、没有互联网,他的想法恐怕仍会像 间隔效应 这一概念实际经历过的那样,沉寂上整整一个世纪。
- Herbert Spitzer (1939年) 的出发点是改善课堂表现。他选择了异质性最严重的那种情形。我当年苦于难度混杂的成页材料,Ebbinghaus苦于无意义的材料,而Spitzer则通过头脑的异质性把这些问题进一步叠加了。Spitzer让一组组学生接触的不是成页的问题,而是成页的阅读材料。在这种嘈杂的条件下,很难看清指数性 遗忘 和间隔重复的规律。即便Spitzer的结果压倒性地呈现积极效果,我也怀疑教育体制的官僚机构会好好利用这一方法。教育是由标准化考试、分数和证书驱动的,几乎从来不是由科学以及学习流程对学习成果的实际影响所驱动的。这是一套工厂式的体制。Spitzer的努力,就像十年前(1929年)提出的那些 Benezet的开创性想法 一样,注定难逃失败的命运
- Wozniak (1985年)。 我自己那个具有误导性的间隔重复实验,始于1985年1月31日,如果它足以把我的思路搞乱,本可能毁掉我全部的努力。幸运的是,在结果出来之前,我就设计出了一个更好的实验,因而从未受到这种混乱的影响。
Ebbinghaus的实验(1885年)
神话
一个流行的神话说,艾宾浩斯早在1885年就发明了间隔重复。这个神话诞生于我们自己的 SuperMemo 文档。1997年,当我们为网络编写 SuperMemo历史 时,我们加入了一些对记忆研究有贡献的人名。正如这里解释过的,让SuperMemo立足于科学是很重要的。由于我的名字分量微不足道,我自己的贡献一直被淡化处理。由于艾宾浩斯出于时间顺序的原因排在名单最前面,很快就催生了他是间隔重复之父的说法。就连我们自己的资料也因为编辑上的粗心而误入这一方向。如今,网络上充斥着艾宾浩斯和那组锯齿状的遗忘曲线。如果你去谷歌搜索遗忘曲线,你会看到这样的结果:

图: 谷歌搜索“ 遗忘曲线”(2017年11月)。这组“锯齿状”的遗忘曲线在搜索结果中占据主导。许多图片都被错误地归到 赫尔曼·艾宾浩斯名下。这张图更合适的出处见于 记忆的两个组成部分
这正是我在 《学习的优化》(1990年)中描绘过的同一组锯齿状曲线:
最优学习过程中涉及的假设机制
关于这个神话的更多内容,见我们的博客: 艾宾浩斯真的发明了间隔重复吗?
事实
我们更应该感到惊讶的是,艾宾浩斯竟然没有想出间隔重复。他其实已经非常接近了。他触碰到了所有正确的关键点。
以下是他关于 间隔效应所写的内容:
因此,对于一个12音节序列的重新学习,在一个确定的时间点,在前三天以某种方式分布进行的38次重复,其效果与前一天集中进行的68次重复一样好。即便对于基于如此少研究得出的数字的不确定性做出很大让步,这个差异也足够大,足以说明问题。这使得一个假设变得可信: 只要重复次数相当多,把它们适当地分布在一段时间内,明显比把它们集中在一个时间点更有利。
为什么 艾宾浩斯没有迈出下一步——看似显而易见的一步——去观察遗忘曲线在复习后会如何变化?首先,他测试的并不是遗忘,而是重新学习时节省的时间。他的测试本质上是一种复习。用我的方法,人们很容易想要达到某个设定的 记忆保持率水平。而要求重新学习成本达到某个设定的降低幅度,在概念上就没那么直观了。
然而,克服这一概念障碍的办法是持续学习下去。创造力在不同情境下投入时间与思考才会蓬勃发展。对我来说,艾宾浩斯之谜的答案很简单。作为一名优秀的科学家,艾宾浩斯是理论上的完美主义者。他选择记忆无意义音节,以尽量减少来自先前知识的 干扰。不幸的是,这带来了几个不良的副作用:
- 他的清单很难记住,他的 遗忘曲线非常陡峭。对于任何在意长期记忆的学生来说,这都是一幅相当令人沮丧的画面
- 他的清单没有给他带来任何 学习的乐趣。这正好与我在 1985年的经历相反。我纸质卡片集里的每一项都是我把知识推进到新水平的一小步。当我第一次绘制出我的 遗忘曲线时,我想知道下一次复习之后会发生什么
- 艾宾浩斯关注的是重新学习所需的时间或精力,而我一直主要关心的是 记忆保持率,对把 回忆恢复到100%所需的时间或精力兴趣不大
我于是要冒险提出一个说法:在他所有那些英雄式的记忆努力中,赫尔曼·艾宾浩斯一定对记忆无意义的内容感到厌烦了。这足以让最坚持不懈的学生崩溃。而我的幸运之处在于,我有一种迫切想在学习中取得好成绩的渴望。这使得这份努力能够自我延续。这有助于克服创造性的障碍。
有趣的是,2015年,雅普·穆雷以不亚于艾宾浩斯本人的严谨态度 重复了艾宾浩斯的原始实验(甚至深入挖掘了原始手稿)。穆雷很谨慎,没有让自己承受无意义音节带来的精神压力,而这种压力其实可能引入某种偏差。他找到了当时最合适的受试者:一名22岁的学生,并以共同作者的身份作为回报。顺带一提,穆雷似乎捕捉到了学习中的 昼夜节律效应,因为他的曲线在24小时之后出现了一个小的凸起。
重新学习时的节省
可提取性与“重新学习时的节省”之间存在巨大差异。根据时间点的不同,无法提取可能意味着这个事实“刚刚被遗忘,很容易重新学会”,也可能意味着“永久遗忘”。在 可提取性为零的材料上,重新学习时的节省仍可能不为零。简单说,无法访问记忆并不意味着 稳定性为零。从这个意义上说,艾宾浩斯曲线甚至都不是对指数式遗忘的良好表达。对于困难材料和简单材料,重新学习时的节省情况也会不同。
遗忘曲线(1984年)
在写 关于遗忘曲线的章节时,我曾以为自己对 遗忘曲线的最初看法是错误的。然而,在翻查我的档案时,我偶然发现,自己早在1984年——也就是在纸上设计 SuperMemo之前几个月——就已经为英语词汇的记忆保持绘制过一条遗忘曲线:

图: 我为1984年英语词汇 记忆保持绘制的第一条 遗忘曲线,即在 在纸上设计SuperMemo之前几个月。这张图并不是某个实验的一部分,只是对间歇性学习英语词汇结果的一次累积性评估。这张图很快就被遗忘了,34年后才被重新发现。记忆完成后,49页、每页约40个英语词组在不同的间隔时间被复习,并记录回忆错误的数量。剔除异常值并取平均后,这条曲线看起来远比艾宾浩斯(1885年)得到的曲线平缓得多,后者使用了无意义音节和一种不同的遗忘度量方式:重新学习时的节省
我忘记了自己绘制过那条曲线这件事。我猜,一旦有了 SuperMemo,那条曲线似乎就不再重要或相关了。我当时并没有关注“记忆的科学”,只是想在学习中取得好成绩。显然,我并不认为绘制一条遗忘曲线是件多大的事。2018年我几乎又错过了这张图,因为它的标签印得很小:首次记忆的平均遗忘速度。
这个结果来自49页、每页40个词组,即共计1960个单词(相比之下,可参见 一个月学完13年学校课程)。我做的所有学习都是为了学习本身,而不是为了做实验。实际上根本没有实验存在。我所要做的只是从自己实际的学习努力中收集数字,然后画出曲线。计算的简单性也可以解释为什么我这么容易就忘记了这件事。
我在 1985年的实验之前就写过关于简单直觉的内容。结合这条1984年的曲线来看,这些直觉似乎可能正源自那个小实验。今天看来显而易见的东西,如果没有那个小小计算的支撑,可能并不那么显而易见。不过我可以猜测,到1985年2月时,我已经忘记了自己的曲线,因为在 间隔重复实验中我并没有跳过A阶段。我的遗忘曲线与实验结果是一致的,第一次复习间隔确实应该是1天。
关于S形曲线的错误观念必定是后来才产生的。今天,我似乎依稀记得,我最初认为S形特征只是在第一次复习之后才出现。我可能永远无法知道当时自己的思路究竟是怎样运作的。我当时唯一关心的是 SuperMemo的效率。在发现SuperMemo的兴奋中,我把自己的曲线整整忘记了34年。今天,这张小小的图表的意义只在于说明:我们是多么容易发现、遗忘、偏离、再发现,然后再次发现最初的那个发现。记忆是不可靠的。感谢间隔重复。

图: 1984年绘制的关于英语词汇 记忆保持的第一条 遗忘曲线(在 在纸上设计SuperMemo之前几个月)。这张图并非某个实验的一部分,只是对间歇性学习英语词汇结果的一次累积性评估。这张图被遗忘,34年后才被重新发现。记忆完成后,49页、每页约40个英语词组在不同间隔时间被复习,并记录回忆错误的数量。白色圆圈对应的是根据某一间隔后每页平均错误数得出的 回忆率。橙色的对数回归提供了最佳拟合。红色的幂函数回归紧随其后。对于异质性材料(不同页面的单词)来说,这是可以预期的。这也与艾宾浩斯(1885年)得到的结果非常相似,只是这条曲线要平缓得多,这正符合有意义材料的特点。正如预期,白色的指数回归拟合效果最差
斯皮策实验(1939年)
1939年,赫伯特·F·斯皮策在美国爱荷华州9个城市的3605名六年级学生中调查了各种测试安排方案。这是91所学校的全部学生。孩子们阅读一篇6页的文章,随后用25道具体问题测试他们的知识掌握情况。
斯皮策设计了不同的测试安排方案,不过,这个设计显然并不是以最优间隔为目标,他的研究总结也没有在这方面提出任何建议。

图: 程序示意图。斯皮策(1939年)。
只有前两组学生采用了递增式的安排方案。这两组恰好是测试成绩最好的组,不过斯皮策把这归因于 测试效应,因为这是唯一进行了3次测试的两组,也就是说,中间那次测试被解读为一次“测试性干预”(而不是 重复)。

图 斯皮策(1939年)。记忆保持曲线
在他的建议中,斯皮策着重强调了测试效应的力量,也就是我所说的“主动回忆”——这个说法呼应了我1982年的卡片。我喜欢他论文中的一点建议,即测试应该用于帮助学生纠正自己的知识、获得反馈,从而让他们感受到自己的进步。这与现代的 测试形成鲜明对比,后者更多被当作鞭子,用来逼孩子多学习。
斯皮策的间隔示意图让我想起 我自己那次未能得出令人信服结果的自测实验。在这个案例中,间隔显然是由学校生活的节奏决定的,而不是由记忆的需求决定的。
在他的研究中,斯皮策对测试和学习表现出一种冷酷的 盖茨式方法,这是早期学校改革者的典型特征,他们往往因为过于彻底而弄巧成拙!那些在教学过程中不利用 学习驱动力的教育者,即便使用了增强记忆的最佳工具,也注定会失败!
我不能不谈一谈伦理方面的问题。我们以科学的名义屠杀了数以百万计的动物,却也许没有注意到,这项即便出于最良好意图的研究,也使用了3000多名非自愿参与者的劳动。对记忆研究有利的东西,未必对个体的学习也有利。在谷歌时代,我发现斯皮策所用的测试文本相当令人反感。尽管在选材和措辞上付出了极大的努力,我仍认为强制阅读侵犯了我的自由。那些材料可能远比你学校的平均水平要好,但学校教育终究关乎大规模生产,而不太关乎创造性的自由。
阅读关于香蕉植物生物学的内容,对于一个园艺爱好者或生物学家(我自认属于后者)来说可能还算能接受。但如果孩子们当下感兴趣的是大萧条、尘暴区、纳粹德国或棒球,他们为什么需要去读香蕉呢?
学校是我们停止学习、开始死记硬背的时期。是我们失去学习热爱的时期。把间隔重复加进这种强制性的组合里,只会让情况更糟。
沃兹尼亚克实验(1985年)
在我 成功计算出复习英语词汇页面的最优间隔之前,我设计过一个实验,而这个实验可能把我引上了错误的方向。这个实验本意是要证明逐渐增加复习间隔的价值。结果却表明,等间隔复习可能反而更优。
科学实验不应仅仅因为结果出乎意料就被视为“失败”。然而在这个案例中,出乎意料的结果来自糟糕的设计,并可能造成混乱,从而阻碍进一步的进展。直到今天,研究者们仍然在谈论间隔重复的“混合结果”,原因往往在于设计有误,甚至只是 单纯的术语混淆。
幸运的是,我1985年时对记忆的直觉已经相当扎实,当时就很明显,随着 间隔长度的迅速加速增长, 遗忘可能会压过巩固。我那个递增方案根本不是最优的。我当然会设计出更好的后续方案。最重要的是,我想继续成功地学下去。我怀疑自己会不会没有找到好的解决方案就轻易放弃。
这个实验说明,仅仅对 最优间隔是什么有个好的猜测是不够的。间隔实际上是需要被计算出来的。
档案说明:为什么要用逐字档案?
本文节选自:“ 学习的优化 ”,作者 Piotr Wozniak (1990年)
1985年初,我设计了两个实验,它们随后彻底革新了我的学习方法,并促成了SuperMemo方法的形成。
第一个实验很好地说明了一个错误的想法也能得出有价值的结论(第二个实验在 这里有描述)。有一种常见的直觉认为,随着重复次数的增加,知识应该逐渐变得更加牢固,需要复习的频率也会随之降低。因此,间隔逐渐增大的重复,应该比间隔始终相同的重复更有效。这个信念被证明是错误的。让我们来看一个证明这一事实的实验:
关于各种重复间隔模式对重复知识保持效果影响的实验(1985年1月31日至1986年8月2日)
- 被记忆的知识共195项,分为三组,数量相等:A组、B组和C组。
- 每一项的形式如下:问题: 一个英语不规则动词答案: 该动词的一般现在时、一般过去时和过去分词形式
- 每一组的所有项目都在一次学习中通过反复记忆直至全部掌握(A组——1月31日,B组——2月2日,C组——2月3日)。
- 设立了两个最终检验日期:1985年12月6日至7日,以及1986年8月1日至2日,在这两个日期同时测量所有组别的记忆保持水平(每一项的回忆准确度按四级评分测量)。
- 在检验日期之前,A组、B组和C组都经历了6次独立的重复,间隔天数如下:
| 重复次数 | A组 (在较长时间内等间隔分布) | B组 (基于递增间隔分布) | C组 (30天内等间隔分布) |
|---|---|---|---|
| 1 | 18天 | 1天 | 5天 |
| 2 | 18天 | 5天 | 5天 |
| 3 | 18天 | 9天 | 5天 |
| 4 | 18天 | 24天 | 5天 |
| 5 | 18天 | 44天 | 5天 |
| 6 | 18天 | 70天 | 5天 |
这个实验的目的是要证明,递增间隔(B组)对记忆巩固最有利,而均匀分布的间隔(A组)或集中在短时间内的间隔(C组)则不然。实验结果见图3.1:

第二次检验的结果没有出现在图上,原因很平常:在理工大学的学习[started in October 1985]要求对不规则动词有完美的掌握,因此再做一次测量已经没有意义了。正如上文图3.1所示,该实验产生了出乎意料的结果,证明递增的重复间隔未必比恒定长度的间隔更好。幸运的是,早在实验结果出来之前很久,我就怀疑 一定存在最优的重复间隔。在学习过程中使用这种间隔的原则,后来被称为最优重复间隔原则。
在撰写 《间隔重复的历史》时,我在自己的档案中找到了原始图表。很明显,集中练习不是一个好方法:
为什么间隔重复的理念最终成功了?
间隔重复是直觉性的。稍加思考之后,它甚至显得理所当然。为什么我们没有更早想出这个方法呢?只要人类发明了纸,纸上版的SuperMemo在理论上就是可行的。然而,在古代,重要知识的总量小得足以让大脑轻松应对 自然学习方法的运用。农民通过在田间劳作,能够迅速掌握所需的全部专业知识,并在健康允许的时间里一直保持出色的表现。
随着15世纪印刷术的到来,情况开始发生变化。知识开始激增,同时也获得了高效延续的手段。瘟疫时期的牛顿可能是一个有趣的例子,说明一个人理论上会从间隔重复中受益。然而,牛顿的藏书数量有限,而他需要思考和解决的问题又多如牛毛,以至于我们很容易想象,他根本不会为自己不断衰退的记忆而烦恼。他所需要做的,只是做笔记而已。
在接下来的两个世纪里,可获得的知识储量持续增长,人类对记忆的天然渴望或许也在同步增长。19世纪80年代艾宾浩斯的研究就是人们对记忆机制持续关注的一个例子。然而,即便在今天,大多数科学家也很少为遗忘所困扰。做笔记和用谷歌搜索,就能满足他们大多数的需求。当范内瓦·布什在20世纪30年代构想出 memex装置时,他把它视为一种记忆增强手段。然而,即便memex可以被看作是 渐进式阅读或 神经创造力的远亲,它所承载的全部知识,就像在谷歌里一样,主要还是存在于人脑之外。我的探索让我想起了布什的探索,只不过我希望看到的是,所有那些知识能够直接印刻在人类的创造力上(参见: 神经创造力)。
为什么我特别在意遗忘这件事?世上有很多孩子喜欢在学校里炫耀一番。当我哥哥在我三年级的生物课上教我如何区分云杉和冷杉的针叶时,我急切地想表现出自己知道的比一般孩子更多。这种急切很快被学校教育压制了下去,但仍有一些痕迹留存下来。当我们七年级开始学化学时,我为自己能记住像三磷酸腺苷或脱氧核糖核酸这样复杂的名称而感到自豪。我甚至专门去查那些难记的化学名称来记忆,以求给人留下印象。我记住了无颌鱼解剖结构的细节。我又一次试图在学校里给人留下印象,但没有人感兴趣。
当我在五年级更深入地接触动物学时,某种对信息的近乎强迫症式的执着开始显现。我想知道波兹南动物园里所有动物的信息:它们的栖息地,甚至它们的分类和拉丁名。我得到了一些配有所有动物照片的精美图书,认识这些动物似乎是一件很有意思的事。
1974年,我开始对拳击、足球以及体育运动整体产生兴趣。我常去我们学校的废纸收购站,翻找体育杂志。我的同学罗伯特让我帮他收集裸女照片。我照做了。我的青春期来得晚,对此并不感兴趣。当那堆照片在家里散落出来时,我向妈妈解释说“不是我要的!”。她带着一丝微笑,理解地点了点头。同时,我会用熨斗把我收集来的体育杂志上的褶皱熨平。我会把它们整整齐齐地叠好,按日期归档。这堆杂志占满了我房间书架的好几层。这种近乎强迫症的整洁,对任何父母来说都可能是一幅令人不安的画面,但我妈妈却很宽容。我可以自由地追随自己的兴趣,即便这些兴趣看起来很荒唐。我毫不怀疑,自由是健康成长不可或缺的要素之一。难道不是有很多孩子在集邮、收集明信片和收集足球卡时表现出类似的执念吗?
大约在10到12岁之间,某种 渐进式阅读方向上的早期冲动开始显现。我开始通过在一本纸质百科全书里循着条目链接,记录关于马的笔记。从一个条目开始,一路顺着链接写,希望最终能写出一本关于马的小册子,这个过程很有趣。在高中一年级(12岁)时,我用一本哺乳动物百科全书做过类似的练习。我内心有某种需求,想把生物学某些主题的全部信息系统化地整理出来。我决定写一本百科全书式的大部头,讲述生物界的一切。我用妈妈单位的打字机,配上自己丰富的插图,写起了进化的历史。我从未完成它。这项练习的徒劳无功本应显而易见,但这从未困扰过我。这个过程本身令人愉快,也让人上瘾。
1977年至1979年(13至15岁)的暑假里,当我开始学习动物学、化学、生物学以及后来的生物化学时,我表现出了类似的信息饕餮般的本性。这可以说是我对记忆日益增长需求的确切起点。我会用一笔一划的工整字体、配上精心绘制的插图,把新学到的知识写成一本本书。然而,过了一段时间之后,那些知识往往就消散了。这种徒劳开始慢慢困扰我。如果这些书很快就会像书架上其他所有书一样变成一堆死气沉沉的材料,那写它们又有什么意义呢?
大约在1981到1982年(19到20岁)前后,我开始把自己的知识以问答的形式写下来,用于主动回忆测试。我知道,这是把知识长久保存在记忆中的唯一方法。不用说,过了一段时间之后,那种杂乱无序的复习方式同样无法让我完全满意。在那个阶段,我显然对知识有着强烈的渴求。我想要记住。简单的直觉引出了简单的实验,进而催生出简单的DOS版SuperMemo。驱动我的,是把研究与 学习的乐趣结合在一起的实际应用。
从那一刻起,我的道路就变得确定无疑了。我太热爱学习,以至于即便在艰难时期也不愿放弃SuperMemo。我对学习的热爱,在学校里或是在经营企业时都很容易被压制下去。然而,一旦我决定在家工作(1997年),学习、对学习的热爱以及 SuperMemo进展之间的正向反馈循环就建立起来了。由于这恰好也是我赖以谋生的方式,这个循环就此长存。唯有病痛或死亡才能打破这个循环。这条进步公式的这一部分,是容易想明白的。
父母能做些什么来帮助孩子培养类似的热情?我认为有两个要素在起作用:启发和自由。启发固然有帮助,但自由才是必不可少的。如今,启发随处可得。在人类自身表现不尽如人意的地方,YouTube发挥着巨大的作用。而在世界各地,最缺乏的恰恰是自由这一要素。孩子被学校教育所奴役,也被专制式的家庭教育所奴役。有很多人告诉我,我的一些疯狂行为是在没有父亲的环境中长大的副作用。这可能是真的。不过作为补偿,我其实有三个“家长”:妈妈,还有两个年长的兄姐——给我启发的哥哥,以及一个没有孩子、把所有的爱都倾注在我这个小捣蛋身上的姐姐。我敢说,我来到这个世界时天赋平平,并不比一般人高出多少。我常常在班上垫底,很少能名列前茅。但我有几十个例子,说明我把微薄的技能或一点点才华,转化成了在某个狭窄创造性领域里的卓越表现。自由和 求精的狂热始终是关键要素。当我饲养几十种动物,或收集动物尸体部件时,我的家人可能会问:“这孩子为什么不去教堂,反而干这些?”。我妈妈会替我挡开那些影响和担忧。我可以按照自己的方式去做事。
因此,我的成长主要得益于自由的影响。自由有助于 学习驱动力蓬勃发展,而学习驱动力本身又具有自我增强的力量。正是这一点,让我陷入了一些执念,而这些执念如今让我能够自称是间隔重复之父。热情和执念应当被珍视。然而,我们却常常以发展的机械化之名扼杀它们。我们设定各种基准,让孩子们逐一去跳过那些条条框框。仿佛被人一路牵着手读完大学,曾对任何人的独立思考有过什么贡献似的。这种去脑化的过程需要停止!未来属于 自由学习。
至于间隔重复,随着个人电脑的到来,人们解决遗忘问题的渴望大幅增加。在20世纪90年代初,我越来越频繁地从SuperMemo用户那里听到,他们自己也想到过类似的解决方案,但决定先去寻找一款具体的软件应用。
正是学校的种种要求,给今天的学生带来了最多的挫败感,然而学校并不是适合创造性思考的地方。学生们纷纷投向间隔重复,大多是因为它是现成端上来的,拿来就能用。很少有人会去思考自己的解决方案。
除了个人自由之外,让SuperMemo有了良好开端的一些幸运因素还包括:(1)共产主义时期波兰的免费大学教育,(2)家人资助购买一台价格惊人的昂贵电脑,(3)宽松的学校,没有过多占用我的自由时间,等等。
你很少会看到22到24岁的年轻人,以国家或家人的代价,自己捣鼓着搞科学。年轻人只要是在追求创造性的目标,和父母住在一起也没什么不对。
间隔重复诞生于多种良性力量的交汇处:共产主义体制下的自由学习、从共产主义向市场经济的转型,以及个人计算机的出现。而家中的自由和一份健康的学习执念又进一步助推了它。这个方程式中的核心要素是自由。自由是可以复制的。它所需要的,仅仅是被赋予。
SuperMemo的第一个十年:与怀疑论的斗争
在波兰,SuperMemo的早期岁月被怀疑的气氛所笼罩。1994年,波兰计算机杂志Enter对此作了相当准确的表述(见 全文):
SuperMemo或许有效,但不可能这么好
如果一个人已经相信关于 SuperMemo所说的一切,他或她是否会因此就相信,这个程序是治疗记忆衰退的完美良方?它真的能利用神经系统的特性,让学习速度比常规情况快上十几倍吗?毕竟,一代又一代的学生都曾努力想找出更好的学习方法,而在相当开放的观察者眼中,出现一个可与SuperMemo相媲美的突破,似乎也是极不可能的。 沃兹尼亚克并不认同把低概率论作为怀疑的可靠依据,他说自己不止一次追溯到证据,证明类似SuperMemo的学习方法此前已经被人以或多或少的成功尝试过。此外,值得注意的是,如果SuperMemo没有被实现为一款可以轻松在个人之间传播的计算机程序,它可能根本就不会问世。换句话说,它本可能像之前那些试图为学习过程建立秩序的尝试一样,被人遗忘。必须记住,SuperMemo的骨架算法是在 1985年提出的,直到 1987年,它才在波兹南的部分科学圈子里开始极为缓慢地传播。另一个值得关注的转折点是,如果不是沃兹尼亚克与他大学时的同事——现任SuperMemo World副总裁的 Krzysztof Biedalak——那次富有启发性的思想碰撞, SuperMemo World也不会在1991年成立。两人都是大学里的顶尖学生,沃兹尼亚克曾打算去美国研究神经科学,比达拉克则打算在人工智能领域做同样的事。纯属偶然,他们两人都被卷入了创业型科学的世界。这一切都说明,尽管SuperMemo的原理极其简单,理论上可能在地球上的几十个国家被独立发明出几十次,但SuperMemo绝非泛泛之作。 SuperMemo World独特的功绩在于,把这个想法付诸实践,投入了大量的人力工时来开发软件,并专注于向潜在客户推广这一理念。否则,SuperMemo可能会永远局限于早期一小圈爱好者之中。
未来一片光明
我曾提到,间隔重复的发展一直被 猜测式的做法、薄弱的实用工具以及术语上的混淆所拖累。如今,所有这些因素都已被逐渐甩在路旁。新的网络应用不断涌现,它们把大数据与用户的实际需求结合在一起。它们都使用同一套术语: 遗忘曲线、 间隔效应,以及间隔重复。学习的未来,比以往任何时候都更加光明。
