定义
迁移学习是指将某个领域或任务上学习到的知识或模式应用到不同但相关的领域或问题中,从而改进目标领域或任务的学习效果[1] 。
迁移学习(Transfer learning) 顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习。用成语来说就是举一反三。
迁移学习里有两个非常重要的概念
- 域(Domain)
- 任务(Task)
域可以理解为某个时刻的某个特定领域,比如书本评论和电视剧评论可以看作是两个不同的domain。其中又分为源域 (Source domain),即已有知识的域和目标域 (Target domain),即要进行学习的域。
任务就是要做的事情,比如情感分析和实体识别就是两个不同的task[2] 。
在机器学习的经典监督学习场景中,如果我们要针对一些任务和域 A 训练一个模型,我们会假设被提供了针对同一个域和任务的标签数据。现在我们可以在这个数据集上训练一个模型 A,并期望它在同一个任务和域中的未知数据上表现良好。在另一种情况下,当给定一些任务或域 B 的数据时,我们还需要可以用来训练模型 B 的有标签数据,这些数据要属于同一个任务和域,这样我们才能预期能在这个数据集上表现良好。当我们没有足够的标签数据来训练可靠的模型时,传统的监督学习范式就支持不了了。迁移学习允许我们通过借用已经存在的一些相关的任务或域的标签数据来处理这些场景。我们尝试着把在源域中解决源任务时获得的知识存储下来,并将其应用在我们感兴趣的目标域中的目标任务上去,如图 1所示[3] 。
图 1 迁移学习示意图[3]
具体来说,当我们在大型数据集(例如ImageNet)上训练网络时,我们有实现训练好的神经网络的所有参数, 然后我们可以微调预训练的CNN用于新的数据集。考虑到新数据集几乎与用于预训练的原始数据集相似,因此可以使用相同的权重从新数据集中提取特征。
如果新数据集非常小,最好只训练网络的最后一层,以避免过度拟合,同时保持所有其他层不变。如果新数据集非常大,最好使用预训练模型中的初始权重重新训练整个网络[3] 。
参考文献
[1] https://blog.csdn.net/dakenz/article/details/85954548
[2] http://blog.itpub.net/69942346/viewspace-2654034/
[3] https://ruder.io/transfer-learning/