最近在看一些增量学习的论文,在学习的过程中不免会遇到增量学习与迁移学习的相关概念的联系和区别,下面是个人的一些总结和理解,只是概念理解层面,没有深入到算法层面,若有不当之处还请留言交流指正。
在传统分类任务中,为了保证训练得到的分类模型具有准确性和高可靠性,由两个基本假设:
1.学习的训练样本和新的测试样本满足独立同分布
2.必须有足够可用的训练样本
迁移学习
迁移学习是指用已存有的知识对不同但相关领域问题进行求解的一种机器学习方法。这里迁移学习放宽了上面的两个基本假设,我们可以迁移已有的知识来解决目标领域中仅有少量有标签样本数据甚至没有学习样本的问题。(当然了,目标领域样本量肯定是越多越好的)。当不同元素共享的因素越多,迁移学习就越容易,就好像你学会了骑自行车,可能就很容易学会骑摩托车,但是学会骑自行车再去骑三轮车,可能就会很不适应。(亲身经历,确实如此,三轮车每次拐弯的时候,可能时因为重心的位置与自行车不一样,总有一种要翻车的感觉,很容易失去平衡)
迁移学习与 domain adaptation 域适应
这里的域适应是迁移学习中最常见的问题之一,主要是域不同但任务相同,且源域数据有标签,目标域数据没有标签或者只有很少数据有标签。
即域适应主要问题是如何减少 源域与目标域不同分布之间的差异。
上图为四个办公室用品分类数据集。均包含了显示器这一类,但是采集方式不同,标签都是相同的。 如何将域A上训练好的模型用在无标签或者少标签的域B上,是domain adaptation 主要研究的问题。
迁移学习与 finetune 微调
finetune 则是迁移学习的一种常见的方法,其中微调根据实际情况不同可以分成以下几种:
1)当待训练的数据集较小,已训练的模型和当前任务相似。这时只需要重新训练已有模型最后的几层,固定前面的层来提取低层次特征。
2)当待训练的数据集较小,已训练的模型与当前任务场景差距较大,可以重新训练已有模型靠近输入的前几层,来调整网络对新的任务场景进行学习。
3)当待训练的数据集较大,已训练的模型和当前训练数据类似。可以基于已有的预训练模型,将其全部层都在新数据上进行微调(也是传统分类任务中微调最常用的方式)
4)当待训练的数据集较大,已训练的模型和当前训练数据差异度很高。这是需要网络在新数据集上从头开始训练,微调已经不起作用了。
增量学习
增量学习是指一个学习系统能不断地从新样本中学习新的知识,并能保存大部分已经学习到的知识。其非常类似于人类自身的学习模式,设想一下,当我们学会了 0-9 识别与书写,再学习 A-Z 字母表的识别与书写后我们仍然记得 0-9 数字的识别与书写,而目前传统分类任务是一个网络学习了 0-9 数字分类,再用这个网络学习 A-Z 字母分类后,就会难以对数字有一个很好的分类,如果想兼顾 0-9 和 A-Z 则需要将所有种类的样本都输入到神经网络进行训练,这无疑是很耗时耗力的。
所以增量学习主要关注的是灾难性遗忘(Catastrophic forgetting),平衡新知识与旧知识之间的关系,即如何在学习新知识的情况下不忘记旧知识。引用Robipolikar对增量学习算法的定义,即一个增量学习算法应同时具有以下特点:
1) 可以从新数据中学习新知识
2) 以前已经处理过的数据不需要重复处理
3) 每次只有一个训练观测样本被看到和学习
4) 学习新知识的同时能保持以前学习到的大部分知识
5) 一旦学习完成后训练观测样本被丢弃
6) 学习系统没有关于整个训练样本的先验知识
增量学习与迁移学习
综上所述,在概念上,增量学习与迁移学习最大的区别就是对待旧知识的处理,增量学习在学习新知识的同时需要尽可能保持旧知识,不管它们类别相关还是不相关的,而迁移学习则只是借助旧知识来学习新知识,学习完成后只关注在新知识上的性能,不再考虑在旧知识上的性能。