乐于分享
好东西不私藏

《学习软件进化论》第六章 SuperMemo——记忆算法的产品化

《学习软件进化论》第六章 SuperMemo——记忆算法的产品化

中篇·革命者群像:十一款软件的设计密码

排序逻辑:按照语言学习的自然路径——词汇记忆 → 听觉输入 → 发音输出 → 语感形成 → 综合训练 → 儿童游戏化 → 闪卡工具 → 多语言入门 → 深度学习 → 学校系统 → 阅读能力延伸

第六章 SuperMemo——记忆算法的产品化

6.1 核心理念

用算法近似建模个体遗忘过程——这是SuperMemo的核心理念。它不满足于单纯呈现学习内容,而是通过经验数据拟合每个学习者的记忆规律,计算每个知识点的最佳复习时机。在SuperMemo的设计中,学习不再是被动的重复,而是被算法优化的时间管理。

【公司史注记】从波兰医学生到记忆软件之父

1985年,波兰波兹南。Piotr Woźniak是一名分子生物学专业的学生,却已经开始用Basic语言在8位微计算机上编写程序。他的初衷很简单:用程序帮助自己应对生物化学和英语词汇学习中需要记忆的大量内容。他没有想到,这个程序后来演变成一家公司,影响了全球数百万学习者。

DOS 时代的起步

1987 年,Woźniak 将程序命名为 SuperMemo,取自"Super Memory"。最初的版本运行在 DOS 环境下,界面是黑底白字的命令行,没有任何图形元素。用户需要手动输入单词、定义、下次复习时间。尽管简陋,但 SuperMemo 的核心功能已经具备:记录每个知识点的复习历史,计算下一次复习的最佳时机。

Woźnia通过软盘在大学和用户社区中传播 SuperMemo,很快吸引了一批早期用户——医学生、语言学习者、程序员。他们在论坛上分享使用心得,翻译成不同语言的词库开始涌现。口碑传播让 SuperMemo 逐渐在学术圈和教育爱好者中积累了名气。

从免费到商业

1989 年,东欧剧变,波兰开始向市场经济转型。Woźniak 意识到,SuperMemo 不仅是一个学术项目,更可能成为一款商业产品。他与朋友Krzysztof Biedalak一起于1991年7月成立了SuperMemo World公司,初始资本仅为一台286个人电脑。

但当时的波兰,盗版猖獗,人们还没有为软件付费的习惯。公司经营困难,Woźniak 甚至一度靠兼职做翻译维持生计。他没有放弃,而是坚持将基础版本保持免费,通过高级版本和授权获取收入。这个策略最终奏效了。

走向 Windows 与世界

1991年前后,SuperMemo开始向Windows平台迁移。1993年,SuperMemo 7.0(Windows版)成熟发布,图形界面让软件变得更加友好,用户可以用鼠标点击,可以看到进度条和图表。同年,SuperMemo开始被翻译成多种语言,进入德国、法国、美国等市场。

1995年,SuperMemo World与德国出版社Hueber合作,推出了针对德语学习者的商业词库。随后,与多家教育机构合作,将SuperMemo引入学校和企业培训。

算法迭代与学术坚守

Woźniak 始终保持着学者的本色。在经营公司的同时,他继续研究记忆算法,陆续推出了 SM-3、SM-4、SM-5 等改进版本。这些算法试图更精确地模拟人类遗忘规律,引入更多变量,如记忆稳定性、可提取性等。但 SM-2 因其简洁高效,至今仍是应用最广的版本(Anki、Memrise等均基于SM-2或其变体)

2000 年后,SuperMemo 开始面临来自 Anki、Memrise 等新工具的竞争。但它在专业用户,尤其是医学生、语言研究者中仍拥有忠实用户群。Woźniak 本人继续住在波兰,偶尔发表关于记忆优化的学术论文,始终保持着创业初期的朴素风格。

今天,SuperMemo 已被翻译成 20 多种语言,用户遍及全球。它的算法影响了绝大多数基于间隔重复的现代记忆工具,而这一切都始于1985年那个波兰学生的深夜思考。

6.2 设计原理:SM-2 算法的实现逻辑

SM-2算法是SuperMemo的核心引擎,也是后来绝大多数闪卡软件的基石。理解它的设计原理,就理解了间隔重复的基本机制。

动态间隔的计算机制

SM-2 为每个记忆项维护三个核心变量:

• 重复次数(n):该记忆项已经成功回忆的次数。

• 难度因子(EF,Ease Factor):一个通常不低于 1.3 的浮点数,初始值为 2.5,反映该知识点的记忆难度。每次复习后,根据用户反馈调整。

• 复习间隔(I,Interval):距离下一次复习的天数。

算法的工作流程如下:

1️⃣首次学习:间隔设为 1 天,重复次数设为 1。

2️⃣ 后续复习:

如果用户正确回忆(自评质量≥3):

• 当重复次数为0时(第一次成功),间隔设为1天。

• 当重复次数为1时(第二次成功),间隔设为6天。

• 当重复次数≥2时(第三次及以后),间隔 = 上次间隔 × EF。

• 重复次数增加1。

如果用户回忆失败(自评质量<3):

• 间隔重置为 1 天。

• 重复次数重置为 0。

• 难度因子仍按公式更新(见下文)。

遗忘指数与难度因子调整

用户每次复习后需要给自己的回答打分,通常用 0-5 的六级评分:

• 0:完全忘记

• 1:错误,但感觉熟悉

• 2:错误,但很容易想起来

• 3:正确,但困难

• 4:正确,稍有犹豫

• 5:正确,非常流畅

SM-2算法根据评分调整难度因子,其公式为:

EF‘ = EF + (0.1 - (5 - q) × (0.08 + (5 - q) × 0.02))

其中q为用户评分(0-5)。调整后的EF值通常被限制在不低于1.3,实现中常见上限为2.5。

这个公式是一个连续的非线性函数,使得评分对难度因子的影响更加精细。评分越高(接近5),EF增加越多;评分越低(接近0),EF减少越多。无论成功还是失败,EF都按此公式更新(失败时q<3,公式自然产生负的增量)。通过这种方式,每个记忆项都获得了个性化的难度评估。

独立的复习时间轴

SM-2 最重要的一点是:每个记忆项都有自己的独立复习时间轴。这意味着,你可以在同一时间学习 100 个单词,但每个单词的下次复习时间可能完全不同——有些在 1 天后,有些在 6 天后,有些在 3 周后。

这种个性化设计,避免了"一刀切"的复习计划。你不会因为某个单词已经掌握而被强制复习,也不会因为某个单词还没记住而被过早跳过。

6.3 核心优势:效率提升的科学依据

SuperMemo宣称其方法能显著提升学习效率。这一主张有认知心理学研究支持。

间隔效应的量化优势

心理学研究表明,间隔重复可以将长期记忆保留率大幅提高。Cepeda等人(2006)的元分析综合了数百项研究,结论是:分散复习(间隔重复)在长期记忆保持上的效果显著优于集中复习。具体提升幅度因材料、间隔长度和测试延迟而异,但效应量(effect size)通常为large。

SuperMemo将这种间隔效应算法化,让每个知识点都在最优间隔被复习。通常在多次(例如约5-10次)成功的间隔复习后,知识点可稳定进入长期记忆,但具体次数取决于材料和个体差异。在长期稳定后,复习间隔可能扩展至数月甚至一年以上(具体取决于记忆强度)。

用户数据与内部统计

根据SuperMemo官方推荐的“学习十诫”(Learning Decalog),初学者每天只需投入5-20分钟,即可取得良好效果;进阶学习者也不宜超过60-90分钟/天。使用SuperMemo的用户报告,经过一段时间后,数千个知识点的长期记忆保留率可达95%以上(该数据来源于SuperMemo内部用户统计,非同行评审研究)。

对于医学生,有独立研究(如PubMed收录的论文)表明,使用间隔重复软件辅助备考,成绩显著提升。SuperMemo本身也提供内部统计:长期用户8年前学习的知识,保留率仍在80%以上。

这些数据说明,算法化的记忆管理确实能带来效率提升,提升程度因任务和使用方式而异。

6.4 主要互动方式

SuperMemo 的交互设计虽然简单,却蕴含着深刻的认知原理。

问答式主动召回

最核心的互动方式是问答式主动召回。屏幕上显示一个问题(例如,"'苹果'的德语是什么?"),用户在脑海中回忆答案,然后点击"显示答案"查看是否正确。这个过程强迫大脑主动提取记忆,而不是被动识别。

认知科学研究表明,主动召回(testing effect)对记忆的巩固效果,是被动识别的数倍。每次成功召回,都会强化那组神经连接;每次失败,也会因为“失败-纠正”的过程加深印象。

多种题型支持

随着版本迭代,SuperMemo 逐渐增加了多种题型:

• 填空:句子中留出空白,用户需要填入正确单词。

• 选择:从多个选项中选择正确答案。

• 是非判断:判断一个陈述是否正确。

• 拖放匹配:将单词与图片、定义拖到一起。

这些题型让用户可以从不同角度接触同一个知识点,形成多维度的记忆网络。

自动判题与复习安排一体化

最巧妙的设计是将判题与复习安排无缝整合。用户回答一个问题后,需要给自己打分——0 到 5 的评分不仅用于判题,更用于算法调整下次复习时间。用户在学习的同时,也在为算法提供数据,形成闭环优化。

知识树导航

SuperMemo 的知识树是一个树状结构,将知识点按主题组织。用户可以展开某个主题,看到所有相关的记忆项;也可以收缩起来,只看整体进度。这种导航方式,让用户可以自由选择学习内容, 同时保持对整体进度的掌控。

6.5 用户体验设计:初学者模式与专业模式的层次设计

SuperMemo 的用户体验设计,体现了一个重要原则:不同层次的用户需要不同的交互方式

初学者模式

对于第一次使用 SuperMemo 的用户,软件提供了“初学者模式 ”。这个模式的特点是:

• 简化界面:只有最基本的功能按钮,避免用户被复杂选项吓到。

• 引导式学习:软件会引导用户一步步创建第一个记忆库、添加第一张卡片、完成第一次复习。

• 自动设置:算法参数已经预设好,用户不需要理解 EF、遗忘指数等概念。

初学者模式的目标是让用户“先上手,后理解 ”。他们可以在完全不懂算法原理的情况下,就开始使用软件,并感受到间隔重复的效果。

专业模式

当用户熟悉了基本操作后,可以切换到“专业模式”。这个模式下,用户可以:

• 调整算法参数:修改难度因子、遗忘指数、间隔倍数等。

• 自定义复习计划:为不同知识库设置不同的复习策略。

• 查看统计数据:详细的图表显示学习进度、记忆保留率、复习预测等。

• 导入导出数据:与其他用户分享词库,或者备份自己的学习数据。

专业模式让高级用户可以完全掌控自己的学习过程,根据个人需求定制软件行为。

平滑的过渡

初学者模式与专业模式之间不是割裂的,而是平滑过渡的,中间还有基础模式和中级模式可以选择。用户可以随时查看当前使用的参数,了解它们的作用,也可以随时切换到更高级别进行更精细的调整。这种设计让用户在学习语言的同时,也在学习如何管理自己的记忆。

6.6【界面设计解剖】复习界面的认知负荷控制

SuperMemo 的复习界面看似简单,其实蕴含着深刻的认知设计。

界面布局

典型的 SuperMemo 复习界面(以Windows 版为例)如下:

• 顶部:当前进度(第X 张/共 Y 张), 以及一个小型的进度条。

• 中部: 问题区域,显示当前问题(可能是文字、图片或声音)。

• 底部:按钮区域,包括“显示答案 ”、“忘记 ”、“模糊 ”、“正确 ”、“完美”等按钮, 以及一个评分滑杆或数字按钮。

界面上没有任何多余的装饰,没有任何分散注意力的元素。所有设计都服务于一个目标:让用户专注于当前的问题。

信息密度控制

认知负荷理论告诉我们,人类的工作记忆容量有限。如果界面上信息太多,用户会把宝贵的认知资源浪费在处理无关信息上,而不是学习内容上。

SuperMemo 的界面将信息密度控制在最低:每次只显示一个问题,所有其他元素都隐藏起来。用户不需要考虑“接下来要做什么 ”、“这个按钮是干什么的 ”,只需要思考眼前的问题。

反馈时机

当用户点击“显示答案”后,答案立即出现。这个反馈必须在 1 秒内完成,否则用户会感到延迟,打断思维的连贯性。SuperMemo 的界面做到了即时反馈,让用户感觉“ 自己刚想到答案,答案就出现了 ”。

难度标记的视觉编码

复习完成后,用户需要给自己的回答打分。五个按钮用不同的颜色和文字表示:

• 忘记(红色):完全没想起来

• 模糊(橙色):有点印象,但不准确

• 正确(黄色):想起来了,但有点慢

• 完美(绿色):脱口而出,非常流畅

这种视觉编码让用户可以快速做出判断,不需要阅读文字说明。颜色的渐变也暗示了记忆强度的变化,符合直觉。

为什么这个界面能让用户持续投入数小时?

这个问题的答案在于:界面设计消除了所有可能的干扰,让用户进入一种“心流”状态。他们不需要思考软件怎么用,只需要思考学习内容本身。每次复习都是一次小小的挑战——我还能记住吗?——成功召回后,又获得一次小小的成就感。这种循环,让用户可以持续投入数小时而不觉得疲劳。

6.7 技术实现:伪代码与数据结构

为了让工程师读者能够真正理解并实现 SM-2 算法,本节提供伪代码和核心数据结构的设计。

数据结构设计

每个记忆项(卡片) 可以用以下数据结构表示:

class MemoryItem:def __init__(self, id, front, back):         self.id = id                   # 卡片唯一标识         self.front = front             # 正面(问题)         self.back = back               # 背面(答案)         self.repetitions = 0# 成功重复次数         self.ef = 2.5# 难度因子,初始 2.5         self.interval = 0# 下次复习间隔(天)         self.next_review_date = None   # 下次复习日期         self.review_history = []       # 复习历史(可选)

核心算法伪代码

以下是 SM-2 算法核心逻辑的伪代码实现,严格按照原始SM-2规范:先根据质量更新重复次数和间隔,再更新难度因子。

defsm2_process_card(cardquality):

"""

处理一次复习结果,更新卡片状态

quality用户反馈质量,通常取值0-5

0: 完全忘记(错误)

1: 错误,但感觉熟悉

2: 错误,但很容易想起来

3: 正确,但困难

4: 正确,稍有犹豫

5: 正确,非常流畅

"""

# 步骤1:根据质量更新重复次数和间隔

ifquality<3:

# 回忆失败

card.repetitions0

card.interval1

else:

#回忆成功

ifcard.repetitions== 0:

#第一次成功

card.interval1

elifcard.repetitions== 1:

#第二次成功

card.interval6

else:

#第三次及以后,间隔=上次间隔×难度因子

card.intervalround(card.intervalcard.ef)

card.repetitions+= 1

# 步骤2:更新难度因子(无论成功或失败)

# EF' = EF + (0.1 - (5-q) * (0.08 + (5-q) * 0.02))

    delta = 0.1- (5- quality) * (0.08+ (5- quality) *0.02)

    card.ef = card.ef delta

 # 限制EF不低于1.3(上限常见为2.5,但原始论文仅规定下限)

    card.ef =max(1.3, card.ef)

# 可选:上限限制

 # card.ef = min(2.5, card.ef)

#计算下次复习日期

from datetime import datetimetimedelta

card.next_review_datedatetime.now() timedelta(days=card.interval)

returncard

复习队列管理

在实际应用中,需要一个调度系统,每天选出需要复习的卡片。最简单的实现是使用列表按复习日期筛选:

class Scheduler:

def__init__(self):

self.cards =[]  #卡片列表

defget_due_cards(selfdate):

"""返回指定日期需要复习的所有卡片"""

due=[]

forcardinself.cards:

ifcard.next_review_dateandcard.next_review_date<= date:

due.append(card)

returndue

defadd_card(selfcard):

"""添加新卡片,首次学习"""

card.repetitions0

card.ef=2.5

card.interval0

card.next_review_dateNone

self.cards.append(card)

defreview_card(selfcardquality):

"""复习卡片,更新状态"""

sm2_process_card(cardquality)

#可选:记录历史

这种设计简单高效,足以支撑一个基础版的闪卡软件。更复杂的系统可能会使用数据库存储卡片,并使用数据库查询直接获取到期卡片,但核心算法不变。

6.8 【用户故事】一个波兰工程师如何用 SuperMemo 改变自己和家庭

算法的背后,是无数真实的学习者。

一位名叫Janusz Dąbrowski的波兰IT工程师。他的SuperMemo故事开始得很早——还在上学时,他就在朋友的电脑上见过那个运行在DOS下的古老版本。那时Windows还没有出现,程序界面只有单调的字符。

让他成为重度用户的,是2000年左右开始的十年。在这段时间里,他用Advanced English课程处理了大约20,000张闪卡。效果很好,好到他的妻子也开始跟着用SuperMemo自学英语。

但真正让这个工具在他家里“爆发”的,是他的三个儿子。

孩子们在幼儿园有不少英语课,但Janusz发现了一个问题:老师们用其他软件让儿子们抄写单词,几个月后复习时,孩子们什么都想不起来。他决定自己动手,把闪卡导入SuperMemo,还为大儿子和二儿子创建了自己的单词数据库。

儿子们上手后,他给他们买了Extreme English课程。这时,最小的儿子——当时还不到六岁——看到哥哥们在学,也跑来说:“我也想学。”

就这样,全家人都在使用这个工具了。七岁的大儿子完成了Extreme English基础课程(A1/A2级)的90%,差不多2000个单词;九岁和十一岁的儿子在中级课程(B1/B2级)上稳步推进。孩子们的大脑像海绵一样吸收单词,每天只需5-7分钟,每个人最多复习20张卡片,每天有效掌握约5个新词。

Janusz最骄傲的一点是,他不需要催促孩子们学习。“他们会自己提醒我,有时候反而是我忘了。”他说。孩子们主动坐在电脑或手机前完成每天的复习,学习对他们来说不是负担,而是一种日常。

现在,这个五口之家——父母和三个儿子——都在用SuperMemo学习英语。

Janusz是成年之后才开始自学英语的,如今在一家国际公司工作,经常用英语与客户沟通。他和妻子能高效地在国际公司完成工作,很大程度上要归功于SuperMemo。而他的孩子们,正在用比他当年高效得多的方式掌握这门语言。

这一案例呈现了一个典型的学习场景:家长识别出传统方法的低效,引入更合适的工具,子女在低阻力环境中逐步形成使用习惯,最终演化为家庭层面的持续实践。这种过程,比个体化的“成功叙事”,更能反映多数学习者的真实路径。

6.9 【界面演化】SuperMemo 1.0 (1991) vs SuperMemo 7.0 (1999)

SuperMemo 1.0 (1991)

1991 年的 SuperMemo 1.0 运行在 DOS 环境下。启动后,用户看到的是黑底白字的命令行界面。屏幕上显示 Question,用户需要输入答案。输入后,程序显示正确答案,并要求用户给自己打分:Input the quality of your answer (0..5)。

整个过程没有任何图形,没有任何颜色,只有单调的字符。但对于当时的用户来说,这已经是奇迹——一个程序能够记住他们学过的每一个单词,并精确安排复习时间。

SuperMemo 7.0 (1999)

1999 年的 SuperMemo 7.0 已经运行在 Windows 平台上。启动后,用户看到的是全彩色的图形界面。左侧是知识树,用户可以展开各个主题;右侧是复习区域,显示当前卡片。按钮用图标表示,进度条用颜色填充,统计数据用图表呈现。

复习时,界面上方显示问题,下方有五个按钮,分别对应 0-5的评分。用户点击按钮后,程序立即计算下次复习时间,并显示在进度条上。

界面设计更加人性化,用户可以自定义字体、颜色、布局。但核心的复习流程——问题→回忆→评分→反馈——始终未变。

演化趋势

从 1.0 到 7.0 以及更现代的云版本,SuperMemo 的界面演化体现了几个趋势:

• 从字符到图形:命令行被图形界面取代,交互更加直观。

• 从单一功能到综合管理:知识树、统计图表、导入导出等功能不断添加。

• 从专家工具到大众产品:初学者模式、向导、帮助文档让软件更容易上手。

但核心算法和核心交互始终未变。这证明了一个道理:好的设计可以承载技术的演进,而不必随波逐流。

6.10 教学效果:对基础薄弱学习者的显著效果

SuperMemo 的教学效果,尤其体现在基础薄弱的学习者身上。

记忆困难的突破

对于记忆力较差的学习者,传统学习方法往往效果有限。他们需要反复接触同一个内容很多次才能记住,但又容易在复习间隔中遗忘。SuperMemo 的算法正好解决了这个问题:它精确控制每次复习的时机,让学习者在最需要复习的时候复习,最大限度地减少遗忘。

学习习惯的培养

SuperMemo 还有一个意想不到的效果:它培养了用户的学习习惯。每天打开软件,看到当天需要复习的卡片列表,用户会形成一种“任务感 ”。完成这些卡片后,看到进度条满格,又会产生成就感。这种正向循环,让很多原本没有学习习惯的人,逐渐变成了规律学习者。

科学依据

元分析研究(Cepeda et al., 2006)表明,间隔重复(分散练习)在长期记忆保持上的效果显著优于集中练习。对于基础薄弱的学习者,这个差距尤其明显。因为他们更容易遗忘,更需要精确的复习安排。

本章小结

SuperMemo证明了算法的力量。它用数学公式管理记忆,让学习从随机变成科学。但它也揭示了算法的局限:间隔重复可以帮你记住,但不能帮你理解。记住一个单词的拼写和意思,不等于会用这个词。真正的语言能力,需要算法与理解相结合。

从1985年波兰学生的深夜思考,到1993年的Windows版本,再到今天影响绝大多数间隔重复工具的SM-2算法,SuperMemo走过的路,正是记忆科学数字化的缩影。它告诉我们:好的工具可以优化学习过程,但学习的主体始终是人。算法负责安排什么时候复习,而理解的意义,仍然需要学习者自己去建构。

本章完结

《学习软件革命》 | 按章节更

下一篇:《学习软件进化论》 第七章  Pimsleur——听觉学习的商业化实践

参考文献:

1. Woźniak, P. A. (1990). Optimization of learning (Master‘s thesis). Poznań University of Technology.

2. Woźniak, P. A., & Gorzelanczyk, E. J. (1994). Optimization of repetition spacing in the practice of learning. Acta Neurobiologiae Experimentalis, 54, 59-62.

3. SuperMemo World. (1991-2024). *Development of SuperMemo (1985-2013)*. Retrieved from https://www.supermemo.com/en/blog/development-of-supermemo

4. SuperMemo World. (n.d.). *SM-2 algorithm specification*. Retrieved from https://www.supermemo.com/english/ol/sm2.htm

5. SuperMemo World. (n.d.). Learning Decalog. Retrieved from http://super-memory.org/english/decalog.htm

6. Cepeda, N. J., Pashler, H., Vul, E., Wixted, J. T., & Rohrer, D. (2006). Distributed practice in verbal recall tasks: A review and quantitative synthesis. Psychological Bulletin, 132(3), 354-380.

7. SuperMemo World. (2020). My adventure with SuperMemo – Janusz Dąbrowski. Retrieved from https://www.supermemo.com/en/blog/my-adventure-with-supermemo-janusz-dabrowski

1

1

end