迁移学习和多任务学习

迁移学习

总结一下,什么时候迁移学习是有意义的?如果你想从任务A学习并迁移一些知识到任务B,那么当任务A和任务B都有同样的输入时,迁移学习是有意义的。在第一个例子中,A和B的输入都是图像,在第二个例子中,两者输入都是音频。当任务A的数据比任务多得多时,迁移学习意义更大。所有这些假设的前提都是,你希望提高任务B的性能,因为任务B每个数据更有价值,对任务A来说通常任务的数据量必须大得多,才有帮助,因为任务A里单个样本的价值没有比任务B单个样本价值大。然后如果你觉得任务A的低层次特征,可以帮助任务B的学习,那迁移学习更有意义一些。

迁移学习最有用的场合是,如果你尝试优化任务B的性能,通常这个任务数据相对较少,例如,在放射科中你知道很难收集很多X射线扫描图来搭建一个性能良好的放射科诊断系统,所以在这种情况下,你可能会找一个相关但不同的任务,如图像识别,其中你可能用1百万张图片训练过了,并从中学到很多低层次特征,所以那也许能帮助网络在任务B在放射科任务上做得更好,尽管任务B没有这么多数据。迁移学习什么时候是有意义的?它确实可以显著提高你的学习任务的性能,但我有时候也见过有些场合使用迁移学习时,任务A实际上数据量比任务B要少,这种情况下增益可能不多。

多任务学习

在迁移学习中,你的步骤是串行的,你从任务A里学习知识然后迁移到任务B。在多任务学习中,你是同时开始学习的,试图让单个神经网络同时做几件事情,然后希望这里每个任务都能帮到其他所有任务。

我们来看一个例子,假设你在研发无人驾驶车辆,那么你的无人驾驶车可能需要同时检测不同的物体,比如检测行人、车辆、停车标志,还有交通灯各种其他东西。比如在左边这个例子

这里写图片描述

那么多任务学习什么时候有意义呢?当三件事为真时,它就是有意义的。

第一,如果你训练的一组任务,可以共用低层次特征。对于无人驾驶的例子,同时识别交通灯、汽车和行人是有道理的,这些物体有相似的特征,也许能帮你识别停车标志,因为这些都是道路上的特征。

第二,这个准则没有那么绝对,那个小任务的平均数据量差不多。

迁移学习和微调的区别

  • 什么是迁移学习?
    即一种学习对另一种学习的影响,它广泛地存在于知识、技能、态度和行为规范的学习中。任何一种学习都要受到学习者已有知识经验、技能、态度等的影响,只要有学习,就有迁移。迁移是学习的继续和巩固,又是提高和深化学习的条件,学习与迁移不可分割。
    换句话说,对于一个具体的深度学习训练任务,如:人脸识别,训练数据当然是用人脸库啦,你会觉得是废话,但是,呵呵,要是你的人脸库不够大怎么办?要是你没钱买数据怎么办?而且,你又没有足够的时间收集一个足够大的人脸库怎么办?这个时候,你可以试试迁移学习(transfer learning),用别人已经训练好的Imagenet的模型来做。
    你可以将已经训练好了的Alexnet、googlenet、vggnet等网络中的某些层直接抽出来,化为己用。具体的来说,你可以将Alexnet中的最一层特征层抽出来,然后自己设计一个分类器或者直接用SVM分类器,分类。当然你也可以抽取多个网络中的网络层,然后进行融合。总而言之,就是将已经学到了的“知识”化为己用。在最后,你要用自己的数据集进行一下微调(fine-tune)。这就好比,使用“吸星大法”吸收了别人的功力之后,好歹也得打坐盘膝,调理一下不是?
  • 什么是微调(fine-tune)?
    看到别人一个很好的模型,虽然针对的具体问题不一样,但是也想试试看,看能不能得到很好的效果,而且自己的数据也不多,怎么办?没关系,把别人现成的训练好了的模型拿过来,换成自己的数据,调整一下参数,在训练一遍,这就是微调(fine-tune)。

  • 总结
    迁移学习更像是“吸星大法”,将别人修炼的功力直接吸过来,但是因为原先针对的具体任务有所不同,有可能走火入魔?这时候,就需要盘膝打坐调理一番,疏通自己的经脉,努力使自己的功力更上一层楼(也有可能一点提升也没有,否则就不用研究迁移学习啦)。从某意义上来说,微调应该是迁移学习中的一部分

转载自:

https://blog.csdn.net/Einstellung/article/details/80212312

https://blog.csdn.net/lonely_dark_horse/article/details/53896837

发布了103 篇原创文章 · 获赞 399 · 访问量 139万+

猜你喜欢

转载自blog.csdn.net/jdbc/article/details/82387832