多任务学习概述+Vision Transformer+多模态

MTL多任务: 

        多任务学习(MTL,multi-task learning)最早可以追溯到1997年的一篇文章,它描述的是一种学习范式——多个任务的数据一起来学习,学习的效果有可能要比每个任务单独学习的结果要好。本质上是利用多个任务的共享信息来提高在所有任务上的泛化性。多任务的核心优势在于通过不同任务的网络参数共享,实现1+1>2的提升。

为什么需要MTL?

        多任务学习能发挥任务之间的关系,同时学习多个模型。推荐领域应用广泛,以推荐视频为例,我们可能需要提升很多label,例如提升用户的点赞率、分享率等,在单任务学习中,预测用户点赞动作的模型和预测用户点击分享的模型是两个模型;而在多任务学习中,一个模型一次性就输出了这两个label的预测结果。 如现在大火的短视频,短视频APP在向你展示一个大长腿视频之前,通常既要预测你对这个视频感兴趣/不感兴趣,看多久,点赞/不点赞,转发/不转发等多个维度的信息。这么多任务既可以每个任务都搞一个模型来学,也可以一个模型多任务学习来一次全搞定的。

  1. 多任务学习不仅方便,还可能效果更好! 针对很多数据集比稀疏的任务,比如短视频转发,大部分人看了一个短视频是不会进行转发这个操作的,这么稀疏的行为,模型是很难学好的(过拟合问题严重),那我们把预测用户是否转发这个稀疏的事情和用户是否点击观看这个经常发生事情放在一起学,一定程度上会缓解模型的过拟合,提高了模型的泛化能力
  2. 多任务学习能提高泛化能力,从另一个角度来看,对于数据很少的新任务,也解决了所谓的“冷启动问题”。
  3. 多个任务放一起学的另一个好处: 数据增强,不同任务有不同的噪声,假设不同任务噪声趋向于不同的方向,放一起学习一定程度上会抵消部分噪声,使得学习效果更好,模型也能更鲁棒。 NLP和CV中经常通过数据增强的方式来提升单个模型效果,多任务学习通过引入不同任务的数据,自然而言有类似的效果。
  4. 任务互助,某些任务所需的参数可以被其他任务辅助训练的更好,比如任务A由于各种限制始终学不好W1,但是任务B却可以轻松将W1拟合到适合任务A所需的状态。 

当然另一种机器学习角度的理解:多任务学习通过提供某种先验假设(inductive knowledge)来提升模型效果,这种先验假设通过增加辅助任务(具体表现为增加一个loss)来提供,相比于L1正则更方便(L1正则的先验假设是:模型参数更少更好)

        对于有监督深度学习/机器学习而言,基本流程都是通过输入数据,模型根据输入数据来预测结果,训练阶段根据预测和监督信号之间的差异(loss)来修正模型的参数,让模型参数尽可能可能符合数据的分布。

单任务学习:一个loss,一个任务。

简单来说有多个目标函数loss同时学习的就算多任务学习。

多任务学习概述+Vision Transformer+多模态_第1张图片

好处是:

  1. 一次性学习多个任务:效率高,部署时占用内存小;
  2. (可能)比每个任务单独学习的效果更好:共享互补信息、彼此正则化,提高泛化性

多任务学习概述+Vision Transformer+多模态_第2张图片


与标准的单任务相比,在学习共享表示的同时训练多个任务(多任务学习)有两个主要挑战:

  • Loss Function  (how to balance tasks) : 多任务学习的损失函数,对每个任务的损失进行权重分配,在这个过程中,必须保证所有任务同等重要,而不能让简单任务主导整个训练过程。手动的设置权重是低效而且不是最优的,因此,自动的学习这些权重或者设计一个对所有权重具有鲁棒性的网络是十分必要和重要的。
  • Network Architecture(how to share):     一个高效的多任务网络结构,必须同时兼顾特征共享部分和任务特定部分,既需要学习任务间的泛化表示(避免过拟合),也需要学习每个任务独有的特征(避免欠拟合)。

多任务学习的构建原则:

  • 建模任务之间的相关性;
  • 同时对多个任务的模型参数进行联合学习,挖掘其中的共享

你可能感兴趣的:(科研Python相关,学习)