Piotr Woźniak,1990年
本文摘自P. A. Wozniak于1990年在波兹南理工大学完成的硕士论文《学习的优化》,并经调整后作为独立文章发布在网上,P. A. Wozniak、M. K. Hejwosz,2010年7月20日。 请注意,本文已相当过时,包含大胆的假说。之所以发布,只是因为SuperMemo用户和其他人持续提出要求。它不应被视为Wozniak博士或SuperMemo World对相关问题当前立场的反映,在网上仅作档案保存。为了使文章更易阅读,做了少量修正,尤其是语言错误。 阅读前请注意,文中的假说性概念,大致可以用定义明确的程序性学习现象来替代,只要它符合这个基本假设:在随机学习中,需要由大脑自己找出哪些突触连接应当强化,基本方式是试错。全文把随机学习与确定性学习对照,后者大致对应陈述性学习。
SuperMemo方法已成功用于确定性学习,最终证明了其有效性与效果。不过,随机学习遵循不同原则,见第10章关于记忆生理学的讨论。因此,一个有趣的问题出现了:SuperMemo方法是否也能用于这种学习形式?早在1985年,SuperMemo方法就曾偶然用于打字、演奏贝斯、弹钢琴和鼓乐训练等随机学习领域。现在,我们考察更有规律地运用SuperMemo类算法进行盲打与鼓乐训练的近期结果。
9.1. 基于SuperMemo的盲打训练
毫无疑问,盲打训练可以归为涉及随机学习的过程。神经系统既不知道,也不能从任何来源直接得知,应该刺激哪些肌肉、按什么顺序、在什么时刻刺激。要在意识之外引导手指运动,全部控制信息都必须由运动系统的神经网络自行形成。为指导基于SuperMemo的盲打训练,我们开发了一个专门程序。它的结构和选项树,与用于确定性学习的SuperMemo程序完全相同,见第4章。不过,其中两个选项专门为盲打训练实现:Append,用于向知识库添加新条目;以及Test,用于复习。盲打条目采用3至20个字符的短语形式,在复习时练习。Append应能够挑出那些练习后最有助于学习者进步的短语。
评估学习者进步有两个标准:打字速度与错误数量。协调这两个标准最常见的办法,是为错误按键施加时间惩罚。多数情况下,打得最慢的短语,把错误惩罚也计算在内,就是最值得强化练习、以提高总体表现的候选条目。因此,选择哪些短语加入SuperMemo知识库,应当包括:用一段示例文本测试打字技能,找出最明显拉低总成绩的片段。
为简化过程,假定一个短语就是一个以空格分隔的单词。当某个单词的总体打字速度,或其中最低的单字符打字速度,明显低于学习者平均打字速度时,就把它选为候选条目。
在所讨论的实现中,采用以下公式:
x := word_speed*(1/word_length); if x < average_speed*0.6 OR character_speed < average_speed*0.4 then append_word;
其中:
- x:辅助变量。
- word_speed:当前单词的打字速度。
- word_length:当前单词的字符数量。
- character_speed:当前单词中单个字符的最低打字速度。
- average_speed:学习者的平均打字速度。
- append_word:把该单词加入知识库的过程。
注意,第一条语句根据word_speed计算x,是为了消除“较长单词打得较慢”这一规律带来的差异。变量x反映了针对不同短语长度标准化后的word_speed。
我们知道,一个词在特定上下文中可能打得更慢,通常是受前一个词影响。因此,添加算法总会为每个词生成一个伴随条目:把测试文本中的前一个词放在当前词之前,组成这个伴随条目。
Test选项是除Append之外,为盲打程序修改的第二个选项。它负责按SuperMemo重复间隔,复习知识库中的各个短语。复习间隔按以下公式计算:
I(1) = quality+1 I(i) = I(i-1)*EF
其中:
- I(i):第i次复习后的间隔,以天为单位。
- quality:第一次复习的质量,在0至5的评分范围内。
- EF:当前条目的E因子。
注意,与此前的情况不同,这里用复习质量参与确定第一次间隔。这是一种实验性方案,其有效性既未被证明,也未被否定。
按惯例,所有条目刚加入时,E因子均为2.5。后续复习中,再根据作答质量,按照标准公式修改,参见第3章的SM-2至SM-5算法。
作答质量根据复习中的打字表现自动计算。
计算质量时采用两个参数:
- 复习过程中的平均打字速度,SPEED。
- 条目的输入次数,COUNT,表示一次复习中,该条目被输入多少次后,这次复习的平均打字速度达到了该条目历史最高打字速度的87%。最高速度指单次输入所取得的最高值。
87%这个值,以及计算打字质量所需的其他数值,都是通过试错选定的。
COUNT参数不允许超过50,因为输入50次后,不论表现如何,复习程序都会中止。
下面展示计算打字质量所用的函数:
function speed_quality(x); constant x1=0.3; y1=0; x2=0.86; y2=5; begin speed_quality := (y2-y1)/(x2-x1)*(x-x1)+y1; end; function count_quality(x); constant x1=20; y1=5; x2=50; y2=1; begin count_quality := (y2-y1)/(x2-x1)*(x-x1)+y1; end; function quality(count, speed, max_speed); begin quality := count_quality(count)+speed_quality(speed/max_speed); quality := quality/2; if quality < 0 then quality := 0; if quality > 5 then quality := 5; end;
上述函数中,各标识符的含义:
- speed_quality:计算打字质量中速度成分的函数。
- count_quality:计算打字质量中次数成分的函数。
- count:复习中输入该条目的次数。
- speed:复习中记录的平均打字速度。
- max_speed:该条目历史上记录的最高打字速度,指单次输入的最高值。
注意,(x1,y1)和(x2,y2)确定了计算质量中SPEED与COUNT成分所用的线性函数。
基于SuperMemo的打字训练程序,自1990年4月1日起开始使用,看起来对改进我的打字技能非常有帮助。不过,关于以下问题,目前还不能提供可靠的定量数据:
- 与其他标准打字训练程序相比,SuperMemo打字训练器有多有效?
- 对于水平更低或更高的学习者,程序有多大用途?质量评估参数是按我个人要求调整的。
- 使用这个程序所获得的典型进步曲线是什么样的?
这些问题,以及许多相关问题,很快都将得到研究。不过,依据迄今获得的数据,可以尝试回答:SuperMemo重复间隔能否成功用于随机学习?答案肯定是可以,但从打字训练器知识库的E因子分布中,还能得出一个有趣结论,见图9.1。
| 范围 | 数量 | 百分比 | 0% | 10% | 20% | 30% | 40% | 50% | 60% |
|---|---|---|---|---|---|---|---|---|---|
| 大于3.1 | 0 | 0% | |||||||
| (3.0, 3.1> | 0 | 0% | |||||||
| (2.9, 3.0> | 0 | 0% | |||||||
| (2.8, 2.9> | 61 | 35% | |||||||
| (2.7, 2.8> | 35 | 20% | |||||||
| (2.6, 2.7> | 29 | 17% | |||||||
| (2.5, 2.6> | 16 | 9% | |||||||
| (2.4, 2.5> | 10 | 6% | |||||||
| (2.3, 2.4> | 10 | 6% | |||||||
| (2.2, 2.3> | 6 | 3% | |||||||
| (2.1, 2.2> | 5 | 3% | |||||||
| (2.0, 2.1> | 0 | 0% | |||||||
| (1.9, 2.0> | 2 | 1% | |||||||
| (1.8, 1.9> | 1 | 1% | |||||||
| (1.7, 1.8> | 0 | 0% |
图9.1:SuperMemo打字训练程序知识库中的E因子分布,取自训练过程第55天。
图9.1非常明显地显示,打字训练器知识库的E因子有上升趋势。此前,在用于确定性学习的标准SuperMemo程序知识库中,尚未观察到这种现象。只有两种可能:质量评估过于宽松,或者复习过于频繁。必须排除第一种解释,因为从上述公式可以得知:连续两次复习中,如果后一次表现没有至少达到前一次的水平,质量就不可能超过3。要达到QUALITY>3,COUNT_QUALITY必须大于1,因此COUNT必须小于50,也就意味着平均速度必须大于最高速度的87%;而前一次复习的最高速度只能低于或等于这个值,因为两次都使用最高速度的同一百分比来决定中止复习。此外,只有质量大于4时,E因子才会上升。因此,最终结论应是:随机学习的最优重复安排,比确定性学习更稀疏,也就是相应间隔更长。
考虑到随机学习中的一次复习,并不是单一动作,这个事实可以预期。这意味着,编码所练技能所需的突触,在一次复习中会被刺激很多次,我无法设想不如此的情况。不过,我不会急于下结论,而把这个问题留给进一步研究。
9.2. 基于SuperMemo方法的鼓乐训练
打鼓和演奏其他乐器一样,可以归为需要随机学习的技能。下面给出一个SuperMemo应用示例,用来学习专业鼓手所需的一部分技能。它旨在说明如何设计训练,而不是提供这种方法有效性的定论数据;这一方案自1990年5月10日起使用。和所有学习问题一样,关键是选出单独的SuperMemo条目,让它们能按适当间隔重复。在这个例子中,单独的重复性运动任务被用作条目,训练旨在改善打鼓所涉技能中某个选定子类的运动表现。
按间隔进行鼓乐训练的任务示例
- 215
- ••^••^
- o•o•oo
- •o•oo•
- o•o••o
- ——识别编号
- ——踩镲重音
- ——踩镲节拍
- ——小鼓节拍
- ——底鼓节拍
同一任务嵌入一个常规全音符长度的小节
- │ │
- │•••¦•••¦•••¦•••│
- ••••••••^••^•••••
- ó•ó•ó•o•o•ooó•ó•ó
- ••••ó••o•oo•••ó••
- ó•ó•••o•o••o••••ó
- │•••¦•••¦•••¦•••│
- ——任务边界
- ——任务承载小节的边界与分格
- ——踩镲重音
- ——踩镲节拍
- ——小鼓节拍
- ——底鼓节拍
- ——任务承载小节的边界与分格
对包含踩镲、小鼓和底鼓、长度为6个十六分音符的鼓谱共1700万种组合,按决定任务难度的10项约束筛选:
- 可执行性约束: 底鼓最多连续敲两次。 小鼓最多连续敲三次。 踩镲最多连续敲四次。 踩镲重音始终为单个。
- 强度约束: 底鼓至少敲三次。 小鼓至少敲两次。 踩镲至少敲四次。 踩镲重音至少出现一次。
- 审美约束: 踩镲重音始终伴随底鼓。 小鼓永不伴随底鼓。
得到1307个任务后,再剔除高度相似的组合,最终形成300个任务。
所得任务表的一部分
| 201 | 211 | 221 | 231 | 241 | 251 | 261 | 271 |
|---|---|---|---|---|---|---|---|
| •••••^ | •••••^ | •••••^ | •••••^ | •••••^ | •••••^ | •••••^ | •••••^ |
| o•o•oo | o•o•oo | o•o•oo | o•oooo | o•oooo | o•oooo | ooo•oo | ooo•oo |
| ••oo•• | •oo••• | o•o•o• | ••oo•• | •o•oo• | o•o••• | ••o•o• | •o•o•• |
| oo•••o | o••o•o | •o•o•o | •o••oo | o•o••o | •o••oo | oo•••o | o•o••o |
| 202 | 212 | 222 | 232 | 242 | 252 | 262 | 272 |
|---|---|---|---|---|---|---|---|
| ••••^• | ••••^• | ••••^• | ••••^• | ••••^• | ••••^• | ••••^• | ••••^• |
| o•o•oo | o•o•oo | o•ooo• | o•ooo• | o•ooo• | o•oooo | o•oooo | o•oooo |
| •o•o•• | o••o•o | ••o••o | •oo••• | o•o••o | ••oo•• | •ooo•• | oo•o•• |
| o•o•o• | •oo•o• | oo•oo• | o•••oo | •o•oo• | oo••o• | o•••oo | ••o•oo |
每个任务持续练习,直到达到学习者主观判断的满意表现。为简化学习过程的管理程序,把任务分为三个难度类别:
- A类:相当于E因子2.3。
- B类:相当于E因子1.7。
- C类:相当于E因子1.4。
最初,全部任务属于A类。复习过程中,按以下等级评估保持质量,括号中是E因子类别的修改:
- 良好或优秀:不惩罚。
- 足够:难度类别从A变B,或从B变C。
- 一般:难度类别改为C。
- 不足:难度类别改为C,并重置过程,即从头开始复习。
各个任务的复习间隔,按下式计算:
I(1) = 4 I(n) = I(n-1)*EF
其中:
- I(n):第n次复习后的间隔。
- EF:E因子,取2.3、1.7或1.4,分别对应A、B、C类。
正如盲打训练中强调的,随机学习的复习,可以比确定性学习更稀疏。因此,上述方案看起来过于谨慎。一位专业鼓手使用这项训练已有一个多月,评价非常积极。不过,这种肯定主要来自方法总体上的规律性,而不是SuperMemo重复间隔本身的效果。如此短的时间,还不足以让它显示真正的力量。同样,要获得更有定论的结果,需要更长时间的应用。
阶段总结
- SuperMemo方法能够成功用于随机学习过程。
- 确定性学习的重复间隔,对随机学习要么适用,要么过于严格;也就是说,应用SuperMemo方法,可以获得比前面章节讨论得更好的结果,即更高的获取速率。
- 展示了SuperMemo方法在盲打和鼓乐训练中的应用示例。