在机器学习领域,尤其是在计算机视觉任务中,经常面临数据量不足的问题。这种情况下,从头开始训练一个模型往往难以达到理想的效果。迁移学习作为一种解决方案,允许利用已有的模型知识来加速新模型的训练过程,并且减少所需数据量。本文将详细探讨迁移学习的定义、工作原理以及何时使用迁移学习。
迁移学习是一种计算机视觉技术,它允许在一个已经训练好的模型基础上构建新模型。这样做的目的是让新模型能够从旧模型中学习特征,从而更快地适应新任务,并且减少训练所需的数据量。迁移学习的核心思想是将一个模型学到的知识转移到另一个模型中,这类似于将绘画知识应用到绘图中——色彩理论、审美观念等,即使这两个任务在表面上看起来不同。
假设收集了一组非洲野生动物园中动物的图片,包括长颈鹿和大象。现在,想要构建一个模型,能够根据这些图片输入来区分长颈鹿和大象,作为统计特定区域野生动物数量模型的一部分。
可能会想到从头开始构建一个图像识别模型来完成这个任务。但不幸的是,只拍了几张照片,因此不太可能实现高准确率。
因此,决定寻找新的图片来扩大数据集,并标记新图片,然后从头开始训练一个模型。这是可行的。然而,假设找到了适合领域的新图片,这个过程非常耗时。
但是,假设有一个已经在数百万张图片上训练过的模型,能够区分狗和猫。可以利用这个已经训练好的模型,利用它已经学到的知识来教它区分其他类型的动物(在例子中是长颈鹿和大象),而不需要从头开始训练一个可能需要大量数据和计算复杂性的模型。
一个能够识别猫和狗的模型如何被用来识别长颈鹿和大象?这是个好问题。
卷积网络从高层图像中提取特征。CNN的前几层学习识别一般特征,如垂直边缘,随后的层识别水平边缘,然后可能将这些特征组合起来识别角落、圆形等。
这些高级特征与需要识别的实体类型无关。计算机视觉模型不仅仅“学习”例如猫看起来像什么。相反,模型将图像分解成小组件,并学习这些小组件如何组合成与特定概念相关的特征。
在实体(本例中为动物)中的识别发生在线性层,它们以从卷积层提取的特征作为输入,并学习对最终类别(长颈鹿或大象)进行分类。
要应用迁移学习,移除已经训练好的模型的线性层(因为这些是训练用来识别其他类别的层),并添加新的层。重新训练新层,使它们专门用于识别感兴趣的类别。
要应用迁移学习,首先选择一个在大型数据集上训练过并解决类似问题的模型。常见的做法是从计算机视觉文献中获取模型,如VGG、ResNet和MobileNet。
接下来,移除旧的分类器和输出层。
然后,添加一个新的分类器。这涉及到调整架构以解决新任务。通常,这个阶段意味着添加一个新的随机初始化的线性层(由下图中的蓝色块表示)和另一个具有多个单元的层,数量等于数据集中的类别数(由下图中的粉色块表示)。
接下来,需要冻结预训练模型的特征提取层。这是一个重要步骤。如果不冻结特征提取层,模型将重新初始化它们。如果发生这种情况,将失去已经进行的所有学习。这将与从头开始训练模型没有区别。
最后一步是训练新层。只需要在新数据集上训练新的分类器。
完成上一步后,将拥有一个可以在数据集上进行预测的模型。可选地,可以通过微调来提高其性能。微调包括解冻预训练模型的部分并继续在新数据集上训练它,以使预训练的特征适应新数据。为了避免过拟合,只有在新数据集较大且学习率较低时才运行此步骤。
让讨论在哪些情况下使用迁移学习是方便的,以及在哪些情况下不使用迁移学习。
当拥有的数据量很少时,使用迁移学习是值得的:使用太少的数据会导致模型性能不佳。使用预训练模型有助于创建更准确的模型。将花费更少的时间来启动模型,因为不需要花时间收集更多数据。
当时间有限时:训练机器学习模型可能需要很长时间。当没有太多时间——例如,创建一个原型来验证一个想法——时,值得考虑是否适合使用迁移学习。
当计算能力有限时:用数百万张图片训练机器学习模型需要大量的计算。有人已经为完成了艰苦的工作,为提供了一套好的权重,可以用它们来完成任务。这减少了训练模型所需的计算量——因此也减少了所需的设备。
另一方面,当以下情况出现时,迁移学习不适用:
领域不匹配:大多数时候,如果预训练模型训练的数据与将要用于迁移学习的数据非常不同,迁移学习就不会起作用。两个数据集需要在它们预测的内容上相似(例如,基于显示有注释的划痕和凹痕的类似产品的缺陷分类器)。
当需要使用大型数据集时:迁移学习可能不会对需要大型数据集的任务产生预期效果。随着添加更多数据,预训练模型的性能会变得更糟。原因是随着增加微调数据集的大小,正在向模型添加更多噪声。由于预训练模型在预训练数据集上表现良好,它可能被困在局部最小点,并且根本无法适应新噪声。如果有大型数据集,应该考虑从头开始训练模型,以便模型可以从数据集中学习关键特征。
迁移学习模型专注于存储在解决一个问题时获得的知识,并将其应用于不同的但相关的问题。与其从头开始训练神经网络,许多预训练模型可以作为训练的起点。这些预训练模型提供了更可靠的架构,并节省了时间和资源。
当数据量有限、时间紧迫或计算能力有限时,可能想考虑使用迁移学习。
当拥有的数据与预训练模型训练的数据不同时,或者如果有大型数据集,在这两种情况下,最好从头开始训练模型。