如何避免“灾难性遗忘”?

机器算法验证 深度学习 自然语言
2022-03-18 16:59:41

我读了 Michael Honiball(Spacy 的创建者)的这篇文章,他在其中谈到了“灾难性遗忘”问题。

在这里他说,当我们想要微调预训练模型以添加新标签或纠正某些特定错误时,它可能会引入“灾难性遗忘”问题(失去其普遍性)。为了解决这个问题,他提出了一种称为伪排练的技术。他说要使用初始模型预测一些示例,并通过微调数据将它们混合,并将其用作模型的目标。

这是否意味着我使用Y^(ThePredictedValue)代替Y(TheGroundTruth)由初始模型生成,将其与新模型混合Y新获得的数据点的值并用它来训练我的模型?

我对么?有人可以详细说明吗?

1个回答

灾难性遗忘是神经网络中的一个固有问题。来自维基百科,

(灾难性遗忘)是“敏感性-稳定性”困境或“稳定性-可塑性”困境的根本表现。具体来说,这些问题是指能够制造一个对新信息敏感但不会被新信息干扰的人工神经网络的问题。查找表和联结网络位于稳定性可塑性谱的对立面。前者在存在新信息的情况下保持完全稳定,但缺乏从新输入中概括,即推断一般原则的能力。

什么是灾难性遗忘?让我们考虑两个任务:任务 A 和任务 B。现在,假设我们使用的预训练模型在任务 A 上已经相当出色(学习权重θA),并且我们希望“微调”它以使其也适合任务 B。通常的做法是获取在任务 A 上训练的模型的权重,并将它们用作任务 B 训练的初始化。这很好用在任务 B 是任务 A 的“子任务”的应用程序中(例如,任务 B 是检测眼镜,任务 A 是检测面部)。当 B 不是 A 的子任务时,担心会发生灾难性遗忘:本质上,网络将使用之前为任务 A 优化过的相同神经元来预测任务 B。在这样做时,它将完全失去正确分类任务 A 实例的能力。您实际上可以自己进行实验:您可以构建一个小型网络,可以判断 MNIST 图像是 5 还是不是 5,并测量它在此任务中的准确性;如果您继续对该模型进行微调以判断 MNIST 图像是否为 4,您会注意到最终模型在原始任务(识别 5)上的准确性已经恶化。

一个天真的解决方案。灾难性遗忘的简单解决方案是不仅将微调模型的权重初始化为θA,但还添加正则化:当微调模型的解远离时惩罚它θA. 从本质上讲,这意味着目标将是为任务 B 找到仍然相似的最佳解决方案θA,任务 A 的解决方案。我们之所以称这是一种幼稚的方法,是因为它通常不能很好地工作。神经网络学习到的函数往往非常复杂且远非线性,因此参数值的微小变化(即θB接近θA)仍然会导致非常不同的结果(即fθAfθB)。因为这是我们关心的结果,所以这对我们不利。

伪排练更好的方法是尝试在任务 B 上表现出色,同时对以下给出的答案给出相似的答案 fθA. 好处是这种方法很容易实现:一旦你学会了θA,我们可以使用该模型生成无限数量的“标记”示例(x,fθA(x)). 然后,在训练微调模型时,我们将在为任务 B 标记的示例和以下形式的示例之间交替(x,fθA(x)). 您可以将后者视为“修订练习”,以确保我们的网络在学习处理任务 B 的同时不会失去处理任务 A 的能力

一个更好的方法:添加内存作为人类,我们既擅长使用新的例子进行概括(可塑性),又擅长记住非常罕见的事件,或者保持我们有一段时间没有使用的技能(稳定性)。正如我们所知,在许多方面,实现与深度神经网络类似的唯一方法是将某种形式的“记忆”融入其中。这超出了您的问题范围,但它是一个有趣且活跃的研究领域,所以我想提一下。请参阅此示例最近的工作:学习记住稀有事件