目录
摘要
Knowledge Retention
Example – Image
Elastic Weight Consolidation
EWC vs L2 vs SGD
Generating Data
Knowledge Transfer
Gradient Episodic Memory
Model Expansion
Progressive Neural Networks
Net2Net
Curriculum Learning
结论与展望
终身学习技术,让一个模型学习多个任务。要做到 Life Long Learning ,要解决三个问题:Knowledge Retention 、 Knowledge Transfer 以及 Model Expansion 。我们发现机器存在 Catastrophic forgetting 。
在实际情况中,假设我们有 1000 个任务,我们很难把前 999 个任务的数据都保留,每次都同时在 1000 个任务上学习。因此,我们期待有一种方法,可以把之前学过的任务“记下来”,从而只学习新的任务,也不会忘记以前学过的任务。由此,提到方法 Elastic Weight Consolidation (EWC) 。我们使用GEM是一个更新GD,保证更新的梯度是对前面任务没有负面影响的,对于处理复杂问题,我们需要使得网络可以自动添加一些神经元,这就是Model Expansion需要解决的问题。最后,对于Life Long Learning来说,学习任务的先后顺序也很重要。
Life Long Learning可以简写为LLL,其实就是机器学习了task 1,之后又学习了task 2,这时候机器同时掌握了task 1和task 2,如果机器继续学习别的task的话,就同时拥有了更多的技能,假设机器学习了很多的技能,机器就十分无敌!这是我们理想中的机器学习形态,但是众所周知,我们现在还没有达到这种情况。
想要实现终生学习,首先要实现以下三个问题。
第一个就是知识的保留,就是机器要把自己原来学过的知识进行保留,不可以学习了一个新的,就忘记旧的。但是机器又不能对这个妥协,其实就是机器不可以因为不可以忘记旧的知识,就拒绝一切新的知识。
很多人都会说机器就是会忘记掉,是无法解决的问题,但是当我们把任务一和任务二的训练数据放到一起,全部导入神经网络模型一起训练的话,我们发现任务一的准确率变为百分之八十九,而任务二的准确率是百分之九十八,意味着机器是有能力同时把两个任务都做好的,但是为什么分开训练就完蛋了呢!
这种情况我们称之为“catastrophic forgetting”(灾难性的忘记)就像这个人一样,学的东西统统都忘记。
基本思想:在我们训练的参数中,有的参数是不重要的(这个参数无论怎么改变,之前学学过的任务都不会忘记),但是有的参数是十分重要的(就是说如果这个参数改变了,那么之前学过的任务就忘记了),我们原来的loss function仅仅是对参数θ进行更新,但是没有考虑这个参数是否是重要的。我们新的loss function就考虑了这一点,在之前的条件下,我们加入了新的一项。
EWC的想法是:引入了一个参数叫做bi来衡量参数θi的重要性,而bi可以是L(θ)关于每个参数的二次微分!
右边上图:如果二次微分比较平坦的话,就意味着在θ1方向(x轴)的重要性是很低的,意味着在x轴方向可以进行大得移动
右边下图:如果二次微分比较忐忑,就意味着在θ2(y轴)方向的重要性是比较高的,所以就不能在y轴方向进行太大得移动
这是最初EWC论文的结果图,图中折线显示的是EWC,L2正则化,和随机梯度下降三种方法的区别。横向表示的是先训练taskA,之后再训练taskB,最后是训练taskC。纵向是使用不同的任务进行测试。
上图可以看到的是在训练A的时候,A的准确率是蛮高的,但是训练B的时候,使用SGD的情况下,A的准确率开始下降,到C的时候更是下降;但是使用EWC的情况下,是不会有什么改变的;在使用L2的时候,会有一些下降,但是下降的不大。
我们看TaskB的情况下,我们再训练TaskC的时候,使用SGD时,B的准确率还是会降低;使用EWC的时候,B的准确率几乎不变,但是使用L2正则化的方法的话,我们发现他为了记忆住TaskB的方法,选择不去学习TaskC了。
下面我们介绍另一种方法,我们可以不存储之前task的数据,而是通过generater(生成器)去生成之前task的数据集。
举个例子就是,task1中不仅更新了参数,同时也训练一个生成器用来生成task1的数据集,之后把生成器生成的数据集放入到task2中,进行训练,以此类推。我们不再存储之前任务的数据集,我们通过数据训练一个生成器,生成这种数据集,但是这种方法存在弊端,就是现在生成器是很难生成十分高清的影像的,所以这种方法能否被广泛应用依然是问题。
第二个需要解决的问题是,在训练不同任务的时候,如何将知识进行transfer。首先:我们想让机器在学完task1之后,学习task2会更加的快,同样在学完task1,task2之后,学习task3会更快。就像我们学习完线性代数,会对学习机器学习有帮助,做到触类旁通。其次:我们知道机器的存储是有一定极限的,我们如果存储一千个模型的话,就会对机器的存储造成影响。
那用Transfer learning是不是可以解决这个问题?
迁移学习会和终身学习有区别的地方在于:迁移学习只是想做到学习task1会对task2有帮助,但是学完task2是否会忘记task1却没有任何要求(这里我们不考虑Transfer中的Multitask Learning(多任务学习),因为它是直接一起学习的)。但是终身学习要求学完task2以后,不要忘记task1。
GEM是一个更新GD的策略,假设我们有三个任务,task1,task2,task3。之前1,2都已经学习完毕,下面我们想学习task3。我们计算出更新task3参数方向是红色虚线的方向,我们对这个g和之前第一个任务的g1,第二个任务的g2做内积,发现这个内积都是正数,所以如果是按照虚线方向更新的话,对之前两个任务是没有任何影响的,我们就按照虚线方向更新参数。
但是如果像右图一般,g和g1的内积是负数的话,这个g就会对之前task1造成影响,我们就不可以这么做了。我们转换g到实线的方向。
但是这个方法有一定的弊端,就是我们每每训练下一个任务的时候,都要保存一些旧的数据,因为 g1和g2是每一次都要重新计算的。
这个便是GEM的结果,图中single的意思就是一个模型从第一个任务开始逐个训练到最后一个任务,independent的意思是每一个任务对应一个模型进行训练,multimodal是指所有的task的数据全部都放入到一个multimodal中。我们可以看出来,GEM是一个很棒的方法,因为GEM的BWT是正的,证明他不但没有忘记之前学过的知识,反而一定情况下做到了触类旁通。
我们第三个要解决得问题是,模型的扩张。在我们之前的学习中,我们都假定当前的模型是足够大的,以至于可以学好所有的task,但是在实际问题中,有时候模型并不能学好所有的知识,所以我们就需要将模型进行扩张。但是我们想要的扩张时希望可以有效率的进行扩张。其实我们不希望每进来一个新的task,模型就进行扩张,这样的结果只能时模型太大,导致存储不足。我们希望模型扩张的速度比任务添加的速度要慢。
就是第一个task的模型我们把参数学习好以后fix住,之后再训练第二个task,我们建设一个新的模型,同时将task1的输出当作是task2的输入,同理,第三个task3时,将前两个模型的参数fix住,并且将前两个模型的输出当作时第三个模型的输入。
但是这有一个弊端,就是这样的方法是不会训练太多的任务的,因为如果训练太多的任务时候,就会对这个模型造成很大的负荷。
这个方法就是当我们新来的任务进来一个,原来模型的loss降不下去,或者是准确率是无法提升的,我们就需要在原有情况下在层中添加神经元。但是不能改变原来参数,所以就采用分裂原有神经元的方法,h[2]和h[3]就是分裂后的产物,都是输入是c和d,输出是f/2。
但是这样的话,这两个分裂的神经元梯度下降更新的参数都是一样的,没什么用。所以我们在这两个神经元中添加一定的噪声。就让分裂的神经元变成两个独立的神经元了。
这个方法不是每添加一个task就加神经元,而是每当模型的loss不会降低,模型的准确率不会提高时候才添加神经元。
Curriculum Learning 类似于一个课程系的学习, 研究的是如何安排课程学习的先后顺序。
我们之前是将带杂讯的作为task1,之后再将没有杂讯的作为task2,我们发现学习完task2以后,机器完全忘记了task1的知识!但是,我们如果将没有杂讯的作为task1,将有杂讯的作为task2以后,我们发现机器不但学会了带杂讯的,反而在不带杂讯的情况下学习的很好。
类似于人在学习的时候,都是用同一个大脑在学习的,使用同一个模型来进行学习,就是Life Long Learning。为了做到终身学习,至少需要解决三个问题:
Knowledge Retention 知识保留:让机器把它学过的机器记下来,不能忘记旧的,也要能学新的,这与transfer learning不太一样,终身学习要求学完task2以后,不要忘记task1,而transfer learning一般只需要把task2训练好就行。为了做到Knowledge Retention,我们在更新参数时,我们使用的是EWC方法,有的参数是不重要的,这个参数无论怎么改变,之前学学过的任务都不会忘记),但是有的参数是十分重要的,就是说如果这个参数改变了,那么之前学过的任务就忘记了,所以在更新参数时重要的参数,尽量更新幅度小一点。
Knowledge Transfer 知识迁移:我们希望我们的模型可以使用已经学习到的东西来帮助解决新的问题,达到触类旁通的效果。具体来说我们使用的是GEM最终更新梯度的方法,让下一步任务更新的梯度不至于伤害到之前任务的梯度。
Model Expansion 模型拓展:如果模型比较简单,也许处理简单问题时还可以,但是在处理复杂问题时结果不太满意(损失下不去,或准确率不高)。我们希望模型可以自己根据问题的复杂度进行扩展,变为更加复杂的模型,提出了Net2Net网络结构。
此外,学习任务的先后顺序对最终模型在每个任务上的好坏,也有很大的关系,这是Curriculum Learning研究的内容。