学习的数学原理
对对对!建立在一个统一的数学框架之上,结合贝叶斯推断、信息论和认知科学。它从根植于中文结构本身的难度量表开始,然后在同一量表上衡量一切——你的知识、你的技能、你的认知负荷。
1. 难度层级
应用中的每个汉字、词语和短语都有一个难度分数——一个告诉系统它有多难的数字。这些分数不是随意的:它们遵循中文本身的组合结构。简单汉字得到低分,当汉字组合成词语和短语时,组合的难度从其组成部分的难度计算得出。这创造了从简单构建块到复杂表达的自然学习进阶。
这个难度量表是系统中其他一切的基础。技能水平为N的用户应该有超过一半的概率掌握了难度分数为N或更低的任何项目。本页描述的每个模型——水平追踪、技能估计、认知负荷、卡片选择——都在这同一个量表上运作。
单个汉字
基础。前约500个汉字有基于专家教学判断的人工策划难度分数。其余汉字按语料库频率排序。示例:
| 汉字 | 拼音 | 含义 | 难度 |
|---|---|---|---|
| 一 | yī | one(一) | $1$ |
| 二 | èr | two(二) | $2$ |
| 三 | sān | three(三) | $3$ |
| 你 | nǐ | you(你) | $4$ |
| 好 | hǎo | good(好) | $5$ |
多字短语
当汉字组合成短语时,短语的难度总是高于其最难的汉字——但不会像简单地把所有汉字难度加在一起那么难。这直觉上说得通:认识单个汉字给了你一个起点,但关于它们如何协同工作还有额外的东西需要学习。
形式化地,对于由汉字 $C_1, C_2, \ldots, C_n$ 组成的短语 $P$,难度使用平方和的平方根的上取整来计算:
$$\text{difficulty}(P) = \left\lceil \sqrt{\sum_{i=1}^{n} \text{difficulty}(C_i)^2} \;\right\rceil$$这个公式有几个理想的性质:
- 严格单调性:短语总是比其最难的组成部分更难,由上取整操作保证。
- 次可加性:$\text{difficulty}(P) < \sum_i \text{difficulty}(C_i)$ ——整体比各部分之和更容易。
- 组成部分敏感性:每个组成汉字都影响最终难度。
计算示例
| 短语 | 组成部分 | 计算 | 难度 |
|---|---|---|---|
| 不好 (bad) | 不(8), 好(5) | $\lceil\sqrt{64+25}\rceil = \lceil 9.4 \rceil$ | $10$ |
| 很好 (very good) | 很(6), 好(5) | $\lceil\sqrt{36+25}\rceil = \lceil 7.8 \rceil$ | $8$ |
| 你好 (hello) | 你(4), 好(5) | $\lceil\sqrt{16+25}\rceil = \lceil 6.4 \rceil$ | $7$ |
| 好吃 (delicious) | 好(5), 吃(12) | $\lceil\sqrt{25+144}\rceil = \lceil 13.0 \rceil$ | $13$ |
| 你很好 (you're very good) | 你(4), 很(6), 好(5) | $\lceil\sqrt{16+36+25}\rceil = \lceil 8.8 \rceil$ | $9$ |
部首
部首是汉字内部反复出现的构建块——就像"水"部首(氵)出现在河(river)、海(ocean)和湖(lake)中。学习部首帮助你识别模式和猜测含义,但它们是抽象概念,只有在你见过足够多的真实汉字后才有意义。所以应用会等到你建立了扎实的汉字基础后才引入它们,确保你有足够的具体例子来锚定每个部首的含义。
部首难度的计算有利于常见部首更早出现:
$$\text{difficulty} = \max\!\Big(500,\; 500 + \frac{d_3}{\sqrt{c}} + \frac{c_{\max} - c}{10}\Big)$$其中 $d_3$ 是包含该部首的第3容易的汉字的难度,$c$ 是引用它的汉字数量,$c_{\max}$ 是被引用最多的部首的计数。常见部首更早出现;稀有的则等待。
2. 贝叶斯水平模型
把每张闪卡想象成有一个隐藏的"知识仪表",介于0%和100%之间。当你第一次遇到一张卡片时,应用真的不知道你会不会答对——你可能在那个范围的任何位置。每次复习,它观察你的表现并相应调整估计:答对了,仪表上升;答错了,它回落。经过多次复习,应用建立起越来越准确的关于你实际知道什么的图景。
数学上,我们将你对每个中文短语的知识建模为一个未知参数 $\theta \in [0,1]$ 的伯努利随机变量,表示你正确回忆它的概率。我们对 $\theta$ 放置一个Beta先验:
$$\theta \sim \text{Beta}(\alpha, \beta)$$Beta分布是伯努利似然的共轭先验,这意味着每次复习都产生一个优雅的封闭形式更新:
$$\theta \mid \text{data} \;\sim\; \text{Beta}(\alpha + s,\; \beta + f)$$其中 $s$ 是成功次数,$f$ 是失败次数。任意时刻的期望水平为:
$$\mathbb{E}[\theta] = \frac{\alpha}{\alpha + \beta}$$复习评分更新
每次复习后,你告诉应用进展如何:简单、良好、困难或失败。每种回应提供不同量的证据。轻松答对是你掌握材料的强烈信号。点击"困难"是你仍在努力的温和提示。以下是每种结果如何调整模型:
| 结果 | $\Delta\alpha$ | $\Delta\beta$ | 解释 |
|---|---|---|---|
| 简单 (EASY) | $+1.0$ | — | 掌握的强证据 |
| 良好 (GOOD) | $+0.7$ | — | 掌握的中等证据 |
| 困难 (HARD) | — | $+0.3$ | 困难的轻微证据 |
| 失败 (FAIL) | — | $+1.0$ | 未掌握的强证据 |
保守收敛
系统是刻意保守的——它不会在仅一两次正确回答后就判定你已掌握。掌握需要通过持续表现来获得。这意味着幸运猜测不会欺骗系统,但真正的知识总会被认可:
| 经过 $n$ 次简单评分 | 分布 | $\mathbb{E}[\theta]$ |
|---|---|---|
| $n = 0$ | $\text{Beta}(1, 1)$ | $0.50$ |
| $n = 1$ | $\text{Beta}(2, 1)$ | $0.67$ |
| $n = 3$ | $\text{Beta}(4, 1)$ | $0.80$ |
| $n = 10$ | $\text{Beta}(11, 1)$ | $0.92$ |
这种保守性防止了幸运猜测带来的过度自信,同时允许真正的掌握随时间被认可。
3. 组成部分归因
中文有一个独特之处:汉字组合成词,词组合成短语。当你成功复习像好吃(delicious)这样的短语时,这不仅告诉我们关于短语的信息,还告诉我们关于组成它的单个汉字好和吃的信息。你显然也认识这些汉字——否则你不可能答对短语。
但微妙之处在于:并非短语中的每个汉字都值得同等的功劳。如果一个汉字比另一个难得多,而你答对了整个短语,那么难的汉字是更令人印象深刻的部分。所以我们给它更多的功劳。
基于难度的加权归因
短语中的每个汉字 $i$ 有一个难度分数 $d_i$。我们使用平方难度来计算归一化权重:
$$w_i = \frac{d_i^2}{\displaystyle\sum_{j} d_j^2}$$二次关系确保更难的汉字获得比例上更多的归因。对于结果为 $O$ 的复习,每个组成汉字收到加权更新:
$$\Delta\alpha_i = w_i \cdot \Delta\alpha(O) \qquad\qquad \Delta\beta_i = w_i \cdot \Delta\beta(O)$$计算示例
假设你在好吃(delicious)上评分为简单,其中好的难度为5,吃的难度为12:
$$w_{\text{好}} = \frac{5^2}{5^2 + 12^2} = \frac{25}{169} \approx 0.148$$ $$w_{\text{吃}} = \frac{12^2}{5^2 + 12^2} = \frac{144}{169} \approx 0.852$$所以吃收到约好的6倍归因,反映了它对短语难度的更大贡献。这种传播意味着每次短语复习同时为其中每个汉字建立证据。
4. 技能水平追踪(钳制IRT)
除了追踪单个卡片,应用还维护你整体技能水平的估计——一个代表你大致能处理多难卡片的数字。这个数字与语料库在同一个难度量表上:技能水平100意味着你应该能舒适地处理难度100及以下的汉字和短语。
这个估计是刻意谨慎的:它只在你做出令人惊讶的事情时才更新。答对一张简单卡片不能证明任何新东西,答错一张难卡片是预料之中的。但答对一张难卡片?那是有意义的证据,表明你的技能水平应该提高。
技术上,这使用了具有非对称证据钳制的自定义项目反应理论模型。与传统的Elo或Glicko系统中单次观察可能导致大幅跳跃不同,钳制方法确保技能估计逐渐向展示的能力移动。
双参数模型
你的技能由 $\mu$(当前估计)和 $\sigma$(不确定性)表示:
$$\text{skill} = \big(\mu,\; \sigma\big) \qquad \text{initially} \;(\mu_0 = 0,\;\sigma_0 = 50)$$任意时刻的95%置信区间为:
$$\text{CI}_{95\%} = \mu \pm 1.96\,\sigma$$非对称证据钳制
关键洞察是并非所有复习结果都同样有信息量。想象你是一个技能100的学习者,答对了难度5的卡片——当然你会答对,对你来说太简单了。但如果你答对了难度150的卡片,那是真正的新闻。系统只在结果真正令人惊讶时才更新你的技能估计:
| 结果 | 卡片 vs $\mu$ | 有信息量? | 效果 |
|---|---|---|---|
| 成功 | difficulty $> \mu$ | 是 | $\mu$ 向难度移动 |
| 失败 | difficulty $< \mu$ | 是 | $\mu$ 向难度移动 |
| 成功 | difficulty $\leq \mu$ | 否 | 无变化 |
| 失败 | difficulty $\geq \mu$ | 否 | 无变化 |
钳制更新规则
当令人惊讶的结果发生时,你的技能估计会部分地向卡片难度移动——但不会完全到达。每次有信息量的复习缩小35%的差距,这意味着系统平滑收敛而不会对任何单次复习过度反应:
$$\mu' = \mu + \alpha \cdot (d - \mu) \qquad\text{where}\quad \alpha = 0.35$$这是指数平滑——每次有信息量的复习将技能移动到展示水平的剩余距离的35%。收敛是渐近的:你不可能在单次观察中超调。
| 复习 | $\mu$ | 到 $d = 100$ 的距离 |
|---|---|---|
| 开始 | $0$ | $100$ |
| 1 | $35.0$ | $65.0$ |
| 2 | $57.8$ | $42.2$ |
| 3 | $72.5$ | $27.5$ |
| 5 | $88.4$ | $11.6$ |
| 10 | $98.6$ | $1.4$ |
不确定性衰减
系统还追踪它对你技能估计的信心。早期,它相当不确定,对大幅修正持开放态度。随着你提供更多有信息量的复习,不确定性缩小——但它永远不会达到零,因为人的能力自然会随时间波动。
重要的是,只有令人惊讶的结果才能减少不确定性。你不能通过整天刷简单卡片来博取系统的信心——那不会使它对你真正的水平更确定。
不确定性几何递减,但只有在证据有信息量时:
$$\sigma' = \sigma \cdot \gamma^{\,n} \qquad\text{where}\quad \gamma = 0.93$$每次有信息量的复习将 $\sigma$ 减少7%。经过13次有信息量的复习,$\sigma$ 降到20以下——高置信度。$\sigma_{\min} = 5$ 的下限保持认识论谦逊:系统永远不会变得完全确定。
关键是,无信息量的结果(简单卡片上的成功,困难卡片上的失败)不会减少 $\sigma$。你不能通过刷已经掌握的材料来建立信心。
5. 认知负荷模型
你有没有一次塞太多新词汇结果一个都没记住?那就是认知过载,它是有效语言学习的最大敌人。对对对!持续监控你正在处理的脑力工作量,并相应调整节奏。当你精力充沛、状态良好时,它引入新材料。当你到达极限时,它放慢速度,专注于巩固已经见过的内容。
系统追踪四个因素来估计你的认知负荷:每张卡片的不确定程度、你对它的掌握程度、它相对于你水平的难度,以及你作为学习者的总容量。
只有活跃卡片(你直接复习过的卡片)贡献认知负荷。仅通过组成部分归因获得隐含复习的卡片被排除——它们代表推断的知识,而非主动学习负担。
注意力需求
一张你从未见过的卡片需要最大注意力——它可能是任何东西。一张你复习过很多次的卡片,无论你掌握得好不好,需要更少的注意力,因为你至少已经在脑中对它进行了分类。系统使用你知识估计的统计不确定性来衡量:
$$\text{Var}[\theta] = \frac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)}$$我们将其归一化为注意力分数:
$$\text{attention} = \sqrt{\frac{\text{Var}[\theta]}{0.25}}$$最大注意力出现在 $\text{Beta}(1,1)$(从未见过)。随着证据积累,注意力向零下降,无论卡片是容易还是困难——你只是已经对它进行了分类。
掌握因子
随着你在一张卡片上变得更好,它占用的脑力空间更少。这不是突然的切换——而是一条平滑的曲线,水平的每一小步提升都给你多一点呼吸空间。一张你80%有信心的卡片几乎不会被记录为认知负荷:
$$m(\theta) = \frac{1}{1 + e^{12(\theta - 0.65)}}$$| $\theta$ | $m(\theta)$ | 缓解 |
|---|---|---|
| $0.50$ | $0.95$ | 5% — 卡片开始记住了 |
| $0.60$ | $0.73$ | 27% — 知识在巩固 |
| $0.70$ | $0.38$ | 62% — 基本掌握 |
| $0.80$ | $0.11$ | 89% — 完全掌握 |
| $0.90$ | $0.01$ | 99% — 自动回忆 |
水平的每一步提升都提供切实的缓解——没有停滞感。
相对难度权重
难度始终是相对的。难度50的卡片对初学者来说是压倒性的,但对中级学习者来说是微不足道的。系统将每张卡片的难度与你当前的技能水平进行比较,所以匹配你水平的卡片总是贡献相同的负荷——无论你是在第一天还是第三百天:
$$r = \sqrt{\frac{\text{difficulty}}{\text{effective\_skill}}} \qquad\text{where}\quad \text{effective\_skill} = \max(\mu, 10)$$在你技能水平上的卡片权重始终 $\approx 1.0$,无论你是初学者(技能10,难度10)还是中级(技能500,难度500)。
认知容量
初学者只能同时处理几张卡片就会感到不堪重负。但随着你学更多中文,你发展出心理捷径、模式识别和上下文锚点,让你能同时处理更多材料。系统建模了这种增长的容量——高级学习者可以舒适地管理比初学者多十倍的活跃卡片:
$$\text{capacity} = \text{effective\_skill}^{\,0.6}$$| 技能水平 | 容量 | ~80%负荷的卡片数 |
|---|---|---|
| 10(初学者) | $4.0$ | ~10 |
| 100 | $15.9$ | ~39 |
| 500(中级) | $41.6$ | ~100 |
| 2000(高级) | $95.6$ | ~235 |
综合负荷
把它们放在一起:每张卡片的认知成本取决于它有多不确定、你掌握得多好、对你水平来说有多难,以及你的总容量。将所有活跃卡片的这些值加起来,你得到一个代表你大脑"满载"程度的数字:
$$\ell_i = \frac{\text{attention}_i \;\cdot\; m(\theta_i) \;\cdot\; r_i}{\text{capacity}}$$总认知负荷是所有活跃卡片的总和:
$$L = \sum_{i \in \text{active}} \ell_i$$容量归一化确保"80%负载"始终意味着"接近你的个人极限"——无论那个极限是10张卡片还是235张。
6. 自适应卡片选择
这是所有部分汇聚在一起回答最重要问题的地方:你接下来应该学什么?系统面临一个基本权衡——引入新的令人兴奋的东西,还是回去巩固你仍在学习的东西?太多新材料你会全忘了。太多复习你会感到无聊。答案取决于你现在的负荷。
策略选择
当你的认知负荷低(你有充足的脑力带宽),系统大力倾向于引入新卡片。当你接近容量时,它几乎完全转向复习。平衡点动态确定:
$$T = \text{clamp}\!\big(0.5 + \Delta(L),\; 0.1,\; 0.9\big)$$当 $L < 0.3$(充足容量),$\Delta = +0.3$ ——大力倾向新卡片。当 $L > 0.8$(过载),$\Delta = -0.4$ ——几乎完全复习。
概率化复习选择
当系统决定展示复习卡片时,它不是随机选择。它寻找你"最佳区域"的卡片——你不确定的(不太容易也不太难)且难度匹配你当前技能水平的。在你知识边缘的卡片得分最高,因为那是复习最有价值的地方:
$$\text{score} = 0.7 \cdot \underbrace{e^{-\left(\frac{\theta - 0.5}{0.2}\right)^2}}_{\text{learning zone}} + 0.3 \cdot \underbrace{e^{-|\mu - d|/50}}_{\text{difficulty match}}$$第一项是以 $\theta = 0.5$ 为中心的高斯——最可能从复习中受益的最佳学习区域。第二项倾向于难度接近你当前技能水平的卡片。然后根据这些分数概率化地选择卡片。
7. 如何协同运作
每次你点击按钮——简单、良好、困难或失败——你都在系统的每一层引发连锁反应。你的知识估计更新,你的技能水平调整,你的认知负荷重新校准,下一张卡片被选择。这一切在毫秒内发生,结果是一种感觉像在读你心思的学习体验。
完整的连锁过程:
- 复习事件:更新短语的贝叶斯 $\alpha, \beta$,并将加权更新传播到所有组成汉字。
- 技能更新:如果结果有信息量,将 $\mu$ 向卡片难度调整并减少 $\sigma$。
- 认知负荷:根据所有活跃卡片的注意力、掌握度、相对难度和容量重新计算 $L$。
- 策略选择:使用 $L$ 设定新/复习阈值 $T$。
- 卡片选择:选择下一张卡片——新的或复习——按学习价值和难度匹配评分。
使这个系统健壮的是它能自我纠正。几个自然反馈回路保持一切平衡:
- 过载保护:高 $L$ → 更少新卡片 → $L$ 下降。
- 进度加速:低 $L$ → 更多新卡片 → 持续挑战。
- 难度校准:$\mu$ 通过钳制IRT调整 → 更好的卡片匹配 → 适当的挑战。
- 不确定性减少:有信息量的复习 → $\sigma$ 缩小 → 更窄的置信边界 → 更精确的卡片选择。
结果是一种毫不费力的学习体验——因为数学在每张卡片背后承担了繁重的工作。