神经网络容易发生灾难性遗忘吗?

人工智能 神经网络 机器学习 增量学习 灾难性遗忘
2021-11-06 19:23:03

想象一下,你向神经网络展示一张狮子的图片 100 次,并将其标记为“危险”,因此它知道狮子是危险的。

现在想象一下,之前你已经向它展示了数百万张狮子的图像,并交替地将其标记为“危险”和“不危险”,这样狮子危险的概率是 50%。

但是最后 100 次已经推动神经网络非常积极地认为狮子是“危险的”,从而忽略了最后一百万个教训。

因此,神经网络似乎存在缺陷,因为它们可以根据最近的证据过快地改变主意。特别是如果之前的证据在中间。

是否有一个神经网络模型可以跟踪它所看到的证据数量?(或者这是否相当于让学习率降低1/T在哪里T是试验次数?)

4个回答

是的,确实,神经网络很容易发生灾难性遗忘(或干扰)目前,这个问题经常被忽略,因为神经网络主要是离线训练(有时称为批量训练),这个问题并不经常出现,也不是在线或增量训练,这是人工智能发展的基础

有人在研究神经网络中的持续终身学习,试图让神经网络适应持续终身学习,即模型从数据流中不断学习的能力,这样他们就不会完全忘记之前获得的知识,同时学习新信息。例如,参见 German I. Parisi 等人的论文Continual lifelong learning with neural networks: A review (2019),它总结了与神经网络的灾难性遗忘相关的问题和现有解决方案。

是的,忘记旧训练示例的问题是神经网络的一个特征。不过,我不会称其为“缺陷”,因为它可以帮助它们更具适应性并允许有趣的应用程序,例如迁移学习(如果网络对旧训练记忆得很好,那么对其进行微调以适应新数据将毫无意义)。

在实践中,您想要做的是混合危险非危险的训练示例,这样它就不会在开始时看到一个类别,在最后看到一个类别。

一个标准的培训程序是这样工作的:

for e in epochs:
    shuffle dataset
    for x_batch, y_batch in dataset:
        train neural_network on x_batxh, y_batch

请注意,每个 epoch 的 shuffle 保证网络不会在每个 epoch 以相同的顺序看到相同的训练示例,并且类将被混合

现在回答你的问题,是的,降低学习率会使网络不太容易忘记之前的训练,但是这在非在线环境中如何工作?为了使网络收敛,它需要多次训练(即多次查看数据集中的每个样本)。

您所描述的听起来可能是故意进行微调的情况。

有一个基本假设使小批量梯度下降适用于学习问题:假设任何批次或连续批次的时间窗口形成了真实全局的良好近似误差函数相对于模型的任何参数化的梯度。如果误差表面本身在大幅度移动,那将阻碍梯度下降的目的——因为梯度下降是一种局部细化算法,所以当你突然改变底层分布时,所有的赌注都失败了。在您引用的示例中,灾难性遗忘似乎是之前看到的“被遗忘”数据点的后遗症,并且要么是分布发生变化的症状,要么是某些重要现象的数据中代表性不足,因此相对于其重要性而言,它很少见。

强化学习的经验回放是一个相关概念,可以很好地转移到这个领域。这是一篇关于灾难性遗忘的论文,探讨了这个概念。只要采样足够好地代表了真实的梯度(看看训练样本的平衡)并且模型有足够的参数,灾难性的遗忘问题就不太可能发生。在具有替换的随机打乱数据集中,最有可能发生在特定类的数据点非常罕见以至于它们不太可能在训练期间长时间包含在内的情况下,有效地微调模型以解决不同的问题,直到匹配样本再次被看到。

也许在理论上,但在实践中并非如此。问题是您似乎只考虑按时间顺序/顺序培训。

并且有两种方法可以查看这个问题:

  1. 在线学习 -> 那么它是该方法的一个特点
  2. 离线学习 -> 由于几个顺序随机化,它不会发生


1. 在线培训或在线机器学习

使用woppal wabbit 库这个库的一个特性(不是你考虑的问题)按时间顺序适应它所输入的输入。

我坚持:这是一个按时间顺序调整的功能。希望当你开始只告诉他狮子很危险时,它会随之适应。


2. 线下培训

根据我的个人经验,我只使用输入数据的随机子集作为训练集。而这种随机化是至关重要的。

随机化发生即:

  • 在神经网络的训练过程中,每个epochs一般都会随机化数据集的顺序
  • 在交叉验证期间,随机化被用作评估稳健模型的一种方式,该模型具有良好的泛化能力且不会过拟合