Coursera 创始人兼斯坦福大学副教授吴恩达声称,迁移学习将成为机器学习取得商业成功的下一个驱动力。
迁移学习是一种机器学习技术,在一个特定的数据集上,重新利用已经训练过的卷积神经网络(CNN),并将其改造或迁移到一个不同的数据集中。重复使用训练过的卷积神经网络,主要原因是训练数据通常需要花费很长的时间。例如:在 4 个 NVIDIA K80 GPU 上对 ResNet18 训练 30 次需要 3 天,在 4 个 NVIDIA K80 GPU 上对 ResNet152 训练 120 次需要 4 个月。
本文将使用 pytorch 在不同的数据集上进行迁移学习,阐述最常见的迁移学习策略,并分析在何种情况应该使用哪种策略。
如果想直接看到结果,请划至文末。
通常来说,迁移学习的策略有两种。Finetuning(微调)包括在基础数据集上使用预训练网络,并在目标数据集上训练所有层。Freeze and Train(冻结和训练)包括仅冻结并训练最后一层,其他层不变(权重不更新);也可以冻结前几层,微调其他层,这是由于有些证据表明 CNN 的前几层有纹理滤镜和彩色斑点。本文我们将分析两个极端的例子:训练所有的网络层和只训练最后一层。
最常见的基础数据集是 ImageNet,包含 1000 个类别的 120 万张图像,每个类别的图像大约有 1000 张,可分为两组:动物和物品。大多数深度学习库可提供在 ImageNet 上训练好的 CNN 模型。
下图为 CNN 架构的工作流程图,即 ResNet,来识别猫。输入为一张 224px*224px 大小的 3 通道 RGB 图像,输出是虎斑猫标签。最后一层有 1000 个单元,相当于 1000 个 ImageNet 的类。
下图可看到上述提到的迁移学习的两个方法。在这里,我们在 ImageNet 上使用一个预先训练过的 CNN,改编来对 Homer Simpson 分类,将 the Simpsons Character Data 的一个子集作为目标数据集。这个子集包含 20 个类,每个类有 300 到 1000 个图像。
迁移学习的第一步是将基本数据集类的数量调整到目标数据集类的数量,在 Simpson 数据集中,必须删除网络最后一层,它包含 1000 个单元,并添加了一个有 20 个单元的新层。
如上图所示,然后进行 Freeze and Train(冻结和训练),我们只训练最后一层。或者我们也可以微调所有层,如下图所示。
应该只训练最后一层还是微调整个网络适用于哪种情况很难确定。在 Yosinsky 的论文(Yosinsky 等等, 2014)中,作者表述了在 ImageNet 数据集的环境中,一个指定的卷积神经网络的层是常规的还是特定的这一量化程度问题。由于这些层需要相互适应,在中间的某些层网络的分裂对迁移性有负面影响。论文指出,迁移间隔随着任务之间距离的增加而增长,与零权重训练相比,用迁移权重初始化网络可以提高范化性能。
正如 Karpathy 教程中所讲的,在新的数据集中使用迁移学习时,一些基本原则如下:
1. 小而相似的图像:当目标数据集与基本数据集相比时较小,且图像相似时,建议冻结和训练最后一层。
2. 大而相似的图像:当数据集较大且图像相似时,建议微调。
3. 小而不同的图像:建议 freeze and train(冻结和训练)最后一层,或一些最后一层。
4. 大而不同的图像:建议微调。
本文将使用不同的数据集重新验证这些策略。
第一步,定义 finetune (微调)和 freeze_and_train(冻结和训练)程序。此外,列出了 pytorch 中所有可用模型,我们可以将其用作基础模型。
我们使用不同的数据集测试迁移学习程序,将它们全部转换为灰度范围内的数据集,来分析网络在彩色空间内的行为。我们还必须按照 pytorch 结构将数据集目录分为训练和验证。所有的步骤请参照 data_prep.ipynb。
资源链接:
Hymenoptera,2 个类和 397 张图片
Simpons,20 个类 (总体的子集) 和 19548 张图像
Dogs vs Cats,2 个类和 25000 张图像
Caltech 256,257 个类和 30607 张图像
我们定义了初始化参数。
现在,我们加载每个数据集,显示每个数据集的内部统计信息。
对于每个数据集,我们将要计算 finetunining 和 freeze and train。
注:截止到目前(2017 年 12 月),PyTorch 并行计算的效率并不高,因此同时使用 4 个 GPU 计算微调和冻结。使用一个 GPU 冻结的速度比微调快 2.5 倍。
Dogs vs cats 数据集
Caltech256 数据集
本文使用了数量有限的小型网络数据集 ResNet18,因此将研究成果推广到所有数据集和网络还为时过早。然而,这一研究成果可能会为使用转移学习时碰到的问题提供一些启示。结论如下表所示。
我们观察到的第一个细节是,与彩色数据集相比,训练灰度数据集的精确度较低。这与其他研究人员的结论一致,即基础数据集和目标数据集的领域差异越大,移植性越差。
我们也观察到,对于 Simpsons 和 Caltech256 数据集来说,在冻结时精确度降低幅度较大。在 Simpsons 数据集中,精确度降低最多可能是由于领域跨度大,而在 ImageNet 数据集中有自然图像,Simpsons 数据集中大多是纯色。在 Caltech 数据集中精确度较低,冻结时精确度降低幅度较大。可能是由于一个包含了大量的类数据集,每个类的图像数量较小,大约有数百个。
Dogs and Cats 数据集与 ImageNet 数据集最为相似,实际上,ImageNet 数据集包含几种狗和猫。在这种情况下,微调或冻结没有太大的差别。
最后,在 hymenoptera(膜翅目昆虫)数据集中,我们看见了在冻结时彩色数据集的一个小进步。这是因为领域相近,并且数据集比较小的缘故。对应灰色数据集,在冻结的时候,我们看不到任何提高,大概是由于领域迥异吧。
来源: http://www.jianshu.com/p/4f22c8dcaf95