这个问题首先可以从一个生活场景中引出,无论我们是学数理化还是学史地生,都是在同样的一个大脑。但是,在我们训练ML或者DL中是针对不同的任务,来训练不同的网络。那么问题就来了,有没有一种ML方法能够让所有的任务也都使用同一个模型呢?这种一直使用同一个模型来学习不同的任务就是life long learning 中文可以翻译成终生学习,在不同的文献中,也被称为 Continuous Learning,never ending learning,Incremental Learning。整个学习过程就是,先学会一个文本分类任务,再学会一个图片分类任务,之后还可以学会文本生成……最终成为学霸。
image.png
既然有了明确的目标,就是让机器可以学会所有的技能,那么需要哪几步呢?答案是3步。 knowledge rentention、knowledge transfer 、model expansion。下面就针对这三步慢慢道来。
image.png
-
knowledge retention
翻译成中文就是知识的存储。就是要把学会的东西记下来,而不是像某熊那样,学一个忘一个;同时也不能因为害怕忘记,就不再学习新的知识了。
举一个例子如下图:
image.png
针对两个图像识别的任务,在task1任务中,模型可以达到90%的识别准确率,task2和task1类似,所以task2直接使用task1训练出来的参数,可以得到96%的准确率;可是当使用task1学习到的参数作为task2的初始参数,再使用task2的数据继续让机器学习时,虽然机器在task2上识别的效果提升了,但是在task1上的表现有了明显的下降。为了排除是任务之间有冲突或者机器学习能力的原因,可以进行一组对照实验,就是让机器同时学习task1和task2,如图
明明这两个任务,都是可以学习好的,但是为什么将这两个任务分开,就会导致效果变差呢?
同样的情况,在QA系统中也有体现
image.png
在这份语料集中有20类问题,依次让机器来学习回答这20类问题。
image.png
从结果上可以看到,当机器只学习第5类问题时,它可以达到一个很好地准确率, 但是当它也学习了回答其它类型的问题后,它回答第5类问题的准确率有了明显的下降。
image.png
以上这种情况,可以称之为:Catastrophic Forgetting(灾难性的遗忘)。
针对以上的问题,可能会说,将这些任务放在一起来训练,不就可以解决了嘛,就是多任务学习啊。看起来这种方法是可以的,但是随着任务数量的增加,每增加一个任务,就要把之前所有的任务的数据加进来,再重新训练一次。这样数据量就会很大,存储麻烦、计算量大。
image.png
那针对这种情况,比较有效的方法是 Elastic Weight Consolidation (EWC)。
这种方法的主要观点是:保留之前任务中的比较重要的参数,在新的任务中,只修改那些不重要的参数。
具体可以用这个公式来表示,
image.png
其中,表示之前任务中学习到的model,每一个model都有中都有个参数,与之相对应的是一个"guard"”,当前模型中这个参数的重要性
对于一个新的task来说,loss function就不仅仅是当前任务的loss,还有对之前参数的影响有多大。
image.png
也就是说对于比较大的参数,尽可能不要修改这个参数,反之如果很小,是可以随便修改这个参数。
image.png
更具体的来说,比如两个task中只有两个参数,,在task1中在可以达到task1的最优情况,在进入到task2中之后,由于error surface发生了变化,这时在处可以达到task2的最优解,可是这个位置对应到task1中并没有达到最优解,这就导致forget情况的发生。如下图所示
image.png
进一步分析,对这两个维度求二次微分分析,当参数在的方向上变化时,误差不会有明显的变化,这样它的守卫权重就会比较小,但是的改变对误差影响很大,所以它的守卫权重是很大的。
image.png
对抗网络中很多trick是让一次微分设为0,使用policy network就可以搞定这个
采用了ewc之后最终的结果,虽然没有达到task2最好的点,但是在两个任务中得到了很好的平衡。
image.png
下图是在mnist数据库上,三个任务学习的效果,先学习taskA 再学taskB最后学 taskC 可以看到使用了ewc model在taskA上没有明显的下降,采用L2正则的方法在taskB上九没有了学习的技能了,准确率很低,就是学不会。在taskC上的情况也类似。
一些参考资料 ,第三篇文章使用了非监督的模型,不在需要打标签。
image.png
回到之前多任务学习的思路,既然保存之前的数据需要占用大量的空间,那么是不是可以训练一个生成器来生成不同task的数据,这样就不用一直保存数据了。
image.png
另外两个解决问题的思路:
image.png
解决了知识遗忘的问题,我们看一下知识迁移的问题。
知识迁移就是根据已经学习到的东西来解决未知的问题,比如学好了线性代数和高数,未来学习高数,就很有帮助。但是这个迁移学习还是有一些区别,迁移学习是学习了任务一,直接用在或者finetunning在任务2上看看效果如果,就不再考虑任务1的效果了,而life long learning 还需要考虑在任务1上的效果。
image.png
使用一个矩阵来表示一些在学习不同任务之后的表现。每一行表示在不同任务上的表现,每一列表示在学完这个任务之后,在某个任务上的表现,当 i>j时,表示任务在学习完第i个任务后,第j个任务还记得多少,i<j时,表示学习了当前的任务i,有多少是可以迁移到任务j上。
image.png
通过则三个指标来评估一下,当前模型训练的效果。第一个表示学完所有任务之后,在每个任务上的评价准确率,
网友评论