我已经为 OCR 实现了 NN。我的程序有相当高的成功识别率,但最近(两个月前)它的性能下降了约 23%。分析数据后,我注意到图像中出现了一些新的不规则性(额外的扭曲、噪声)。换句话说,我的 nn 需要学习一些新数据,但也需要确保它不会忘记旧数据。为了实现它,我在新旧数据的混合上训练了 NN,我尝试的非常棘手的功能是防止权重变化太大(最初我将变化限制在不超过 3%,但后来接受了 15%)。为了帮助 NN 不“忘记”旧数据,还能做些什么?
问问题
463 次
1 回答
1
这是一个很好的问题,目前正在积极研究。
在我看来,您的原始实现似乎从其原始数据集中过度学习,使其无法有效地概括新数据。有许多技术可以防止这种情况发生:
- 确保您的网络是仍然可以解决问题的最小规模。
- 使用某种形式的正则化技术。我最喜欢的(也是研究人员目前最喜欢的)之一是 dropout 技术。基本上每次前馈时,每个神经元都有一定的几率返回 0 而不是典型的激活。其他常用技术包括 L1、L2 和权重衰减。
- 玩你的学习常数。也许你的常数太高了。
- 最后按照你描述的方式继续训练。创建所有数据点(新旧)的缓冲区,并以随机顺序在随机选择的点上进行训练。这将有助于确保您的网络不会落入本地最小值。
就我个人而言,我会先尝试这些技术,然后再尝试限制神经元在每次迭代中的学习方式。如果您使用 Sigmoid 或 Tanh 激活,那么 0.5(sigmoid)或 0(tanh)附近的值将具有较大的导数并且会迅速变化,这是这些激活的优势之一。要达到类似但不那么突兀的效果:玩弄你的学习常数。我不确定您的网络大小或您拥有的样本数量,但请尝试使用 ~.01 的学习常数
于 2015-12-02T17:54:33.410 回答