如何防止 NN 遗忘旧数据

How to prevent NN from forgetting old data

我已经为 OCR 实现了 NN。我的程序有相当高的成功识别率,但最近(两个月前)它的性能下降了约 23%。分析数据后,我注意到图像中出现了一些新的不规则现象(额外的扭曲、噪声)。换句话说,我的 nn 需要学习一些新数据,但也需要确保它不会忘记旧数据。为了实现它,我在新旧数据的混合上训练了 NN,我尝试的非常棘手的功能是防止权重变化太大(最初我限制变化不超过 3%,但后来接受了 15%)。为了帮助 NN 不使用 "forget" 旧数据,还可以做些什么?

这是一个很好的问题,目前正在积极研究中。

在我看来,您的原始实现似乎从其原始数据集中过度学习,使其无法有效地泛化新数据。有许多技术可以防止这种情况发生:

  1. 确保您的网络规模最小,但仍能解决问题。
  2. 使用某种形式的正则化技术。我最喜欢的方法之一(也是目前研究人员最喜欢的方法)是 dropout 技术。基本上每次向前馈送时,每个神经元都有一定百分比的机会返回 0 而不是其典型的激活。其他常见技术包括 L1、L2 和权重衰减。
  3. 发挥你的学习常数。可能你的常数太高了。
  4. 终于按照你描述的方式继续训练了。创建一个包含所有数据点(新旧)的缓冲区,并以随机顺序对随机选择的点进行训练。这将有助于确保您的网络不会陷入局部最小值。

我个人会尝试这些技术,然后再尝试限制神经元在每次迭代中的学习方式。如果您使用 Sigmoid 或 Tanh 激活,则 0.5 (Sigmoid) 或 0 (Tanh) 附近的值将具有较大的导数并且会迅速变化,这是这些激活的优势之一。要达到类似但不那么突兀的效果:玩弄你的学习常量。我不确定你的网络的大小,或者你拥有的样本数量,但尝试使用 ~.01

的学习常数