Machine learning 预训练卷积神经网络的微调

Machine learning 预训练卷积神经网络的微调,machine-learning,neural-network,deep-learning,conv-neural-network,Machine Learning,Neural Network,Deep Learning,Conv Neural Network,当我阅读和搜索有关预训练网络的微调的内容时,它是通过以下两个步骤完成的(简而言之): 冻结隐藏层并解冻完全连接的层并进行训练 解冻两层,然后再次训练 我的问题是: 仅执行第一步是否足够 如果我只执行第一步,它是否与作为特征提取器的网络方法相同 (网络作为特征抽取器的方法是,使用预先训练好的网络提取特征,并使用传统的机器学习分类算法对其进行分类) 如果您需要更多信息来澄清问题,请让我知道。您的问题有一些问题 首先,您清楚地暗示了只有两层的网络,这与当今实际使用微调的方式相差甚远 第二,你在第一个问

当我阅读和搜索有关预训练网络的微调的内容时,它是通过以下两个步骤完成的(简而言之):

  • 冻结隐藏层并解冻完全连接的层并进行训练
  • 解冻两层,然后再次训练
  • 我的问题是:

  • 仅执行第一步是否足够

  • 如果我只执行第一步,它是否与作为特征提取器的网络方法相同

  • (网络作为特征抽取器的方法是,使用预先训练好的网络提取特征,并使用传统的机器学习分类算法对其进行分类)


    如果您需要更多信息来澄清问题,请让我知道。

    您的问题有一些问题

    首先,您清楚地暗示了只有两层的网络,这与当今实际使用微调的方式相差甚远

    第二,你在第一个问题中所说的“足够”到底是什么意思


    事实上,预先训练的模型、特征抽取器和微调的概念之间有足够的重叠,不同的人甚至可能以不完全相同的方式使用相关术语。斯坦福课程采用的一种方法是把所有这些看作是更一般的叫做“强>转移学习<强”的特殊情况。以下是上述课程各部分中的一个有用的例子,可以说是针对您问题的精神(如果不是文字):

    三种主要的迁移学习场景如下所示:

    • ConvNet作为固定功能提取器。取一个在ImageNet上预训练的ConvNet,移除最后一个完全连接的层(该层的输出是不同任务(如ImageNet)的1000个等级分数),然后将ConvNet的其余部分视为新数据集的固定特征提取器。在AlexNet中,这将为每个图像计算一个4096-D向量,该图像包含分类器之前隐藏层的激活。我们称这些功能为CNN代码。如果在ImageNet上训练ConvNet期间(通常情况下)也对这些代码进行了阈值化,则这些代码的重新设置(即阈值为零)对性能非常重要。为所有图像提取4096-D代码后,为新数据集训练线性分类器(例如线性SVM或Softmax分类器)
    • 微调ConvNet。第二种策略是不仅在新数据集上替换和重新训练ConvNet上的分类器,而且通过继续反向传播来微调预训练网络的权重。可以微调ConvNet的所有层,也可以保持某些早期层固定(由于过度拟合的问题),只微调网络的某些更高级别部分。这是因为观察到ConvNet的早期功能包含更多通用功能(如边缘检测器或颜色斑点检测器),这些功能对许多任务都很有用,但ConvNet的后续层会逐渐变得更具体到原始数据集中包含的类的细节。例如,在包含许多犬种的ImageNet的情况下,ConvNet的很大一部分表现力可能用于区分犬种的特定特征
    • 预训练模型。由于现代ConvNet需要2-3周的时间在ImageNet上跨多个GPU进行训练,因此人们通常会为了其他可以使用网络进行微调的人的利益而发布他们的最终ConvNet检查点。例如,Caffe图书馆有一个模型动物园,人们在那里分享网络权重
    何时以及如何微调?您如何决定应在新数据集上执行何种类型的迁移学习?这是几个因素的函数,但最重要的两个因素是新数据集的大小(小或大)及其与原始数据集的相似性(例如,图像内容和类别与ImageNet相似,或非常不同,如显微镜图像)。请记住,ConvNet功能在早期的层中更通用,在后期的层中更特定于原始数据集,以下是导航4个主要场景的一些常见经验法则:

  • 新数据集很小,与原始数据集相似。由于数据很小,由于过度拟合的原因,对ConvNet进行微调不是一个好主意。由于数据与原始数据相似,我们希望ConvNet中的高级功能也与此数据集相关。因此,最好的办法可能是在CNN代码上训练线性分类器
  • 新数据集很大,与原始数据集相似。因为我们有更多的数据,我们可以有更多的信心,如果我们试图通过整个网络进行微调,我们不会过度适应
  • 新数据集很小,但与原始数据集非常不同。由于数据较小,因此最好只训练线性分类器。由于数据集非常不同,因此最好从网络顶部训练分类器,因为网络包含更多数据集特定的特征。相反,通过网络中较早的某个地方的激活来训练SVM分类器可能会更好
  • 新数据集很大,与原始数据集有很大不同。由于数据集非常大,我们可以期望能够从头开始训练ConvNet。然而,在实践中,使用预训练模型的权重进行初始化通常仍然是有益的。在这种情况下,我们将有足够的数据和信心对整个网络进行微调

  • 你的问题有一些问题

    首先,你清楚地暗示了