一、什么是迁移学习?
(1)它的出现是为了解决什么问题?
迁移学习是为了解决深度学习中由于数据不足导致的学习效果受限以及跨领域知识的有效利用等问题而发展起来的一种重要技术手段。
① 缺少训练数据
在许多实际应用中,获取大量标注数据的成本高、难度大。迁移学习允许模型利用在大规模相关任务上训练得到的知识,来应对那些只有有限或无标注数据的新任务。
② 计算资源受限
预训练模型可以作为初始化权重,在此基础上进行微调,相比随机初始化参数,通常能更快地收敛至较好的结果。通过迁移学习,可以从已经学习到的特征表示和模式中受益,避免从头开始训练时可能陷入局部最优解的问题,从而提高新任务的学习效率和最终表现。
(2)迁移学习的定义
- 例一:经验丰富的画家
比如,你是一名经验丰富的画家,已经掌握了如何细致地画出苹果的技巧------对苹果的形状、颜色、光影变化等细节了如指掌。有一天,你需要开始画梨子。虽然梨和苹果在形状和纹理上有一定差异,但它们都是水果,有类似的质地、光照下的表现以及基本的三维结构。
迁移学习就像这个绘画过程:你在"画苹果"的任务上学到的知识(比如对色彩层次的理解、阴影处理方法)可以被"迁移"到"画梨子"的新任务上,这样你就无需从零开始学习所有的绘画原理,而是可以在已有的知识基础上快速适应并提高新任务的表现。
- 例二:图像识别
比如我想要训练一个手写数字识别模型,我手头只有5000张手写0到9的训练数据。但与此同时我可以从网上获得100万张猫、狗、人、车的训练集和训练好的模型参数来进行迁移学习。
通过这样的迁移学习过程,即使只有有限的手写数字数据,也可以借助预训练模型强大的特征提取能力,快速构建出一个相对准确的手写数字识别模型。
- 定义: 迁移学习是一种机器学习方法,它能把在一个问题上训练获得的信息和经验利用到解决另一个类似问题上,特别是当这两个问题有共同点时。
(3)预训练模型
从迁移学习的定义中我们可以得到预训练模型的定义,它是指你想要迁移过来的带有已经训练好的参数的模型。
- 在CV领域,预训练模型可能是经过ImageNet等大型图像数据集训练过的卷积神经网络(CNN)。这些模型学会了识别图片中的各种物体和它们的特征,如边缘、形状、颜色组合等。
- 在NLP领域,预训练模型通过大量文本语料库(如维基百科、网页等)进行了自我监督学习,学习到了丰富的语言结构和上下文信息。
(4)模型微调
迁移学习中的模型微调(Fine-Tuning)是指在预训练模型的基础上,针对特定任务或目标数据集进行进一步的训练过程。预训练模型是在大规模、标注好的源数据集上预先训练好的模型,其参数已经学习到了丰富的特征表示能力。
二、两种迁移学习的微调策略
(1)冻结预训练模型部分层并仅更新输出层
这种情况下,我们通常会利用一个在大规模数据集上预训练好的深度学习模型。由于预训练模型的早期层已经学习到了非常通用且抽象的特征表示,例如图像识别中的边缘、纹理等信息,这些特征对于许多视觉任务都有用。
因此,在新任务中,我们会将模型的大部分或所有前期层参数"冻结",即保持不变不再进行训练,只对输出层或者最后几层进行重新训练或微调。
这样做的好处:是让模型利用已有的高质量特征提取能力,针对新任务的特定分类或回归需求调整最终决策层。
(2)使用全部可用数据更新所有层参数
当手头的数据集相对较大,尽管可能不如预训练模型使用的原始数据集那么大,但仍具有一定的规模时,可以考虑采用此策略。此时,我们可以基于预训练模型初始化整个网络的权重,然后在整个模型的所有层上进行训练或微调。
这样做的好处:是可以使模型更充分地适应新数据集的特点,同时保留预训练模型的部分知识。当然,在实际操作中,可能会选择逐步解冻之前冻结的层,以平衡学习新任务特性和保留预训练知识之间的关系。