迁移学习简介
添加时间:2021-11-04 10:18:55
来源:
添加时间:2021-11-04 10:18:55
防伪码:CMSEASYQPiAaf2xJHIF8GM499
我们人类在应用任务之间的知识转移方面非常完美。这意味着每当我们遇到新的问题或任务时,我们都会认识到它并应用我们从以前的学习经验中获得的相关知识。这使我们的工作轻松快速地完成。例如,如果您知道如何骑自行车,并且如果您被要求骑您以前从未骑过的摩托车。在这种情况下,我们的自行车经验将发挥作用并处理平衡自行车、转向等任务。与完整的初学者相比,这将使事情变得更容易。这种倾向在现实生活中非常有用,因为它使我们更加完美并让我们获得更多经验。
遵循相同的方法,在机器学习领域引入了一个术语“迁移学习”。这种方法涉及使用在某些任务中学到的知识,并将其应用到相关目标任务中解决问题。虽然大多数机器学习旨在解决单个任务,但促进迁移学习的算法的开发是机器学习社区持续关注的话题。
为什么要迁移学习?
许多在图像上训练的深度神经网络都有一个奇怪的现象:在网络的早期层,深度学习模型试图学习低层次的特征,比如检测边缘、颜色、强度变化等。这类特征似乎不是特定于特定数据集或任务的,因为无论我们正在处理什么类型的图像,无论是检测狮子还是汽车。在这两种情况下,我们都必须检测这些低级特征。无论确切的成本函数或图像数据集如何,所有这些特征都会发生。因此,在检测狮子的一项任务中学习这些特征可以用于其他任务,例如检测人类。这就是迁移学习。如今,很难看到人们从头开始训练整个卷积神经网络,
在处理迁移学习时,我们会遇到一种称为层冻结的现象。一个层,它可以是一个 CNN 层、隐藏层、一个层块,或所有层的集合的任何子集,当它不再可用于训练时,被称为是固定的。因此,在训练期间不会更新冻结层的权重。而未冻结的层则遵循常规训练程序。
当我们使用迁移学习解决问题时,我们选择一个预训练的模型作为我们的基础模型。现在,有两种可能的方法可以使用来自预训练模型的知识。第一种方法是冻结几层预训练模型,并在我们的新数据集上为新任务训练其他层。第二种方法是制作一个新模型,但也从预训练模型的层中取出一些特征,并在新创建的模型中使用它们。在这两种情况下,我们都会取出一些学习到的特征并尝试训练模型的其余部分。这确保了两个任务中唯一可能相同的特征从预训练的模型中取出,而模型的其余部分通过训练改变以适应新的数据集。
冻结层和可训练层:
冻结和可训练层
现在,人们可能会问如何确定我们需要冻结哪些层以及需要训练哪些层。答案很简单,您越想从预先训练的模型中继承特征,就越需要冻结层。例如,如果预先训练的模型检测到一些花种,我们需要检测一些新品种。在这种情况下,具有新物种的新数据集包含许多类似于预训练模型的特征。因此,我们冻结较少的层数,以便我们可以在新模型中使用其大部分知识。现在,考虑另一种情况,如果有一个预先训练的模型可以检测图像中的人物,并且我们想使用该知识来检测汽车,在数据集完全不同的情况下,冻结很多层是不好的因为冻结大量层不仅会给出低级特征,但也提供了对新数据集(汽车检测)无用的高级特征,如鼻子、眼睛等。因此,我们只从基础网络复制低级特征,并在新数据集上训练整个网络。
让我们考虑目标任务的大小和数据集与基础网络不同的所有情况。
目标数据集很小并且与基础网络数据集相似:由于目标数据集很小,这意味着我们可以使用目标数据集对预训练的网络进行微调。但这可能会导致过拟合的问题。此外,目标任务中的类数量可能会有一些变化。因此,在这种情况下,我们从末尾移除全连接层,可能是一两个,添加满足新类数量的新全连接层。现在,我们冻结模型的其余部分,只训练新添加的层。
目标数据集很大并且与基础训练数据集相似:在这种情况下,当数据集很大并且可以容纳预训练模型时,就不会有过度拟合的机会。在这里,最后一个全连接层也被删除,并添加了一个具有适当数量类的新全连接层。现在,整个模型都在新数据集上进行了训练。这确保在新的大型数据集上调整模型,保持模型架构相同。
目标数据集小且与基础网络数据集不同:由于目标数据集不同,使用预训练模型的高级特征将没有用。在这种情况下,从预训练模型的末尾删除大部分层,并在新数据集中添加满足类数的新层。通过这种方式,我们可以使用预训练模型中的低级特征并训练其余层以适应新数据集。有时,在最后添加新层后训练整个网络是有益的。
目标数据集较大且与基础网络数据集不同:由于目标网络较大且不同,最好的方法是从预训练网络中删除最后一层并添加满足类数的层,然后在不冻结任何层的情况下训练整个网络。
首先,迁移学习是一种非常有效且快速的方法。它给出了移动的方向,大多数时候最好的结果也是通过迁移学习获得的。