迁移学习

古语有言:”它山之石可以攻玉”,迁移学习就是这么一种思想,将在其他训练集上训练好的神经网络迁移到目标任务上。自打迁移学习的思想提出后,在工业实践上,就很少有人会从头开始(随机初始化)训练网络。

相比于从零开始训练模型,迁移学习的优越性主要体现在一下几方面:

  • 加速收敛。由于已经在一些数据集上进行训练,网络已经习得一些模式,再在新数据集上训练时,权重变化较小,经过少数几轮训练即可快速看到效果,甚至不需要训练,直接使用。
  • 降低对数据标注以及数据量的要求。数据标注是一件费时费力的事情,大部分的深度学习任务其实都没有能力去获取足够标注数量的数据集。通过迁移学习,可以在较少量数据集上去的更加显著的效果。
  • 降低对机器性能的要求和损耗。大部分机构都没有足够条件去使用大量GPU机器去训练,但网络上目前已经有许多大公司开源的预训练模型,这些预训练模型已经在一些通用的数据集上进行训练。

我们把提前训练好的模型称为预训练模型,将预训练模型运用到新的任务上,主要有一下几种方案:

  • 将预训练模型当做特征提取器。

以计算机视觉为例,假设先通过ImageNet数据集训练好了一个卷积网络。注意,ImageNet数据集包含1000个分类,也就是说,这个训练好的卷积网络最后的全连接层输出为1000维向量,但是我们目标人为大概率不是一千个分类,所以,在进行迁移时,我们需要删除最后一个全连接层,而保留之前的所有的隐藏层并迁移到新的网络中。在新的网络中,迁移过来的隐藏层并不会进行反向传播训练,只作为特征提取器。在迁移过来的隐藏层后,可以添加新的、符合目标任务需求的全连接层,甚至可以接SVM等等。

  • 微调(fine-tuning)。

微调是说,迁移过来的隐藏层也同样参与反向传播训练,更新权重。这里,我们可以更加个性化地设置对全部隐藏层进行训练,亦或者指定某部分层进行训练。

  • 新数据集很小,与原始数据集类似。

由于数据集很小,进行微调并不是一个好方法,容易过拟合,切由于数据集相似度搞,最好的方案是删除神经网络的最后全连接层,添加一个新的全连接层,与新数据集中的类别数量相匹配,并随机化设置新的全连接层的权重,冻结预先训练过的网络中的所有权重,训练该网络以更新新连接层的权重。

  • 新数据集很大,与原始数据集类似。

由于新的数据集足够大,出现过拟合情况可能性不大,所以删掉最后的全连接层,并替换成与新数据集中的类别数量相匹配的层级,随机地初始化新的完全连接层的权重,使用预先训练过的权重初始化迁移部分网络的权重,重新训练整个神经网络(包括迁移过来部分网络和新的全连接层)。

  • 新数据集很小,但与原始数据集有很大不同。

由于数据集非常不同且数据集规模小,因此最好从网络顶部训练分类器,其中包含更多特定于数据集的特征。将全连接层,以及与全连接层毗邻的部分高层级特征提取网络删除,然后向剩下的预先训练过的层级添加新的全连接层,并与新数据集的类别数量相匹配,随机化设置新的全连接层的权重,冻结预先训练过的网络中的所有权重。

  • 新数据集很大,与原始数据集有很大不同。

由于数据集非常大,重新训练也并无不可。但是,在实践中,使用预训练模型中的权重进行初始化通常仍然是很有帮助的。在这种情况下,我们将有足够的数据和信心来微调整个网络。此时,我们只需要删掉最后的完全连接层,并替换成与新数据集中的类别数量相匹配的层级,并使用随机初始化的权重重新训练网络(全连接部分)。

Original: https://www.cnblogs.com/chenhuabin/p/16589052.html
Author: 奥辰
Title: 迁移学习

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/711151/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球