娱乐圈太乱了,吃瓜都有点疲劳,其实我的态度是谴责的,但我不觉得非常愤怒,什么样的人都有,垃圾回到垃圾桶去就好 csdn的编辑器一言难尽... ,1、不要偷懒把序号标好2、一篇笔记不要写太长 3、总结笔记内容 我其实没有思考过为什么人工智能还没有变成天网,学了这两课之后:确实人工智能发展的很快,也还有很长的路要走,这些研究员好聪明,这些方法也太妙了~
Abstract
本课讲解了灾难性遗忘的原因,提出了解决的思路
讲解了五种方法,思路分别是:限制参数、限制梯度下降的方向、每次新增参数、提前开好网络定好参数总量、生成数据
最后给出了扩展资料:解决每个任务class不同的方法、LLL的三个场景、如何确定任务的学习顺序
目录
二、解决遗忘问题-selective synaptic plasticity方法
3、合适的bi:原理 + 方法? = 哪些参数对过去的任务是不重要的?
三、解决遗忘问题- Gradient Episodic Memory(GEM)方法
四、解决遗忘问题- additional neural resource allocation方法
九、怎样的任务学习顺序是好的(Curriculum learning)
LLL的三个可能解法:
- 重点方法(发展完整):selective synaptic plasticity(aka:regularization - based approach):只让类神经网络中的部分 神经元或者神经元的连接具有可塑性,其他连接都被固化不能被移动不能被改变数值
- additional neural resource allocation
- memory reply
一、为什么会发生灾难性遗忘?
1、说明:
a、假设只有两个参数,图代表两个任务的损失函数
b、不一样的θ会有不同的损失,颜色越白loss越大
2、过程:
a、先训练任务1,得到一个θ0,按照梯度下降的方向不断更新得到θb,loss降得够小了就相当于把任务1学完了。此时机器学完任务1,参数为θb。
b、同样的参数拷贝过来做任务2,任务2有不同的error surface,根据这个error surface梯度下降更新参数得到θ*
c、这时如果把θ*拿回任务1使用,会发现不能得到好的结果
3、头脑风暴之解决思路
就上图来说在任务2中只要在蓝色范围内就算是比较好的参数,是否可以就近移动,让参数值变化不大,而让其在任务1上的表现变好呢?
二、解决遗忘问题-selective synaptic plasticity方法
1、基本思想-参数限制
每个参数对过去学过的任务的重要性是不同的,有些参数对过去的任务很重要,在学习新任务时希望保留这些重要参数最好不要变,而只是去改那些对过去任务不重要的参数。
需要额外空间存储一个旧的模型和bi值
2、损失函数-全在解释bi
θb是模型在过去任务中学得的
每个参数
一个守卫bi
最小化Lθ会导致灾难性遗忘,所以更改误差函数为L'(要学的参数-过去学得的参数,他们的结果越小越好。如果bi很大那么我们希望差值越小越好),最小化L'
![]()
并不是平等的看待所有参数与过去参数接近这件事,只需要某些参数接近就好,哪些参数要接近?bi来决定,bi大则要接近,bi小则无所谓,
bi = 0:对新参数与过去参数之间关系没有限制——灾难性遗忘
bi 无穷大:非常接近,不会有遗忘问题,但是学不好新任务了(固执intransigence)
3、合适的bi:原理 + 方法? = 哪些参数对过去的任务是不重要的?
a、原理
任务1学完得到θb,看看θb中的每个参数对任务1的影响(在对应维度上移动,看对loss的影响,影响小代表可以被改变)如:
在
维度上移动发现对loss没有影响(依然在蓝色区域),代表
可以在新任务上被改变,对应的b1就很小。
当b1小 b2大时,意味着更新时只会沿θ1方向移动,不会沿theta2方向移动。则新参数在原来的任务上loss的变化也不大,就解决了遗忘问题
EWC:bi按重要程度设定 19:34
L2:bi = 1,固执的留在过去
SGD:bi = 0, 灾难性遗忘
b、方法
三、解决遗忘问题- Gradient Episodic Memory(GEM)方法
1、基本思想
不是在参数上限制,而是在梯度下降的方向上限制
需要额外空间:存储不太多的数据来计算更新的方向
在参数更新之前,算在任务1和2上的参数更新方向,如果方向不一致(内积不等于0)就修改方向,修改方向后可以缓解遗忘现象。但是要算之前任务的参数更新方向需要之前任务的数据,就要把数据一直存着,存的资料不多就是了(这就与LLL的目标不同,LLL就是希望可以不用把过去的资料都存着)
四、解决遗忘问题- additional neural resource allocation方法
1、基本思想
改变使用在每个任务里神经元的resource
训练任务1之后有一个模型,训练任务2的时候不要动任务1的模型,另外开一个network用任务1隐藏层输出作为输入(则任务1学到的东西任务2也可以利用)。换种说法:训练任务2的时候不要动1的参数,而是新增一些参数,只训练额外的参数
2、评价
不会有遗忘问题
但是每次训练新任务都会需要新的空间产生新的网络,模型在不断的变大,任务量小适用
五、解决遗忘问题- PackNet方法(与方法四正好相反)
1、基本思想
先开一个大的network,新任务来了只用这个network里面的一部分
第一次只能用灰色的参数,第二个任务只能用橙色,第三个任务只能用白色参数,第四个任务只能用绿色参数
2、评价
参数量不会随着任务增加而增加,不会遗忘,但只是提前把存储资源用了而已
3、改进版本CPG——方法四+方法五
基本思想:模型既可以增加新的参数,每次只保留部分参数拿来做训练,模型也可以扩张
六、解决遗忘问题- Memory reply方法
1、基本思想
训练一个生成模型,既然不能存过去的资料,就在需要用这些资料的时候,用这个模型把资料产生出来。
不止训练一个分类模型解决任务1,还同时训练一个生成模型来产生任务1的资料
如果训练任务2时,只使用任务2的资料会出现遗忘问题,就可以用生成模型生成任务1的资料给任务2的分类模型来训练
因为任务2同时看到了1和2的资料所以不会出现遗忘
接下来用任务2的资料,用能产生任务1资料的生成模型产生的任务1资料,一起训练一个能产生两个任务资料的生成模型
2、评价
产生的这个生成模型占用空间
但是这种生成数据的方法非常有效,往往可以逼近LLL的上限(也就是Multi-task的效果)