📜  ML |转移学习导论

📅  最后修改于: 2021-04-17 04:12:20             🧑  作者: Mango

我们,人类在完成任务之间的知识转移方面非常完美。这意味着,每当我们遇到新问题或新任务时,我们都将其识别出来并运用我们以前的学习经验中的相关知识。这使我们的工作变得轻松快捷。例如,如果您知道如何骑自行车,以及是否被要求骑摩托车,这是您以前从未做过的。在这种情况下,我们的自行车经验将发挥作用,并处理诸如平衡自行车,转向等任务。与一个完整的初学者相比,这将使事情变得更轻松。这样的倾向在现实生活中非常有用,因为它使我们更加完美,并使我们获得更多的经验。

遵循相同的方法,在机器学习领域引入了术语转移学习。这种方法涉及在某些任务中学习到的知识的使用,并将其应用于解决相关目标任务中的问题。尽管大多数机器学习都是为解决单个任务而设计的,但促进转移学习的算法的开发却是机器学习社区不断关注的话题。

为什么要转移学习?
许多在图像上训练的深度神经网络都有一个共同的奇怪现象:在网络的早期,深度学习模型试图学习低水平的特征,例如检测边缘,颜色,强度变化等。似乎不是特定于特定的数据集或任务,因为无论我们正在处理哪种类型的图像以检测狮子或汽车。在这两种情况下,我们都必须检测这些低级功能。不管确切的成本函数或图像数据集如何,所有这些功能都会发生。因此,在检测狮子的一项任务中学习这些特征可以用于其他任务,例如检测人类。这就是转移学习。如今,很难看到人们从头开始训练整个卷积神经网络,并且通常使用在相似任务中对各种图像进行训练的预训练模型,例如,在ImageNet上训练的模型(120万个图像和1000个图像类别),并使用其中的功能来解决新任务。

框图:

在处理迁移学习时,我们会遇到一种称为冻结层的现象。当不再可以训练时,可以说它是固定的,可以是CNN层,隐藏层,层的块或一组所有层的子集。因此,冻结层的权重将不会在训练期间更新。未冻结的层遵循常规训练程序。

当我们使用转移学习解决问题时,我们选择一个预训练模型作为我们的基础模型。现在,有两种可能的方法来使用来自预训练模型的知识。第一种方法是冻结几层预训练模型,然后在新数据集上训练其他层以完成新任务。第二种方法是创建一个新模型,同时还要从预训练模型的各个图层中提取一些特征并将其用于新创建的模型中。在这两种情况下,我们都将学习一些功能,然后尝试训练模型的其余部分。这样可以确保从预先训练的模型中取出两个任务中唯一可能相同的特征,并通过训练将模型的其余部分更改为适合新的数据集。

冻结层和可训练层:

冻结层和可训练层

现在,有人可能会问如何确定我们需要冻结的层以及需要训练的层。答案很简单,您越想从预先训练的模型中继承要素,就越需要冻结图层。例如,如果预先训练的模型检测到一些花卉种类,而我们需要检测一些新的种类。在这种情况下,具有新物种的新数据集包含许多与预训练模型相似的特征。因此,我们冻结的层数更少,因此我们可以在新模型中使用其大多数知识。现在,再考虑另一种情况,如果有一个预先训练的模型可以检测图像中的人,并且我们想使用该知识来检测汽车,那么在数据集完全不同的情况下,冻结大量图层是不好的因为冻结大量图层不仅会提供低级特征,还会提供高阶特征(例如鼻子,眼睛等),这些特征对于新数据集(汽车检测)是无用的。因此,我们仅从基础网络复制低级特征,并在新数据集上训练整个网络。

让我们考虑一下目标任务的大小和数据集与基础网络不同的所有情况。

  • 目标数据集很小,并且与基础网络数据集相似:由于目标数据集很小,这意味着我们可以用目标数据集微调经过预训练的网络。但这可能会导致过度拟合的问题。此外,目标任务中的类数可能会有一些变化。因此,在这种情况下,我们从一端删除完全连接的层(可能是一两个层),然后添加满足新类数量的新的完全连接的层。现在,我们冻结模型的其余部分,只训练新添加的图层。
  • 目标数据集很大并且类似于基础训练数据集:在这种情况下,当数据集很大并且可以容纳预先训练的模型时,就不会出现过度拟合的机会。在此,最后一个全连接层也将被删除,并添加具有适当数量的类的新的全连接层。现在,整个模型在新的数据集上训练。这样可以确保在新的大型数据集上调整模型,并保持模型架构不变。
  • 目标数据集很小,并且与基础网络数据集不同:由于目标数据集不同,因此使用预训练模型的高级功能将无济于事。在这种情况下,请在预先训练的模型中从末端删除大多数图层,然后在新数据集中添加满足要求的类数的新图层。这样,我们可以使用预训练模型中的低层特征,并训练其余各层以适应新的数据集。有时,在最后添加新层之后训练整个网络是有益的。
  • 目标数据集很大且与基础网络数据集不同:由于目标网络很大且不同,因此最佳方法是从预训练的网络中删除最后一层,并添加满足类数的层,然后训练整个网络而不会冻结任何层。

    首先,转移学习是一种非常有效且快速的方法。它给出了移动的方向,大多数情况下,通过转移学习也可以获得最佳结果。