灾难性遗忘/增量学习的研究现状
灾难性遗忘/增量学习的研究现状
- 一. 灾难性遗忘(catastrophic forgetting)为什么会发生?
- 二. 增量学习的概念
- 2.1. 研究领域
- 2.1. 增量学习的上下限
- 三. 增量学习的方法
- 3.1. 基于正则化的增量学习(基于Loss) --《Learning without Forgetting》 (ECCV 2016) LwF
- 3.2. 基于正则化的增量学习(基于参数约束) --《Overcoming catastrophic forgetting in neural networks》 (PNAS 2017) EWC
- 3.3. 基于回放的增量学习 --《iCaRL: Incremental Classifier and Representation Learning 》 (CVPR 2017)
- 3.4. 基于参数隔离的增量学习 --《PackNet: Adding Multiple Tasks to a Single Network by Iterative Pruning》
- 3.5. 基于生成数据的增量学习 --《PackNet: Adding Multiple Tasks to a Single Network by Iterative Pruning》
- 三. 方法的对比
主要参考文献:《A continual learning survey: Defying forgetting in classification tasks》
知乎:增量学习(Incremental Learning)小综述
一. 灾难性遗忘(catastrophic forgetting)为什么会发生?
灾难性遗忘,是指在新的数据集上训练模型,会遗忘掉旧数据上学习到的知识,在旧数据上测试会发生很大的掉点
- 场景:
- 相同任务,数据集不同,新数据和旧数据相似度高:finetuning效果可以
- 相同任务,数据集不同,新数据和旧数据相似度低:出现灾难性遗忘
- 不同任务或者有新增任务:出现灾难性遗忘
- 分析:
- 同一个网络,学习完一个任务后的权重,在学习新的任务的时候可能完全变化掉,由于不同任务的最优化的目标往往不同,即使目标函数相同数据集也不同,旧的权重被毁坏是完全有可能的
- 但理论上,两者是可以实现重用的,需要分清楚两个任务目标能否找到一个基础网络层,这种解决方案就是常见的多任务学习。
- 但多任务学习的一个问题是随着任务的增多,新的任务目标越来越难训练,因为多个loss累加在一起,后加入的loss被优化的压力慢慢会变小,优化的压力会分摊到所有的loss上,而且这样也会带来训练上的成本,如果能在训练完一个任务后,再训练一个新任务,而老任务学到的东西不会遗忘就好了,这就产生了增量式学习的概念,也叫持续学习。
增量学习和持续学习(Continual Learning)、终身学习(Lifelong Learning)的概念大致是等价的
二. 增量学习的概念
2.1. 研究领域
- 多任务学习(
Multi Task Learning
):k个训练数据集:D1D_1D1 到 DkD_kDk(k个任务),k个对应的测试数据集,旨在能够学到k个任务的知识 - 迁移学习(
Transfer Learning
):在DsD_sDs数据集上训练模型,旨在利用学到的知识(参数),在DTD_TDT数据集上继续训练,能够准确地识别DTD_TDT数据集 - 元学习(
meta Learning
):将数据集分D1D_1D1~DkD_kDkk份数据集,旨在学习到任务之间的共性,能够识别DtD_tDt数据集的物体(一般在运用于小样本学习(few shot learning
)中) - 跨域学习(
Domanin Adaptation
):同时在DsD_sDs和DTD_TDT数据集,相当于扩产了外部数据集DsD_sDs,帮助学习DTD_TDT,旨在能够更好的识别DTD_TDT - 在线学习(
Online learning
):每次只能学习当前数据集D1D_1D1的一部分,每个样本只能学一次,旨在越学,越能更好地识别D1D_1D1数据集 - 持续学习(
Continual Learning
):每次学习一堆数据集,从D1D_1D1到DtD_tDt,旨在还能识别上一次数据集
2.1. 增量学习的上下限
- (a)
Original Model
:旧数据上训练的原模型 - (b)
Fine-tuning
:不用旧数据,在新数据上继续训练,增量学习的上限 - (c)
Feature Extraction
:特征提取,只更新新任务的参数 - (d)
Joint Training
:联合训练,将旧数据全部加入新数据集中,一起训练模型,增量学习的上限 - (e)
Learning without Forgetting
:增量学习,在新的数据集上,用部分旧数据或者不用,用策略,继续训练模型,尽量保持在旧的数据集上识别能力
增量学习和在线学习的区别:在线学习通常要求每个样本只能使用一次,且数据全都来自于同一个任务,而增量学习是多任务的,但它允许在进入下一个任务之前多次处理当前任务的数据
三. 增量学习的方法
3.1. 基于正则化的增量学习(基于Loss) --《Learning without Forgetting》 (ECCV 2016) LwF
- 论文链接:https://arxiv.org/pdf/1606.09282v3.pdf
- 代码链接:https://github.com/ContinualAI/avalanche
核心操作:LwF
算法先得到旧模型CNN(θs\theta_sθs,θ0\theta_0θ0)在新任务XnX_nXn上的预测值Y0Y_0Y0,在损失函数中引入新模型输出的蒸馏损失LoldL_{old}Lold,然后用微调的方法(先冻结θs\theta_sθs和θ0\theta_0θ0,训练XnX_nXn,然后再联合训练)在新任务上训练模型,从而避免新任务的训练过分调整旧模型的参数而导致新模型在旧任务上性能的下降 .
公式如下:
l
是类别label
数量- 建议
T
>1,会鼓励更好的学习到类间的相似性 - λ0\lambda_0λ0是权重,大多数实验设置为1
R
是正则化项
方法缺点:高度依赖于新旧任务之间的相关性,当任务差异太大时会出现任务混淆的现象(inter-task confusion),并且一个任务的训练时间会随着学习任务的数量线性增长,同时引入的正则项常常不能有效地约束模型在新任务上的优化过程
3.2. 基于正则化的增量学习(基于参数约束) --《Overcoming catastrophic forgetting in neural networks》 (PNAS 2017) EWC
- 论文链接:https://arxiv.org/pdf/1612.00796v2.pdf
- 代码链接:https://github.com/ContinualAI/avalanche
目的:如上图,首先我想得到一个能够识别新任务task B
,且能识别旧任务task A
的模型,相当于能够模型学到task A
与task B
的公共解,这个解应该是存在的(我们将task A
与task B
合在一起训练,得到的解便是公共解),如果我们不加限制,就和蓝箭头一样,新训练的模型在task A
上的准确率不足,如果我们对每个权重施加L2惩罚,会出现绿箭头的情况,因为所有权重都不能发生太大改变,模型无法充分学习task B
,EWC
的目标即为红箭头,此类做法和knowledge distillation
的本质基本一致,只是做法不同
核心操作:利用贝叶斯求先验概率,希望求得数据集先验情况下的每个参数的概率:
因为每个概率不好求,所以用拉普拉斯近似,在使用mini batch
的前提下,则可其看成均值为θA,i∗θ ^*_{A,i}θA,i∗,方差为该参数对应的Fisher information matrix
对角线上的倒数(记为FiF_iFi)的高斯分布:
最后转化为求如下公式,即Loss
:
具体可以参考这篇文章:CSDN:深度学习论文笔记(增量学习)——Overcoming catastrophic forgetting in neural networks
3.3. 基于回放的增量学习 --《iCaRL: Incremental Classifier and Representation Learning 》 (CVPR 2017)
- 论文链接:https://arxiv.org/pdf/1611.07725v2.pdf
- 代码链接:https://github.com/ContinualAI/avalanche
目的:在训练新任务时,一部分具有代表性的旧数据会被保留并用于模型复习曾经学到的旧知识,因此「要保留旧任务的哪部分数据,以及如何利用旧数据与新数据一起训练模型」,就是这类方法需要考虑的主要问题
- iCaRL假设越靠近类别特征均值的样本越有代表性
- iCaRL是最经典的基于回放的增量学习模型,iCaRL的思想实际上和LwF比较相似,它同样引入了蒸馏损失来更新模型参数,但又放松了完全不能使用旧数据的限制
x
是输入数据P
是代表性样本集合t
是样本种类的总数。- 求解当前
exemplar
中,每个样本种类的均值Uy
。比较输入数据与哪个样本种类的均值Uy
差值最小(最接近),即把输入数据分为该样本类型。
3.4. 基于参数隔离的增量学习 --《PackNet: Adding Multiple Tasks to a Single Network by Iterative Pruning》
- 论文链接:https://arxiv.org/pdf/1711.05769v2.pdf
- 代码链接:https://github.com/arunmallya/packnet
- 训练:整体训练,之后剪枝,为了弥补剪枝带来的损失会再针对剪枝后网络进少轮次训练,任务二训练时会利用任务一的参数,但不改变他们。
- 剪枝:针对每个任务的子网络的权重进行排行,最低的百分之五十或者其他阈值被剪掉。
- 测试:使用预先存储的对应每个任务的记录矩阵对 filter 参数执行 mask,即任务 1 使用 b 图去预测。
3.5. 基于生成数据的增量学习 --《PackNet: Adding Multiple Tasks to a Single Network by Iterative Pruning》
也有一些工作将VAE和GAN的思想引入了增量学习,比如Variational Continual Learning (ICLR 2018)指出了增量学习的贝叶斯性质,将在线变分推理和蒙特卡洛采样引入了增量学习,Continual Learning with Deep Generative Replay (NIPS 2017)通过训练GAN来生成旧数据,从而避免了基于回放的方法潜在的数据隐私问题,这本质上相当于用额外的参数间接存储旧数据,但是生成模型本身还没达到很高的水平,这类方法的效果也不尽人意。
三. 方法的对比
数据集:ImageNet有200类,每类包含500个样本,分为培训(80%)和验证(20%)以及50个用于评估的样本。为了构建一个平衡数据集,在10个连续任务的序列中,每个任务分配20个随机选择的类。
- 图说明:
- 上面的图是基于正则化的方法
LwF
、、EBLL
(data-focud)、EWC
、MAS
、IMM
(prior)和基于参数隔离的方法PackNet
SI:33.93(15.77)
:33.93
代表10次实验的AP均值,15.77
代表相对于联合训练
遗忘的AP- 下面的图是基于回放的方法
GEM
、iCaRL
,iCaRL 9k
是iCaRL 4.5k
用的旧数据多一倍 T1~T10
:连续的10个任务
- 上面的图是基于正则化的方法
- 效果对比:
PackNet
总体表现最好,只用了总模型的一部分参数MAS
和iCaRL
次之- 与两种相关方法
EWC
和SI
相比,MAS
对超参数值的选择更具鲁棒性 - 与
Tiny Imagenet
上的EWC
相比,SI
表现不佳 IMM
与其他持续学习策略相比似乎没有竞争力
- 图说明:
33.93(15.77)
:33.93
代表10次实验的AP均值,15.77
代表相对于联合训练
遗忘的AP,负数,代表策略效果比联合训练
还好
- 效果对比:
Small Model
:SI
和finetuning
遗忘的AP大于20,效果很差,EWC
(绿色下划线)得益于小模型,效果更好WIDE model
:SI
明显好于EWC
,LwF
、EBLL
和PackNet
在使用WideModel
时达到最高性能BaseModel
:SIP
在WideModel
和Base Model
上的性能最稳定。IMM
在使用Base
和WideModel
时也表现出了更高的性能。DEEP Model
(金黄色框):iCaRL
在优于所有持续学习方法,MAS
和iCaRL
次之- 与两种相关方法
EWC
和SI
相比,MAS
对超参数值的选择更具鲁棒性 - 与
Tiny Imagenet
上的EWC
相比,SI
表现不佳 IMM
与其他持续学习策略相比似乎没有竞争力
- 总结
- 基于正则化的方法,适合小模型
- 基于参数隔离的方法,适合大模型
- 基于回放的方法,适合深度模型
灾难性遗忘/增量学习的研究现状相关推荐
- 怎样缓解灾难性遗忘?持续学习最新综述三篇
本文转载自公众号"夕小瑶的卖萌屋",专业带逛互联网算法圈的神操作 ----->我是传送门 关注后,回复以下口令: 回复[789] :领取深度学习全栈手册(含NLP.CV海量综 ...
- NeurIPS 2021 | 通过寻找平坦最小值,克服小样本增量学习中的灾难性遗忘
©作者 | FlyingBug 单位 | 哈尔滨工业大学(深圳) 研究方向 | 小样本学习 写在篇首 本文分享的这篇论文是 NeurIPS 2021的一篇 Few-Shot 增量学习 (FSCIL) ...
- 灾难性遗忘_谷歌大脑新研究:单一任务强化学习遇瓶颈?「灾难性遗忘」的锅!...
鱼羊 发自 凹非寺量子位 报道 | 公众号 QbitAI 雅达利游戏,又被推上了强化学习基础问题研究的舞台. 来自谷歌大脑的最新研究提出,强化学习虽好,效率却很低下,这是为啥呢? --因为AI遭遇了「 ...
- 如何利用增量学习的方法来解决灾难性遗忘的问题?
增量学习是一种逐步学习新数据的方法,通过在新数据上更新模型而不是从头开始训练.这种方法在很大程度上可以缓解灾难性遗忘问题,因为它试图在学习新知识的同时保留已有知识.以下是一些使用增量学习解决灾难性遗忘 ...
- TNNLS 22|分数不是关键,排名才是关键:针对排行榜的模型“行为”保持与灾难性遗忘的克服...
本文认为对于类增量学习任务而言,单个点在特征空间的位置不是关键,它们之间距离值也不是关键,它们两两距离的排序才是重中之重.为此我们提出了一种新的类增量学习模型并设计了一个可导的排序算法,已被 IEEE ...
- 深度学习之灾难性遗忘问题
深度学习之灾难性遗忘问题 健忘是一种病态,善忘是一种智慧. --写在前面 文章目录 深度学习之灾难性遗忘问题 1. 背景 2. What and Why 灾难性遗忘 首先回答第一个W: 什么是灾难性遗 ...
- 弹性响应蒸馏 | 用弹性响应蒸馏克服增量目标检测中的灾难性遗忘
欢迎关注我的公众号 [极智视界],获取我的更多笔记分享 大家好,我是极智视界,本文解读一下 用弹性蒸馏克服增量目标检测中的灾难性遗忘. 传统的目标检测不适用于增量学习.然而,仅用新数据直接 ...
- 综述 | 持续学习,如何解决分类问题中灾难性遗忘
仅分享,侵删 转载 :专知 人工神经网络在解决特定刚性任务的分类问题时,通过不同训练阶段的广义学习行为获取知识.由此产生的网络类似于一个静态的知识实体,努力扩展这种知识而不针对最初的任务,从而导致灾 ...
- AI也有健忘症?英国41岁教授专访:解决灾难性遗忘
视学算法报道 编辑:Joey 好困 [导读]罗切斯特大学计算机科学家在持续学习领域的开创性研究,有望解决算法一直以来存在的灾难性遗忘问题. 如何实现持续学习,让AI不断片? 近日,来自罗切斯特 ...
最新文章
- 你有没有想过: 为什么Java中String是不可变的?
- iOS开发UI篇—Quartz2D使用(绘制基本图形)
- format 转化时间格式不起作用
- HDU1429胜利大逃亡(续)HDU 1885 Key Task BFS+状态压缩+水
- 2020 AI 产业图谱启动,勾勒中国 AI 技术与行业生态
- TensorFlow笔记(9) ResNet
- utf-8、UTF-8、utf8 在使用中的区别
- chatbot使用_使用Python设计ChatBot:一种改进的方法
- Redis分布式缓存安装和使用
- Axure 汉化教程
- Gdiplus::Bitmap转HBITMAP与HBITMAP转Gdiplus::Bitmap
- 好看的登录html界面,很漂亮的用户登录界面HTML模板
- 手机论文查重软件哪个好?
- 关于Linux 系统程序(进程)自动升级的方法
- 51单片机教室人数进出统计检测LCD1602管显示装置红外传感器
- 用python搭建邮箱,自动收发邮箱
- 怎么看计算机的网络ping值,Win7怎么查看ping值 win7测试ping值的方法
- 记我的启蒙老师谢朝晖老师
- [转载]通过 call gate 访问目标 code segment
- 中国电信5G技术缩略语