当我阅读并搜索对预训练网络的微调时,会按照以下两个步骤(简而言之)完成:
我的问题是:
仅仅执行第一步是否足够?
如果我只进行第一步,是否与网络作为特征提取器方法不同?
(作为特征提取器方法的网络是使用预训练网络提取特征并使用传统机器学习分类算法对其进行分类)。
如果您想了解更多信息以澄清问题,请告知我们。
答案 0 :(得分:1)
您的问题存在一些问题......
首先,你明确暗示一个只有2层的网络,这与现在在实践中实际使用微调的方式相当(非常)。
其次,你到底是什么意思"足够"在你的第一个问题(足够的东西)?
事实上,预训练模型,特征提取器和微调的概念之间存在足够的重叠,并且不同的人甚至可能以不完全相同的方式使用所涉及的术语。斯坦福CNNs for Visual Recognition课程采用的一种方法是将所有这些视为一般性称为转移学习的特殊情况;这是一个有用的excerpt来自上述课程的相应部分,可以说是你的问题的精神(如果不是字母):
三种主要的转学习方案如下:
- ConvNet作为固定功能提取器。在ImageNet上预先训练一个ConvNet,删除最后一个完全连接的层(该层的输出是ImageNet等不同任务的1000个等级分数),然后将其余的ConvNet视为新数据集的固定特征提取器。在AlexNet中,这将为包含紧接在分类器之前的隐藏层的激活的每个图像计算4096-D向量。我们将这些功能称为 CNN代码。如果在ImageNet上训练ConvNet期间它们也被阈值处理(通常是这种情况),那么这些代码是ReLUd(即阈值为零)对性能很重要。为所有图像提取4096-D代码后,为新数据集训练线性分类器(例如线性SVM或Softmax分类器)。
- 微调ConvNet 。第二种策略是不仅在新数据集上替换和重新训练ConvNet之上的分类器,而且还通过继续反向传播来微调预训练网络的权重。可以微调ConvNet的所有层,或者可以保留一些早期层(由于过度拟合问题)并且仅微调网络的某些更高级别部分。这是因为观察到ConvNet的早期特征包含更多通用特征(例如边缘检测器或颜色斑点检测器),这些特征应该对许多任务有用,但后来的ConvNet层逐渐变得更加特定于类的细节。包含在原始数据集中。例如,对于包含许多犬种的ImageNet,ConvNet的代表性功能的很大一部分可能专门用于区分狗品种的特征。
- 预训练模型。由于现代ConvNets需要2-3周的时间来训练ImageNet上的多个GPU,因此通常会看到人们发布他们的最终ConvNet检查点,以便其他可以使用网络进行微调的人获益。例如,Caffe库有一个模型动物园,人们可以在这里共享网络权重。
何时以及如何微调?您如何决定应对新数据集执行哪种类型的转移学习?这是几个因素的函数,但最重要的两个因素是新数据集的大小(小或大),以及它与原始数据集的相似性(例如ImageNet类似于图像和类的内容,或者非常不同,例如显微镜图像)。请记住,ConvNet功能在早期图层中更通用,在后续图层中更具原始数据集特性,以下是导航4种主要场景的一些常用经验法则:
- 新数据集很小,与原始数据集类似。由于数据很小,因为过度拟合问题而对ConvNet进行微调并不是一个好主意。由于数据与原始数据类似,我们希望ConvNet中的更高级别功能也与此数据集相关。因此,最好的想法可能是在CNN代码上训练线性分类器。
- 新数据集很大,与原始数据集类似。由于我们有更多的数据,如果我们试图在整个网络中进行微调,我们就会更有信心,我们不会过度配备。
- 新数据集很小但与原始数据集非常不同。由于数据很小,因此最好只训练线性分类器。由于数据集非常不同,因此最好从网络顶部训练分类器,其中包含更多数据集特定的功能。相反,在网络早期的某个地方训练SVM分类器可能会更好。
- 新数据集很大,与原始数据集非常不同。由于数据集非常大,我们可以预期我们可以从头开始训练ConvNet。然而,在实践中,使用来自预训练模型的权重进行初始化通常仍然是有益的。在这种情况下,我们将有足够的数据和信心来微调整个网络。
醇>