摘要: 本文简要介绍迁移学习与多任务学习的思想,给出了两种方法的模型示例图,适合对此感兴趣的初学者。网络
对于深度学习而言,训练网络这一过程是至关乏味的,须要不断根据实验结果调整网络结构和模型。相对于随机初始化后调参而言,有没有更加高效的方式呢?答案是确定的。一些科研人员发现,将其它训练好的模型从新应用于另一个任务,或者是将相同的网络模型应用于多任务中,模型性能可能会更好。本文将讨论这两种重要方法——迁移学习(Transfer Learning)和多任务学习(Multi-task Learning)。性能
在迁移学习中,科研人员但愿利用源任务(source task)学到的知识来帮助学习另外一个目标任务(target task)。例如,能够将一个训练好的图像分类网络模型用于另外一个与图像识别相关的任务。另一个例子是将模拟环境中训练的网络所学到的知识(网络参数)迁移到真实环境的网络中。学习
基本上,神经网络迁移学习主要有两个应用场景:特征提取(Feature Extraction)和微调(Fine Tuning)。对于ImageNet挑战赛而言,众所周知的一个网络模型是VGG网络,该网络模型能够分类1000种不一样的图像,所以能够将其应用到另一个任务中,好比具体的医学图像分类。如何去寻找已训练好的网络模型呢?有些网站已经对此有所总结,好比Model zoo。优化
1.特征提取网站
在特征提取中,能够在预先训练好的网络结构后添加一个简单的分类器,将源任务上的预先训练好的网络做为另外一个目标任务的特征提取器,只对最后增长的分类器参数进行从新学习,而预先训练好的网络参数不被修改。这使得新任务的特征提取时使用的是源任务中学习到的参数,而不用从新学习全部参数。可是,这些网络参数可能对源任务而言显得更加适合。spa
2.微调设计
微调容许修改预先训练好的网络参数来学习目标任务。通常而言,其大体过程是在预先训练过的网络上添加新的随机初始化层,此外预先训练的网络参数也会被更新,但会使用较小的学习率以防止预先训练好的参数发生较大改变。经常使用的方法是固定底层的参数,调整一些顶层或具体层的参数。这样作的好处能够减小训练参数的数量,同时也有助于克服过拟合现象的发生,尤为是当目标任务的数据量不足够大的时候,该方法实践起来颇有效果。实际上,微调要优于特征提取,由于它可以对迁移过来的预训练网络参数进行优化,使其更加适合新的任务。blog
迁移学习大致上根据两个主要因素(1.目标任务的数据集大小、2.源目标和目标任务之间的类似性)将其分红如下四种场景:ip
场景1:目标任务的数据集是小数据集,且目标任务相似于源目标任务:在这种状况下,建议使用迁移学习中的特征提取方法,由于目标任务的数据集很小,再对其进行训练会致使模型发生过拟合现象。v8
场景2:目标数据集很小,且目标任务与源任务不一样:这种状况建议对底层进行微调,而移除源任务中更深的层、特定层。简而言之,就是只使用源任务中的底层特征提取网络。
场景3:目标数据集很大,且目标任务相似于源任务:在这种状况下,因为拥有大量的数据集,建议从头开始训练网络,网络参数初始化是使用随机初始化的方式。简而言之,就是不依赖于其它预训练好的网络。可是,根据相关研究,利用预先训练好的网络模型来初始化或微调底层的几层网络效果会比彻底随机初始化的效果更好。
场景4:目标数据集很大,且目标任务与源任务不一样:在这种状况下,能够微调预先训练好的网络中的多层或整个网络的参数。
多任务学习的主要目标是经过使用来自这些任务的样原本优化全部网络参数,同时提高多任务的性能。例如,咱们但愿有一个网络模型能够将输入的人脸图像分类为男性或女性,同时还可以预测其年龄。这个案例中有两个相关的任务:一个是二元分类任务,另外一个是回归任务。显而易见,这两个任务是相关的,学习其中一个任务的同时应该加强对另外一个任务的理解。
一种简单的多任务网络设计模型示例如上图所示,能够在任务和任务之间共享部分网络结构。共享部分学习到的是多个任务的共享表示,共享表示具备较强的抽象能力,可以适应多个不一样但相关的目标任务,一般使得多任务中的主任务得到更好的泛化能力。另外一方面,针对每一个不一样的任务都会设计具体的顶层网络结构(头),顶层网络结构用来学习如何使用共享表示来完成每一个特定的任务。
做者信息
Ibrahim sobh,首席研究员,专一于深度学习
详细内容请查看原文