最近因为项目原因,研究使用增量学习。增量学习(incremental learning)是指一个学习系统能不断地从新样本中学习新的知识,并能保存大部分以前已经学习到的知识,增量学习非常类似于人类自身的学习模式。因为人在成长过程中,每天学习和接收新的事物,学习是逐步进行的,而且,对已经学习到的知识,人类一般是不会遗忘的。有时增量学习与持续学习(continual learning)、终生学习(lifelong learning)的概念易混用,尽管有不少博客或者文章试图厘清其中的区别,但总体而言这些概念交叉很严重。在最早的一篇研究增量学习的文章[1]中,作者给出了这样的定义:
- 可以学习新的信息中的有用信息
- 不需要访问已经用于训练分类器的原始数据
- 对已经学习的知识具有记忆功能
- 在面对新数据中包含的新类别时,可以有效地进行处理
需要指出的是,在工业中,严格地界定是否属于增量学习,并无太大必要,比如有些论文中提出可以少量使用已训练的数据,这在一定场景下是可以满足要求且效果更好,但这类方法并不满足增量学习定义的第2条(尽管这些论文依然自称属于增量学习)。
增量学习大体分成两类,一类是传统方法,如在SVM、AdaBoost、SOM等经典分类方法基础上的增量方法。伴随着深度学习的兴起,这类方法因性能的原因研究也越来越少。另一类方法,也是目前更多有潜力的研究方法还是围绕着深度网络来做。
研究者提出了很多的方法来改进深度网络,以使其可以具备增量式学习的能力。这其中比较重要的一个分支,是建立在蒸馏损失基础上的。本系列博客通过对6篇论文[2-7]的介绍,系统整理一下基于深度网络和知识蒸馏结合方式的增量学习。
OK,开始第一篇:
第一篇论文[2]是Hilton大佬搞出来的,不得不说,大佬就是大佬,工作随便一挖就是个神坑。[2]论文的初衷是解决模型压缩问题,意图用一个已训练的体量大的深度网络(teacher net)教会一个小网络(student net)同样的任务。这样小网络不仅训练简洁,而且性能可以达到复杂网络的程度,达到了模型压缩的目的。这其中的关键就是一个称为Knowledge Distillation(知识蒸馏,或暗知识提取)的新损失函数。这里吐槽一下,知识蒸馏的直译确实很糟糕,感觉知识萃取或者隐知识更好点。
![](https://i-blog.csdnimg.cn/blog_migrate/f6319c78c8884abd45a9ccd079f25405.png)
我们这里直接给出训练student net的具体步骤:
(1) 正常训练一个teacher net,这个训练过程中的时间、硬件消耗比较大;
(2) 利用训练好的teacher net,计算训练集的soft target,即模型输出output再经过一次“soft”过程;
(3) 训练student net,训练过程与常规训练有两点不同:1)损失函数的设计。除了常规的交叉熵损失函数(预测值与实际值),增加了一个distillation loss(预测值与soft target),二者需要设置一个超参数平衡;2)计算distillation loss时,预测值同样需要经过软化处理;
(4) 预测,将训练好的student net按照常规方式使用。
下面说说步骤(2)中的soft target是个啥?
Soft target是对softmax输出的二次处理(也就是Hilton取名的蒸馏处理),数学表达式如下:
一般情况下,输出q是由y经过softmax处理后的结果,但soft target则将输出y除了一个常系数T,达成了软化的效果。如何理解呢?在原slides(https://www.ttic.edu/dl/dark14.pdf)中,作者给了这样一张图:
![](https://i-blog.csdnimg.cn/blog_migrate/7459313db2d1eda002aca532d8f22805.png)
第一行,代表类别输出,是常规分类结果,one-hot编码,它的结果建立在第二行softmax基础之上,第三行代表软化的结果。
可以看出,soft target主要实现了对softmax输出概率分布的平滑效果,常规softmax输出,数值差异极大,比如dog概率达到了0.9,而cow和car仅仅为10^(-6)和10^(-9),相差6-9个数量级,这对于分类来说是好事,但是对于充分利用不同类别之间的信息却不见得是好事。经过输出除以T(T一般设为2、10、20等几个数)的处理,可以把不同类别之间的概率拉近到相当的数量级,不影响分类,但可以充分利用不同类别目标之间的信息。之所以让student net学习部分的soft target,就是为了能够学习到除了类别之间的细微差距,而这种差距,是one-hot编码不具备的。
应当说,在原文中,知识蒸馏的应用对于小模型的训练有一些帮助,但是也有人(知乎作者YJango:https://www.zhihu.com/question/50519680/answer/136406661)指出这种帮助效果在dropout、L2 regularization、pre-train的手段使用之后,似乎提升不大,他给出的证据如下:
1,Recurrent Neural Network Training with Dark Knowledge Transfer中还测试了用pretrain soft target的方式来加入prior knowledge,效果还比distillation的方式好一点点(毕竟distillation会过分限制网络权重的更新走向)
2,当没有pretrain的时候用distillation,效果会提升。但是当已经应用了pretrain后还用distillation,效果基本不变(有稍微稍微的变差)
3,如果用了dropout和L2也来训练small model,同样feature vector的soft target来训练的distillation不会给小模型什么提升(往往不如不用。有额外feature vector的soft target的会提升)。
如果不用dropout和L2,而单用distillation,那么就会达到dropout和L2类似的泛化能力,些许不如dropout。
也就是说dropout和L2还有pretrain还有distillation其实对网络都有相同功效。是有提升上限的。
当然,Knowledge Distillation在第一篇论文主要还是提出一个将输出结果精细化的思路,即便在模型压缩的初始工作中没有得到太多的后续应用,在增量学习这个领域却受到了格外重视,后续我们逐一解读论文[3-7]。
[1] Polikar R, Upda L, Upda S S, et al. Learn++: An incremental learning algorithm for supervised neural networks[J]. IEEE transactions on systems, man, and cybernetics, part C (applications and reviews), 2001, 31(4): 497-508.
[2] G. Hinton, O. Vinyals, and J. Dean, “Distilling the knowledge in a neural network,” in NIPS Workshop, 2014.
[3] Li Z , Hoiem D . Learning without Forgetting[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017:1-1. Castro F M, Marín-Jiménez M J, Guil N, et al. End-to-End Incremental Learning[J]. 2018.
[4] Rebuffi S A , Kolesnikov A , Sperl G , et al. iCaRL: Incremental Classifier and Representation Learning[J]. 2016. CVPR.2017.587
[5] Castro F M, Marín-Jiménez M J, Guil N, et al. End-to-End Incremental Learning[J]. 2018. ECCV2018
[6] Wu Y , Chen Y , Wang L , et al. Large Scale Incremental Learning[J]. 2019.
[6] Dhar P, Singh R V, Peng K C, et al. Learning without Memorizing[J]. 2019.