Life Long Learning
对比人类从生到死都只用一个脑子学习,而机器每做一个任务就要换一个模型。那为什么机器不像人一样,也只用一个神经网络做所有事呢?
这就是Life Long Learning(LLL)。我们希望机器学会了一个技能之后就永远记得这项技能。
对此,我们需要解决三个问题:
- 让机器永远记得学过的知识,也要能学会新的东西。
举例而言:在图像识别中,先学任务1再学任务2会发现机器把任务1基本都忘了。
但如果两个任务一起学,发现机器表现反而不错。这说明机器不是学不会,就是忘了!
文字处理也是这样。学完题型之后立即做题正确率很高,但一学其他的题型后这题就不会了。
问题是,如果机器同时学所有题型时,机器是可以同时学会的。
这叫Catastrophic Forgetting。
解决方法:EWC
由于存储有限,我们不能将所有任务放在一起学习,并且这在时间上也是无法接受的。(这要求每多一个任务就学习一次)
有一种解决方法叫做Elastic Weight Consolidation (EWC)。
基本思想是,让机器学完过去的任务后,保留“重要的参数”,只调“不那么重要的参数”。其重要程度用“守卫”
b
i
b_i
bi来表示。这样就能改写Loss Function了。
这样,如果
b
i
=
0
b_i=0
bi=0代表可以随便改动参数。
那么,具体怎么决定这个
b
i
b_i
bi值呢?
一般来说是取“二次微分值”。这样可以在陡峭的地方基本不动,在平坦的地方自由移动。
结果表明EWC的效果最好,Gradient Descent会经常“忘记”,L2会“学不进去”。
Generating Data
我们之前讲到由于存储有限,不能将所有任务一起学习。
对此,有人想出了一招:我们不去存储之前的数据,而做一个用于生成之前数据的模型。即:用一个NN存储数据。
目前这还是个设想,我个人认为这并不实际,因为数据往往是无序的,不好生成。对此最好的方法应该是压缩算法。
现在,我们再来讲讲LLL的第二个问题。
2. 让机器能做到“任务间的知识转化”,即触类旁通。
这个要求并不只是Transfer Learning:在学习了任务1后,Transfer Learning只在乎能不能完成任务2;而LLL不仅在乎任务2能不能完成,还在乎机器还能不能记得任务1。
评价方法
LLL的评价方法有很多种。分别有准确度、记忆力、预测力。
Gradient Episodic Memory (GEM)
最后我们来看LLL的第三个问题:
3. 我们希望模型发现自己实在学不下去的时候,能自动扩张自己的规模。并且模型扩展的速度,比任务增长的速度慢。
目前这个问题尚未很好的解决,下面的例子在扩张的效率上不是很好。
Progressive Neural Networks
如上,把之前任务的前一层的隐层也当作输入。
但是这里,任务量大的话,将导致输入量大,因此难以用到很多种任务上。
Expert Gate
如上,会查看新任务与哪一个任务最像,然后以那个最像的任务为基础,训练模型。但是也会造成新增一个任务,就多一个模型这个问题。
Net2Net
可以使用类似“把某个神经元进行分裂”这种方法,去增加网络的宽度。这个方法稍微好一些。
顺序问题
除了上述3个问题之外,学习的顺序也很重要。有时候只要调换任务的顺序效果就能变得很好。
针对这个问题,有人就提出了分类学(taskonomy )。