机器学习在有一件事上一直做得不好,那就是学习新任务的时候会忘记之前完成过的任务。
在监督学习任务中,监督学习的目标是构建模型fx,用于预测与看不见的特征向量关联的目标向量x,为此,监督学习方法通常采用ERM原则。但是ERM的直接应用会导致“灾难性的遗忘”,也就是说,机器的学习在接触新任务后会忘记如何解决过去的任务。作者们提出了一种新的学习度量,用于评估模型如何在一系列学习任务中迁移知识。最终,作者们提出了一个新的顶级表现的算法——梯度片段记忆(GEM),它使得学习机器在学习新任务的时候也可以不忘记以往学到的技能,同时能够使有益的知识转移到先前的任务。
机器在学习当前任务时,可以访问之前所有任务的部分数据,它们被收集在一个称为“episodic memory”的地方。作者提出了“Gradient Episodic Memory”的方法来利用“episodic memory”解决机器遗忘的问题。
以往机器有关序列学习的任务都有若干特点:
1任务数量少,但每个任务所要学习的例子很多
2学习机器对每个任务的例子进行了几次复习
3报告的平均绩效是唯一的指标
但本文的作者采用一种“更像人类”(“more human-like”)的学习任务来测试GEM模型,该种任务的特点:
1任务数量大,但每个任务的训练示例数量少,
2学习只观察每个任务的示例一次
3增加报告测量迁移的绩效和遗忘的指标,作者认为除了观察其跨任务的绩效外,评估转移知识的能力也很重要
在学习任务的框架中,作者定义了3个任务指标——ACC/BWT/FWT。
这些指标越大代表了模型建立越完美,如果两个模型的ACC相同,BWT和FWT的值越大的模型越好(文章并没有比较BWT和FWT,是不是说明ACC是下位的指标)。对于学习的精细度(fine-grained evaluation)评估,可以通过更构建一个行数多于任务数的矩阵R中的元素Ri,j(为观察连续体中第i个样本后对任务tj的测试精度)来进行评估。
EGM算法:
作者在任务k的工作记忆上定义如下损失函数:
其中Mk 表示任务k的memory。但这种方式容易在Mk中的样本上过拟合。作者尝试一种方法,通过构建一个不等式约束,让其只减不增。作者新定义了一个学习函数模型:
其中是学习前一个任务后的模型。作者进一步观察到,其实并不需要保存之前的模型,只需要在模型参数更新后,之前任务的损失不增加就可以了。这可以通过计算梯度的夹角来确定:
如果夹角为锐角,则学习当前任务时,任务k的性能就不会增加。如果夹角不是锐角,通过投影的方法,将梯度g投影到最近的梯度上,并且建立优化函数求解
文章还通过实验来评估GEM在连续学习中的表现。
实验采用3个数据集(datasets)——MNIST Permutations;MNIST Rotations;CIFAR 100。对于所有数据集,实验给出了T = 20个任务。在MNIST数据集上,每个任务都有来自10个不同类别的1000个示例。在CIFAR100数据集上,每个任务都有来自5个不同类别的2500个示例。该模型按顺序观察任务,每个示例观察一次。在每个数据集的测试分区上执行每个任务的评估,记录ACC,BWT,FWT的值。
不仅如此,作者还将GEM和其他算法(single,independent, iCaRL和EWC)一起比较,观察和记录各项指标来观察GEM的绩效。
实验结果:
图左为所有数据集和方法的指标数据分析图,图右显示的是不同方法在整个连续性数据中第一个任务的测试准确性的演变。可以观察到,总的来说,GEM的性能与多模态模型(the multimodal model)相似,甚至更好,并且这些模型非常适用于MNIST任务;不仅如此,GEM在CIFAR100中表现出最小的遗忘和正向后移(backward transfer)。GEM的性能明显优于其他的持续学习方法,并且计算量更少。综合后续的CPU训练时间、工作记忆容量的实验测量后,可以观察到GEM优质的性能。
实验虽然展示出了GEM的高性能,作者表明但仍然有3点不足:
1首先,GEM没有利用结构化的任务描述符,而描述符可以被用来获得零镜头学习(zero-shot learning)。
2其次,实验没有研究高级记忆管理(例如构建任务的核心集)。
3第三,每个GEM迭代要求每个任务向后通过一次,这增加了计算时间。当然,如何解决计算时间也是作者自身准备研究的方面。