学习的数学原理

对对对!建立在一个统一的数学框架之上,结合贝叶斯推断、信息论和认知科学。它从根植于中文结构本身的难度量表开始,然后在同一量表上衡量一切——你的知识、你的技能、你的认知负荷。

1. 难度层级

应用中的每个汉字、词语和短语都有一个难度分数——一个告诉系统它有多难的数字。这些分数不是随意的:它们遵循中文本身的组合结构。简单汉字得到低分,当汉字组合成词语和短语时,组合的难度从其组成部分的难度计算得出。这创造了从简单构建块到复杂表达的自然学习进阶。

这个难度量表是系统中其他一切的基础。技能水平为N的用户应该有超过一半的概率掌握了难度分数为N或更低的任何项目。本页描述的每个模型——水平追踪、技能估计、认知负荷、卡片选择——都在这同一个量表上运作。

单个汉字

基础。前约500个汉字有基于专家教学判断的人工策划难度分数。其余汉字按语料库频率排序。示例:

汉字拼音含义难度
one(一)$1$
èrtwo(二)$2$
sānthree(三)$3$
you(你)$4$
hǎogood(好)$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. 如何协同运作

每次你点击按钮——简单、良好、困难或失败——你都在系统的每一层引发连锁反应。你的知识估计更新,你的技能水平调整,你的认知负荷重新校准,下一张卡片被选择。这一切在毫秒内发生,结果是一种感觉像在读你心思的学习体验。

完整的连锁过程:

  1. 复习事件:更新短语的贝叶斯 $\alpha, \beta$,并将加权更新传播到所有组成汉字。
  2. 技能更新:如果结果有信息量,将 $\mu$ 向卡片难度调整并减少 $\sigma$。
  3. 认知负荷:根据所有活跃卡片的注意力、掌握度、相对难度和容量重新计算 $L$。
  4. 策略选择:使用 $L$ 设定新/复习阈值 $T$。
  5. 卡片选择:选择下一张卡片——新的或复习——按学习价值和难度匹配评分。

使这个系统健壮的是它能自我纠正。几个自然反馈回路保持一切平衡:

  • 过载保护:高 $L$ → 更少新卡片 → $L$ 下降。
  • 进度加速:低 $L$ → 更多新卡片 → 持续挑战。
  • 难度校准:$\mu$ 通过钳制IRT调整 → 更好的卡片匹配 → 适当的挑战。
  • 不确定性减少:有信息量的复习 → $\sigma$ 缩小 → 更窄的置信边界 → 更精确的卡片选择。

结果是一种毫不费力的学习体验——因为数学在每张卡片背后承担了繁重的工作。