1. Transfer Learning
在实践中因为数据库大小的限制,我们通常不会从头开始(参数随机初始化)训练卷积神经网络。相反,通常会在一个大的数据库上(比如ImageNet,包含1000类总数为120万的图像分类数据库)进行CNN的训练,得到训练好的网络(下面简称ConvNet),然后ConvNet以下面两种方式用到我们的项目中:
- 将ConvNet作为特征提取器。去掉ConvNet最后一层全连接层,将ConvNet剩下的部分当作特征提取器用到我们的分类任务中。对于AlexNet来说,这将生成一个4096维的特征向量,用这得到的特征向量,训练一个线性分类器(线性SVM或者softmax分类器),用在我们的分类任务中。
- 用新数据库的数据微调ConvNet。对于在ImageNet预训练的网络ConvNet,我们可以在新的数据库上使用反向传播算法微调它的权重参数。在微调过程中,既可以调整所有层的参数,也可以将前几层的参数固定,微调后面几层。这样做的原因在于预训练的网络前几层通常是通用的特征(比如边缘提取器),而网络的后几层则是与数据库和分类任务相关的,因而可以在给定新的数据库和分类任务时仅调整后面几层。
2. 怎样fine-tune
在fine-tune时,究竟该选择哪种方式的Transfer Learning?需要考虑的因素有许多,其中最重要的两条是新数据库的规模和它与预训练数据库的相似程度,根据这两条因素的不同配置,存在四种场景: