当前主流的针对神经网络模型的持续学习方法可以分为一下几类:
1. Regularization: 在网络参数更新的时候增加限制,使得网络在学习新任务的时候不影响之前的知识。这类方法中,最典型的算法就是EWC。
EWC https://github.com/GMvandeVen/continual-learning
2. Ensembling: 当模型学习新任务的时候,增加新的模型(可以是显示或者隐式的方法),使得多个任务实质还是可以对应多个模型,最后把多个模型的预测进行整合。增加子模型的方式固然好,但是没多一个新任务就多一个子模型,对学习效率和存储都是一个很大的挑战。goole发布的PathNet是一个典型的ensembling算法。
3. Rehearsal: 这个方法的idea非常的直观,我们担心模型在学习新任务的时候忘记了旧任务,那么可以直接通过不断复习回顾的方式来解决,在模型学习新任务的同时混合原来任务的数据,让模型能够学习新任务的同时兼顾旧任务。不过,这样做有一个不太好的地方就是我们需要一直保存所有旧任务的数据,并且同一个数据会出现多次重复学习的情况。其中,GeppNet是一个基于rehearsal的经典算法。
4. Dual-memory: 这个方法结合了人类记忆的机制,设计了两个网络,一个是fast-memory(短时记忆),另一个是slow-memory(长时记忆),新学习的知识存储在fast memory中,fast-memory不断的将记忆整合transfer到slow-memory中,其中GeppNet+STM是rehearsal和dual-memory相结合的一个算法。
5.Sparse-coding: 灾难性遗忘是因为模型在学习新任务(参数更新)时,把对旧任务影响重大的参数修改了。如果我们在模型训练的时候,人为的让模型参数变得稀疏(把知识存在少数的神经元上),就可以减少新知识记录对旧知识产生干扰的可能性。Sensitivity-Driven是这类方法的一个经典算法。
有关增量学习的相关论文
- CVPR2017_iCaRL- Incremental Classifier and Representation Learning
- CVPR2019_Learning a Unified Classifier Incrementally via Rebalancing
- ICCV2019_Continual Learning by Asymmetric Loss Approximation with Single-Side Overestimation