赞
踩
人从小大大用同一个脑袋学习
但每个作业都训练同一个神经网络
为什么不用同一个网络学习不同的任务呢?
终身学习的不同称呼
LLL(life long learning)
continuous learning
never ending learning
incremental learning
可以做不同的任务
1、学过的旧东西记下来,但要能学新的
例子:手写数字辨识
在一个三层的网络中学习第一个有噪音的任务,在任务1学到的东西可以用在任务2上。任务1的正确率甚至没有任务2高,这个可以视为迁移学习。
让机器学任务2后,任务2的准确率更高,但是任务1的准确率下降
是否是因为网络过于简单?不是的,因为同时学任务1和任务2,能够学的比较好
例子:问答系统。
机器学习的训练资料是:文章、问题、答案
bAbi训练集有20种不同的题型
机器从第一个任务开始学习,学到第20个。
看机器对题型5的回答,只有刚学完题型5时正确率比较高。
对于其他题型也是这样的。
如果同时学20个任务的话,正确率还行。
证明网络有能力学完这些东西,但是没有做到。
这种现象叫做灾难遗忘。
1、多任务学习
很难实现,要保存所有的旧资料才行,学习可能很久(存储、计算问题)
有一些weight重要,但是有一些不重要;保护重要weight,只调不重要的额。
做法:对于每一个theta,有一个守卫参数b
修改loss,计算当前参数与之前的参数之间的距离。
b用来表示保护theta的程度
可以将theta视为一种regularization
假设有两个任务,网络有两个参数theta,颜色越深,说明loss越小
学习任务1时,参数从theta0学到thetab,再学习任务2时,继续训练,学习到theta* ,此时任务2的loss变小,但是任务2的变大
在EWC中,可以使用某种方法算重要性,比如算微分,theta1比较小,也就是说在theta1上,改变参数,对结果影响不大,b1可以设为比较小的值,但是theta2微分比较大,b2设置的比较大
移动时,尽量不要动theta2
当然求导不是唯一的方法,可以用其他的方法。
原始EWC的实验结果
分别训练A,B,C,横轴表示在不同任务上的表现,纵轴表示训练阶段
生成数据,来缓解数据过多占用内存的问题
先让机器学task1,然后学task2,同时要训练generator,学会生成task1的数据,此时就可以把task1的data丢掉,用生成的数据和task2的放在一起训练。
但是目前靠机器生成复杂数据,能不能做的起来尚待研究
如果训练任务需要不同的网络呢?比如类增量问题
不为每个任务训练模型,让不同模型之间互通有无,也可以节省模型开销空间
不同点:在transfer时,只在乎任务2,不在乎任务1点表现,但是life-long希望都表现好
通常用matrix,每个row代表学习的阶段,column表示在任务X上的表现。
Accuracy是最后一行的平均
多不会遗忘:backward Transfer,学到某个阶段时减去刚学过时的表现,求平均
(通常为负)
forward Transfer:表示能transfer到没学的任务的表现
gradient Episodic Memory
在新的任务算出gradient,再计算之前的Gradient的方向。算出现在移动的方向。这个方向不会伤害到原有的任务,而且和当前gradient的方向越近越好。
这种需要存一些过去的数据。
它的表现:后续的学习不会影响之前的任务,甚至能有所改善
有可能真的学不下了,能不能扩张模型
模型扩张的速度应该比任务来的速度慢。这个是个尚待研究的问题,没有太多研究。
一个网络做任务1,网络1的输出当作网络2的输入,网络1、2的输出都当作网络3的输入
实操上做不了太多任务
每个task训练一个网络,每个新任务进来,看和哪个旧任务最像,希望做到knoledege transfer。这里模型扩张的速度和新任务到来的速度一样,在任务较多的时候也是会有比较多的模型
让网络长宽
直接加neuron的话,可能会加噪声,所以如何加神经元,但是不引入噪声很重要
做法:把神经元分裂,w仍然是c和d,但是分裂后变为f/2,但是问题是加入的神经元的gradient都一样,所以要加一个小小的noise
也不是每进来一个任务就加网络,而是看训练效果怎么样,决定是否expand
在未来可能会有的问题
这些任务的顺序怎么排序
例子中,先学任务1,再学任务2,效果不好
但是先学任务2,再学任务1时,一开始任务1效果不好,但是没有忘记
所以说明,是否发生遗忘,和任务排序有非常重要的关系。
已有的研究
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。