从零开始培养深度学习模式和转移学习的优势是主观的。这在很大程度上取决于您要解决的问题、时间限制、数据的可用性和您拥有的计算资源。
让我们考虑一个场景,您想要为基于人脸图像的情感分类这样的任务训练一个深度学习模型。你可以的
- 使用预先训练的模型:您可以使用预先训练的模型(例如,Resnet-50或VGG-16)作为获取图像特征的主干,并在其之上训练分类器(例如两层神经网络)。在这里,您保持从预先训练的模型获得的骨干部分固定,并且只允许分类器的参数改变。这种方法是理想的,当你想要训练一个模型快速或没有太多的计算资源。在这种情况下,性能可能不是最好的,因为经过预先训练的骨干可能会受到域自适应的影响。
- 从零开始训练一个模型:你可以为你的问题从零开始训练一个深度学习模型(例如Resnet-50或VGG-16)。这意味着您使用新的参数(即,不是从预先训练的模型中获得)初始化模型。这需要更多的计算资源(或时间)来训练,但需要从训练数据中学习所有参数。如果培训数据足够充分,那么在使用这种方法进行培训时,与方法1中的模型等效的模型应该表现得更好。
- 传输和微调:您可以使用预先训练的参数和数据集上的微调初始化模型(再说一次,Resnet-50或VGG-16)。这种方法比方法1需要更多的计算资源,对于相同的模型需要同等的计算资源。如果源域(模型预先训练的任务)与目标域(您希望训练模型的任务)相关,则转移学习是有利的。例如,Imagenet上的分类任务与人脸图像的情感分类有关。如果您想获得最好的性能,这是最常用的方法。
了解有关转移学习这里的更多信息。
TL;DR:
- 如果你有足够的计算资源,从相关的任务中传递一个经过预先训练的模型并对其进行微调。
- 如果您缺乏计算资源或时间,请使用预先训练过的模型作为骨干,并为您的任务调优头。
- 如果你找不到一个很好的转移学习的源域,或者你不想对一个模型进行预训练,或者训练数据足够大,那么你可以不使用预先训练的参数从零开始训练模型。