1.什么是迁移学习
迁移学习(Transfer Learning)是一种机器学习方法,就是把为任务A开发的模型作为初始点,重新使用在为任务B开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。
找到目标问题的相似性,迁移学习任务就是从相似性出发,将旧领域(domain)学习过的模型应用在新领域上
2.为什么需要迁移学习?
1.大数据与少标注的矛盾 :虽然有大量的数据,但往往都是没有标注的,无法训练机器学习模型。人工进行数据标定太耗时。
2.大数据与弱计算的矛盾 :普通人无法拥有庞大的数据量与计算资源。因此需要借助于模型的迁移。
基于模型的迁移 (Parameter based TL):利用源域和目标域的参数共享模型
基于模型的迁移方法(Parameter/Model based Transfer Learning)是指从源域和目标域中找到他们之间共享的参数信息以实现迁移的方法。这种迁移方式要求的假设条件是:源域中的数据与目标域中的数据可以共享一些模型的参数。下图形象地表示了基于模型的迁移学习方法的基本思想。
异构迁移学习(Heterogeneous Transfer Learning)源域和目标域的特征空间不足
按迁移情景分类
- 归纳式迁移学习(Inductive TL)︰源域和目标域的学习任务不同
- 直推式迁移学习(Transductive TL):源域和目标域不同,学习任务相同。
- 无监督迁移学习(Unsupervised TL):源域和目标域均没有标签
按迁移方法分类
基于样本的迁移(Instance based TL) :通过权重重用源域和目标域的样例进行迁移
基于样本的迁移学习方法(Instance based Transfer Learning)根据一定的权重生成规则,对数据样本进行重用,来进行迁移学习。下图形象地表示了基于样本迁移方法的思想源域中存在不同种类的动物,如狗、鸟、猫等,目标域只有狗这一种类别。在迁移时,为了最大限度地和目标域相似,我们可以人为地提高源域中属于狗这个类别的样本权重。
基于关系的迁移(Relation based TL) :利用源域中的逻辑网络关系进行迁移
基于关系的迁移学习方法(Relation Based Transfer Learning)与上述三种方法具有截然不同的思路。这种方法比较关注源域和目标域的样本之间的关系。下图形象地表示了不同领域之间相似的关系。
3.迁移学习与传统机器学习有什么区别?
|------|-------------|------------|
| | 迁移学习 | 传统机器学习 |
| 数据分布 | 训练和测试不需要同分布 | 训练和测试数据同分布 |
| 数据标签 | 不需要足够的数据标注 | 足够的数据标注 |
| 建模 | 可以重用之前的模型 | 每个任务分别建模 |
4.迁移学习的核心及度量准则?
- 迁移学习的总体思路可以概括为:开发算法来最大限度地利用有标注的领域的知识,来辅助目标领域的知识获取和学习。
- 迁移学习的核心是:找到源领域和目标领域之间的相似性,并加以合理利用。这种相似性非常普遍。比如,不同人的身体构造是相似的;自行车和摩托车的骑行方式是相似的;国际象棋和中国象棋是相似的;羽毛球和网球的打球方式是相似的。这种相似性也可以理解为不变量。以不变应万变,才能立于不败之地。
- 有了这种相似性后,下一步工作就是,如何度量和利用这种相似性。度量工作的目标有两点:一是很好地度量两个领域的相似性,不仅定性地告诉我们它们是否相似,更定量地给出相似程度。二是以度量为准则,通过我们所要采用的学习手段,增大两个领域之间的相似性,从而完成迁移学习
一句话总结:相似性是核心,度量准则是重要手段
5.迁移学习与其他概念的区别?
(1)迁移学习与多任务学习关系:
- 多任务学习:多个相关任务一起协同学习;
- 迁移学习:强调信息复用,从一个领域(domain)迁移到另一个领域。
(2)迁移学习与领域自适应:领域自适应:使两个特征分布不一致的domain一致。
(3)迁移学习与协方差漂移:协方差漂移:数据的条件概率分布发生变化。
6.什么情况下可以使用迁移学习?
迁移学习最有用的场合 是,如果你尝试优化任务B的性能,通常这个任务数据相对较少。例如,在放射科中你知道很难收集很多射线扫描图来搭建一个性能良好的放射科诊断系统,所以在这种情况下,你可能会找一个相关但不同的任务,如图像识别,其中你可能用1百万张图片训练过了,并从中学到很多低层次特征,所以那也许能帮助网络在任务在放射科任务上做得更好,尽管任务没有这么多数据。
假如两个领域之间的区别特别的大,不可以直接采用迁移学习 ,因为在这种情况下效果不是很好。在这种情况下,推荐以上
迁移学习三步走:
- 加载预训练模型(inceptionnet-v3)(主干网络, backbone),提取所有图片数据集的特征(特征向量2048维度)。(调用别人训练好的模型,因为他们的模型泛化能力强,不用自己创建训练模型)
- 用特征向量训练自己的后端网络模型,(后端用自己创建dense后端模型,保存dense后端6个模型)
- 调用最后一个模型来显示测试集16张图片预测结果
- 代码梳理: