1.概述
在练习机器学习时,训练模型可能需要很长时间。从头开始创建模型架构、训练模型,然后调整模型需要大量的时间和精力。训练机器学习模型的一种更有效的方法是使用已经定义的架构,可能具有已经计算出的权重。这是背后的主要思想 迁移学习,采用已使用的模型并将其重新用于新任务。在深入研究迁移学习的不同使用方式之前,让来了解为什么迁移学习如此强大且有用的技术。
2. 解决深度学习问题
当尝试解决深度学习问题(例如构建图像分类器)时,必须创建模型架构,然后根据数据训练模型。 训练模型分类器涉及调整网络的权重,这个过程可能需要数小时甚至数天的时间,具体取决于模型和数据集的复杂性。 训练时间将根据数据集的大小和模型架构的复杂性进行调整。
如果模型未达到任务所需的准确性,则可能需要对模型进行调整,然后需要重新训练模型。 这意味着需要更多的时间进行训练,直到找到最佳架构、训练长度和数据集分区。 当您考虑有多少变量必须相互对齐才能使分类器发挥作用时,机器学习工程师总是在寻找更简单、更有效的方法来训练和实现模型,这是有道理的。 因此,迁移学习技术应运而生。
设计和测试模型后,如果模型被证明有用,则可以保存该模型并在以后重复使用以解决类似问题。
3.迁移学习的类型
一般来说,有两种不同的 迁移学习的种类:从头开始开发模型并使用预先训练的模型。
当从头开始开发模型时,需要创建一个能够解释训练数据并从中提取模式的模型架构。 第一次训练模型后,可能需要对其进行更改,以获得模型的最佳性能。 然后,可以保存模型架构并将其用作将用于类似任务的模型的起点。
在第二种情况下——使用预训练模型——只需选择要使用的预训练模型即可。 许多大学和研究团队会将其模型的规格提供给一般用途。 模型的架构可以与权重一起下载。
进行迁移学习时,整个模型架构和权重可以用于手头的任务,或者可以仅使用模型的某些部分/层。 仅使用部分预训练模型并训练模型的其余部分称为微调。
4.微调网络
网络微调描述了仅训练网络中某些层的过程。 如果新的训练数据集与用于训练原始模型的数据集非常相似,则可以使用许多相同的权重。
网络中应解冻和重新训练的层数应根据新数据集的大小进行缩放。 如果训练的数据集很小,则更好的做法是保持大部分层不变,只训练最后几层。 这是为了防止网络过度拟合。 或者,可以删除预训练网络的最后几层并添加新层,然后对其进行训练。 相反,如果数据集是一个大数据集,可能比原始数据集大,则应该重新训练整个网络。 使用网络作为 固定特征提取器,网络的大部分可用于提取特征,而只有网络的最后一层可以解冻和训练。
当微调网络时,请记住 ConvNet 的早期层包含表示图像更通用特征的信息。 这些是边缘和颜色等特征。 相比之下,ConvNet 的后续层包含更具体的细节,这些细节针对模型最初训练的数据集中包含的各个类。 如果您在与原始数据集完全不同的数据集上训练模型,您可能希望使用模型的初始层来提取特征并重新训练模型的其余部分。
5.迁移学习示例
迁移学习最常见的应用可能是那些使用图像数据作为输入的应用。 这些通常是预测/分类任务。 道路 卷积神经网络 解释图像数据有助于重用模型的各个方面,因为卷积层通常会区分非常相似的特征。 常见迁移学习问题的一个例子是 ImageNet 1000 任务,这是一个包含 1000 个不同类别对象的庞大数据集。 开发在此数据集上实现高性能模型的公司通常会根据许可发布其模型,以便其他人重用它们。 此过程产生的一些模型包括 微软ResNet模型、Google Inception 模型以及 牛津 VGG 模型 组。