迁移学习是一种利用已经训练过的模型在新任务上进行自适应学习的机器学习方法。其基本原理是利用已有的知识和经验,将多个任务之间共享的特征和规律转移到新的任务上,从而减少对新任务的重新学习和训练。通过将已训练模型的参数作为初始点,再对新任务数据进行微调,迁移学习能够在新任务上取得较好的性能表现,特别是当新任务与原任务相关且具有共享特征时更为有效。因此,迁移学习可以加快模型的学习速度,提高模型的泛化能力,并在多种任务和领域中得到广泛应用。
考虑到训练词向量模型一般需要大量数据,而且耗时比较长,为了节省时间、提高效率,本实例采用迁移学习方法,即直接利用训练好的词向量模型作为输入数据,这样既可以提高模型精度,又可以节省大量训练时间。
迁移学习示意图如图2-41所示,简单来说,就是把任务A开发的模型作为初始点,重新使用在任务B中。比如,任务A可以是识别图像中车辆,而任务B可以是识别卡车、识别轿车、识别公交车等。合理地使用迁移学习,可以避免针对每个目标任务单独训练模型,从而极大节约计算资源。
图2-41 迁移学习示意图
迁移学习就是把预训练好的模型迁移到新的任务上,犹如站在巨人的肩膀上。神经网络中的迁移学习主要有两个应用场景:特征提取和微调。
● 特征提取:冻结除最终完全连接层之外的所有网络的权重。最后一个全连接层被替换为具有随机权重的新层,并且仅训练该层。
● 微调:使用预训练网络初始化网络,而不是随机初始化,用新数据训练部分或整个网络。
在学习如何使用预训练模型时,要考虑目标模型的数据量及目标数据与源数据的相关性。一般地,建议根据数据集与预训练模型的数据集的不同相似度,采用不同的处理方法,如图2-42所示。
图2-42 根据数据集大小与数据相似度选择预训练模型
图2-42中的序列根据对预训练模型调整的程度来排序,1对应调整最小,4对应预训练模型调整最大。接下来就各种方法进行说明。
(1)数据集小,数据相似度高
这种情况比较理想,可以将预训练模型当作特征提取器来使用。具体做法:将输出层去掉,然后将剩下的整个网络当作一个固定的特征提取机,应用到新的数据集中。具体过程如图2-43所示,调整分类器中的几个参数,其他模块保持“冻结”即可。这种微调方法有时又称为特征抽取,可能是预训练模型作为目标数据的特征提取器的缘故。
图2-43 调整预训练模型的分类器示意图
(2)数据集大,数据相似度高
在这种情况下,因为有一个较大的数据集,所以神经网络的训练过程将会比较有效率。然而,因为目标数据与预训练模型的训练数据之间存在很大差异,完全采用预训练模型将不会是一种高效的方式。因此最好的方法还是冻结预处理模型中少量较低层,并修改分类器,然后在新数据集的基础上重新开始训练,具体处理过程如图2-44所示。
图2-44 调整预训练模型较高层示意图
(3)数据集小,数据相似度不高
在这种情况下,可以重新训练预训练模型中较少的网络高层,并修改分类器。因为数据的相似度不高,重新训练的过程就变得非常关键。而新数据集大小的不足,则是通过冻结预训练模型中一些较低的网络层进行弥补,具体处理过程如图2-45所示。
图2-45 调整预训练模型更多网络层示意图
(4)数据集大,数据相似度不高
在这种情况下,因为有一个很大的数据集,所以神经网络的训练过程将会比较有效率。然而,由于目标数据与预训练模型的训练数据之间存在很大差异,采用预训练模型将不会是一种高效的方式。因此,最好的方法还是将预处理模型中的权重全都初始化后在新数据集的基础上从头开始训练,具体处理过程如图2-46所示。
图2-46 重新训练整个预训练模型示意图
以上是微调预训练模型的一般方法,具体操作时往往会同时尝试多种方法,然后在多种方法中选择一种最优方案。