简介
好的机器学习模型需要大量数据和许多GPU或TPU进行训练。大多数时候,他们只能执行特定的任务。
大学和大公司有时会发布他们的模型。但很可能你希望开发一个机器学习应用程序,但没有适合你的任务的可用模型。
但别担心,你不必收集大量数据,也不必花费大量资金来开发自己的模型。你可以用迁移学习代替。这减少了训练时间,并且可以用更少的数据获得良好的性能。
什么是迁移学习?
在迁移学习中,我们使用模型在特定任务上收集的知识来解决不同但相关的任务。模型可以从上一个任务中学到的东西中获益,从而更快地学习新任务。
让我们在这里举个例子,假设你想在图像上检测狗。在互联网上,你可以找到一种可以检测猫的模型。由于这是一项非常类似的任务,你需要拍摄几张你的狗的照片,并重新训练模型以检测狗。
也许模型已经学会了通过猫的皮毛或它们有眼睛的事实来识别猫,这对识别狗也会很有帮助。
实际上有两种类型的迁移学习,特征提取和微调。
通常,这两种方法遵循相同的程序:
初始化预训练的模型(我们要学习的模型)
重塑最终层的形状,使其输出数量与新数据集中分类的数量相同
定义要更新的层
训练新数据集
特征提取
让我们考虑一个卷积神经网络结构,滤波器是一个密集层和一个输出神经元。
该网络经过训练,可以预测图像上有猫的概率。我们需要一个大数据集(有猫和没有猫的图像),而且训练时间很长。此步骤称为“预训练”。
然后是有趣的部分。我们再次训练网络,但这次是用一个包含狗的小图像数据集。
在训练过程中,除输出层外的所有层都被“冻结”。这意味着我们不会在训练期间更新它们。
训练后,网络输出狗在图像上可见的概率。此训练程序所需时间将少于之前的预训练。