多任务学习之深度学习部分

  • 2021 年 4 月 6 日
  • AI

醉了,看了两篇写的乱起八糟的综述,在大佬的文章中找到一篇靠谱的,架构清晰的了。。。佛了,浪费这么多时间,算了。。当作扩充一下知识吧。。

终于看到一个比较清晰的结构图了。。。

下面是一些零散的知识点:

0、多任务学习的灵感以及和其它XX学习的关系

多任务学习比单任务学习能够更加准确地反映了人类的学习过程,因为跨领域集成知识是人类很自然而然的学习方式。当新生婴儿学会走路或使用手时,它会积累一般的运动技巧,这些技巧依赖于平衡的抽象概念和直观的物理原理。一旦掌握了这些运动技能和抽象概念,就可以在生活中将它们重复使用和扩充,以完成日后更复杂的任务,例如骑自行车或走钢丝。每当人们尝试学习新事物时,我们都会将大量的先验知识结合进来。难怪神经网络需要如此众多的训练样本和计算时间:每一项任务都是从头开始学习的。想象一下在不先学习走路的情况下尝试学习走钢丝!人类以很少的样本快速学习的能力取决于这种学习概念的过程,这些概念可在多种环境中推广并利用这些概念进行快速学习。我们认致力于模仿人类的这种学习过程的系统主要集中在

多任务学习以及元学习(multi task learning and meta learning)的相关领域(Hospedales等,2020),

迁移学习(transfer learning)(Zhuang等,2019)和

终身学习(life long learning).

然而,学习多个任务的确实带来了相对于只学习单个任务学习所没有的困难, 特别是在不同的任务有冲突的情况下。 在这种情况下,提高模型在一项任务上的性能会损害具有不同目标的其它的任务的性能,这种现象称为负迁移。 最小化负迁移是MTL方法的主要目标。 许多体系结构设计有特定的功能以减少负向迁移,例如特定于任务的特征空间和注意力机制,但是任务之间的信息划分是一条很好的路线:我们希望允许任务之间的信息流产生正向转移,并且 不鼓励分享会造成负面转移。 MTL研究中正在积极研究如何精确设计这种系统的问题。

1、multi task learning=joint learning,=learning to learn=learning with auxiliary tasks

同一个东西的不同说法;

2、看loss损失函数,有多个项就是多任务学习,特别的,L1或L2正则化也可以看作一种简单的多任务学习,这个任务的目标是尽量让参数小并且不同参数保持在大致相同的量纲里,小参数稳定;

3、为啥用多任务:

(1)方便,不用一个任务一个model,一个model做所有任务

(2)提升泛化能力,

多任务的loss是多个loss的求和,这个求和可以是加权的也可以是其它的方式(这涉及到多目标优化,多目标优化不仅局限于多任务学习中的多个loss的权衡,多任务学习中多个loss的设计往往依赖于多目标优化中的一些理论和方法,二者关系是这样的),这样看来和加入正则项的形式很类似:

你看这个loss,是不是很像一个双任务学习的问题的形式。

所以,多任务在多个任务之间相关的时候,可以提高模型的泛化能力,这个提高泛化能力的说法有很多,不过我觉得从L1和L2正则化的角度考虑更好理解,简单来说就是引入了一些先验知识,并且这个先验知识对于model训练来说效果很不错,比如l1正则化强制让model认为他的参数应该满足拉普拉斯分布(至于让参数满足拉普拉斯分布是不是真的对下游任务能产生积极的效果,暂时没看到什么严谨地推导结果),多任务也是通过在loss中增加其它的loss从而引入先验知识,至于怎么引入好的辅助任务,靠人的经验(比如后bert时代,预训练任务的各种组合,nsp+mlm,sop+mlm,这个我们完全可以自己灵活的定义,甚至可以mlm+sop+下游的文本分类、文本匹配任务等等);

5、关于为啥MTL能够提升泛化能力的问题

(1)、隐式/显式数据增强

对于A任务,某些数据样本可能是噪声,则A任务训练的时候这些噪声样本起不到什么作用,

这里用噪声来指代这类样本感觉有点偏颇,我觉得更好的说法是对任务loss的优化贡献度不高的样本更恰当一些。

比如lightgbm中的goss tree或者是focal loss,前者删除当前任务中的小梯度样本,更快更好更迅速的收敛,但是这些小梯度样本可能在B任务中就不是小梯度的,这种处理方式隐式得减少了训练样本的数量,

后者,focol loss会对贡献度不高的样本降权,当权重特别小的时候,对应的样本其实也等同于被删除了,但是对另外一个任务这种样本可能就比较重要了。

除此之外,我觉得也会有显式的数据增强,例如nsp和mlm任务,虽然使用的是同一个语料,但是这两个任务实际上需要分别对原始数据进行两次改造,一次改造是对原始数据进行mask处理来对应mlm任务需要的input的数据形式,一次改造是直接以句子为单位改造成正负样本对,所以其实类似于对input进行改造从而得到更多类型的input。这个我在实现nsp+mlm任务的时候发现有这个问题,一个样本最终要拆成两种样本形式进入model去train。

(2)、帮模型注意更重要的特征

如果一个任务非常困难或数据有限,同时数据高维太高,那么一个模型可能很难区分相关的特征和不相关的特征。MTL可以帮助模型将注意力集中在那些实际上很重要的特征上,因为其他任务将为这些特征的相关性或不相关性提供额外的证据(这建立在多个任务对应的最好的特征大致相同的前提下)。

(3)、Eavesdropping

这个词翻译过来叫窃听。。感觉怪怪的。某些特征在A任务上难以学习,可能A对标的loss无法有效地利用这种特征,但在另一个任务B上就很好学习,任务B可以更好地把这些特征represent出来,举个不严谨地例子,比如组队打比赛,我对nlp熟悉,另一个队友对graph熟悉,那么他把GNN的model做好了提供一个输出的api,我直接用这个GNn的网络结构拼上nlp的一些网络结构一起输出来更好地完成任务

(4)、更大的假设空间

比如说对任务A来说,nn的适合的参数解可能就在某个固定的高维空间中的一块超立方体里,对于任务B来说,可能在另外一个立方体里,MTL迫使model在更大的不同的超立方体里寻找最合适的参数解,这样未来的新任务可能可以更好的让model去学习,前提是这个新任务的合适的参数解也在这么多超立方体构成的空间里。

(5)、正则化

前面说过了,不赘述。


深度学习中的两种基本的multi task learning的实现

MTL的现有方法通常分为两类:硬参数共享与软参数共享。硬参数共享是在多个任务之间共享模型权重的实践,以便训练每个权重以共同最小化多个损失函数。在软参数共享下,不同任务具有权重不同的特定于任务的单独模型,但是将不同任务的模型参数之间的距离添加到联合目标函数中。尽管没有显式的参数共享,但是激励特定任务模型具有相似的参数。

这是早期的一个简单清晰的分类方法,

如下

hard parameter share,这种最好实现,我们在输出的时候加多个任务层就行,torch写起来非常的方便快捷easy。

soft parameter sharing

这种实现起来也不复杂,不过会麻烦一点,首先根据n个不同任务独立构建n个结构相同的网络,然后对网络的参数进行限制,希望这些参数接近,这个时候,让参数接近的问题就变成了一个计算distance的问题,我们可以计算不同子网络的相同层之间的欧几里得距离,把这个距离作为损失函数放到loss里,比如cosineloss就是一种很经典的通过nn实现metric learning的例子,除此之外还有trace的方法,没了解过,先放着。

但是在过去的几年中,多任务方法的性质变得极为多样化,我们认为仅这两个类别还不够广泛,无法准确地描述整个领域。相反,我们扩大了此二分法的成员范围,以涵盖更多领域。我们将硬参数共享方法的类别概括为多任务体系结构,而软参数共享则扩展为多任务优化。结合使用时,体系结构设计和优化技术可提供近乎完整的描述目前的多任务学习领域的体系结构。但是,领域内仍然存在一个重要的方向:任务关系学习。任务关系标记(或TRL)方法专注于学习任务之间关系的显式表示形式,例如任务嵌入或transfer learning affinities,而这些类型的方法不太适合架构设计或优化。

最终,从广义上讲,这三个方向-多任务网络结构设计,多目标优化和多任务间的关系学习-构成了现代深度多任务学习的现有方法。考虑到多目标优化本身比较独立,这里主要介绍多任务网络结构设计和多任务间的关系学习,多目标优化部分独立再整一篇。

多任务网络结构设计

MTL(多任务学习)的文献中有很大一部分致力于多任务神经网络体系结构的设计。创建共享体系结构时,有许多不同的因素需要考虑,例如哪些参数共享哪些不共享,共享层和不共享层的输出如何融合等等。当考虑针对特定问题领域的体系结构时,会出现更多变化,例如如何将卷积滤波器划分为一组视觉任务的共享组和特定于任务的组。 MTL的许多提议体系结构在任务之间共享信息的程度方面起到了平衡的作用:

共享过多会导致负效应,并且与每个任务的单个模型相比,联合多任务模型的性能可能更差,而共享太少就不允许模型之间有效利用任务之间的信息。 MTL的最佳性能体系结构是平衡良好共享的体系结构

我们将MTL体系结构分为四类:

1 特定任务域的体系结构,对于单域架构,我们考虑计算机视觉,自然语言处理和强化学习领域。

2 多模态体系结构 多模态体系结构以多种模式处理输入任务,例如使用计算机视觉结合自然语言处理进行视觉问答。应该注意的是,我们仅考虑处理多个任务的多模态体系结构(除此之外还有多模态单任务的体系结构(多模态也是一个很大的研究领域。。醉了算了还是先把当下的掌握好),比如下文的多源异构网络的图就是一个典型的例子)。多模态的多任务学习结构应该是最好辨认的

3 学习型体系结构,多任务架构搜索之类

4 条件型体系结构,在条件体系架构中,用于给定数据段的架构取决于数据本身

下面按照不同领域进行了详细的多任务学习的进展的介绍,第一个章节介绍了CV领域的多任务学习的发展,暂时跳过,以后 有机会研究cv再说,直接看nlp的发展部分比较熟悉一些看的有体会。

自然语言处理自然很适合MTL,因为存在大量相关问题,人们可以询问给定的一段文本以及与任务无关的表示形式,而现代NLP技术中经常使用这种形式。近年来,用于NLP的神经体系结构已经历了阶段性发展,传统的前馈体系已发展成为递归模型,而递归模型则通过基于注意力的体系结构来实现。这些网络基本layer的发展同时也反映了这些用于MTL的NLP体系结构的应用的发展。

xx注意,许多NLP技术可以视为多任务,因为它们构建了与任务无关的通用表示形式(例如单词嵌入),并且在这种解释下,对多任务NLP的讨论将包括大量众所周知的一般NLP技术。在这里,出于实用性考虑,我们将讨论限制在大多数情况下,包括同时显式学习多个任务的技术,以同时执行这些任务为最终目标。

首先是


特定任务域的体系结构特定任务域的体系结构特定任务域的体系结构特定任务域的体系结构特定任务域的体系结构特定任务域的体系结构特定任务域的体系结构

1、共享embedding层

这些架构中的许多架构在结构上与早期的计算机视觉共享架构相似:共享的全局特征提取器,然后是特定于任务的输出分支。 但是,在这种情况下,共享层是embedding层。

这种架构方式的网络结构的其余部分是特定于任务的,包括卷积,max over time,完全连接层以及softmax输出。这项开创性的工作(Collobert等,2011)是受MTL的一般原则推动的:跨任务共享的表示形式可以更好地进行泛化,这种方式属于典型的 特定任务域的体系结构

2、共享seq2seq

用于NLP的现代递归神经网络的引入,产生了多任务NLP的新模型家族,并引入了新颖的递归架构(Luong等人,2015; Liu等人,2016a,b; Dong等人,2015 )。序列到序列学习(seq2seq)(Sutskever et al。,2014)被改编为(Luong et al。,2015)中的多任务学习。在这项工作中,作者探索了用于多任务seq2seq模型的参数共享方案的三种变体,他们将它们命名为一对多,多对一和多对多。在一对多的情况下,编码器在所有任务中都是共享的,而解码器则是特定于任务的这对于处理需要不同格式输出的任务集很有用,例如将一段文本翻译成多种目标语言。在多对一中,编码器是特定于任务的,而解码器是共享的。这是对常规参数共享方案的颠倒,在常规方案中,较早的层被共享并馈送到特定于任务的分支中。当任务集需要以相同格式输出时(例如,图像字幕和将机器翻译成相同的目标语言),可以使用多对一变体。最后,作者探索了多对多变体,其中有多个共享的或特定于任务的编码器和解码器。他们使用这种变体,例如,使用英语和德语编码器和解码器共同训练英语到德语和德语到英语翻译系统。英文编码器也输入到英文解码器中,以执行自动编码器重构任务,德语编码器也是如此。在(Dong et al。,2015)中提出了与机器翻译的序列架构相似的序列,重点是训练多任务网络将一种源语言翻译成多种目标语言。上述的seq2seq中的encoder和decoder的共享也是属于 特定任务域的体系结构

(Liu et al。,2016a)还探索了递归多任务架构的几种变体,重点是允许任务之间信息流动的不同机制。作者探索了三种参数共享方案:统一层,耦合层和共享层体系结构,如图7所示。这种看起来属于学习型体系结构(学习型体系结构在体系结构学习的各个步骤之间是固定的,因此对来自同一任务的每个输入执行相同的计算

第一种方法,统一层的参数共享:

在统一层共享体系结构中,每个任务都有其自己的嵌入层,并且所有任务共享一个LSTM层。

这种不是embedding共享,而是LSTM进行共享,和上面提到的seq2seq中的encoder或decoder共享的机制类似。

第二种方法,耦合层模型的共享:

对于耦合层模型,每个任务都有自己的单独LSTM层,但是每个任务都可以从其他任务的LSTM层读取信息。更具体地说,修改给定任务在时间步t的LSTM的存储内容,以包括每个任务在时间步t 的LSTM层的隐藏状态的加权总和,同时保留LSTM的所有其他组件。

第三种方法:共享层的共享

最后,共享层体系结构为每个任务分配一个单独的LSTM层,以及一个馈送给特定于任务的LSTM的共享双向LSTM层。

简单来看,embedding层不共享,中间的复杂模型层进行不同程度的共享。

信息级联

到目前为止,在我们讨论的所有NLP体系结构中,与每个任务相对应的子体系结构都是对称的。特别是,每个任务的输出分支出现在每个任务的最大网络深度处。一些工作(Søgaard和Goldberg,2016年; Hashimoto等人,2016年; Sanh等人,2019年)建议在较早的层上直接对接任务层,以便这些低级任务学习到的feature可以被较高级别的任务使用。通过这样做,我们形成了一个明确的任务层次结构,并为一个任务中的信息提供了直接的方法,以帮助另一任务的解决方案,我们将此迭代迭代和特征组合的模板称为级联信息,如图所示。

(Søgaard和Goldberg,2016年)通过选择POS标记作为底层任务来给语法分块任务和CCG超级标记任务层输送有价值的represent,从而形成了这种层次结构。他们的网络体系结构由一系列双向RNN层组成,对于每个任务i,都有一个相关的层“ i”,任务i的任务特定分类器从该层中派生。在这种情况下,用于POS标记的关联层比语法分块和CCG超级标记的关联层在网络中出现得更早,因此,学习到的POS feature可以用于语法分块和CCG超级标记的任务。在(Søgaard和Goldberg,2016)发表后不久(Hashimoto et al。,2016)通过构建具有5个任务的类似监督架构,在几种语言任务上实现了SOTA的结果合:POS标记,分块,依赖项解析,语义相关性和文本含义。作者还用双向LSTM单元替换了双向RNN单元(Søgaard和Goldberg,2016年)。图8显示了它们的体系结构。

除了增加任务数量之外,此方法还引入了一个正则项,以避免训练任务之间的干扰。每次采样任务的数据集进行训练时,更新前参数与当前模型参数之间的平方欧几里得距离就会添加到损失函数中。这鼓励网络参数不要偏离参数配置,该参数配置是通过训练上一个时期的不同任务来学习的。

在这两部著作发表之后(Sanh等人,2019),我们针对不同的任务集引入了类似启发的模型,从而实现了命名实体识别,实体提及检测和关系提取的SOTA结果。按照从低到高的顺序,这项工作中的任务层次是NER,EMD和coreference resolution/relation extraction(均排在最高级别)。

对抗特征分离

在对抗性方法的一种新颖应用中,(Liu等人,2017)引入了一种用于多任务学习的对抗性学习框架,以将学习到的特征提炼成特定于任务和与任务无关的子空间。它们的体系结构由一个共享的LSTM层和每个任务对应的一个特定于任务的LSTM层组成。一旦来自任务的输入语句通过共享的LSTM层和特定于任务的LSTM层,则将两个输出连接起来,并用作执行推理的最终特征。但是,由共享LSTM层产生的representation也将被馈送到任务鉴别器中。任务层是一个简单的线性变换层,后跟一个softmax层,该层经过训练可以预测原始输入语句来自哪个任务。然后,对共享LSTM层进行训练,以共同最小化任务损失和鉴别符损失,从而使共享LSTM产生的功能不包含任何特定于任务的信息。此外,鼓励使用共享特征和特定于任务的特征对结果特征使用正交性惩罚(类似于(Ruder等人,2019))对单独的信息进行编码。更具体地说,正交性损失定义为特定任务特征和共享特征的乘积的平方Frobenius范数。为了鼓励特定于任务的和共享的特征相互正交,此损失被添加到总体训练目标中。这两个辅助损失迫使共享网络中的特定于任务的信息和与不可知任务的信息分离。(没有图,看不出来)

BERT for MTL

文中就提到了MTDNN,

//zhuanlan.zhihu.com/p/48612853zhuanlan.zhihu.com图标

关于MTDNN的介绍可见这篇。


多模态体系结构多模态体系结构多模态体系结构多模态体系结构多模态体系结构多模态体系结构多模态体系结构多模态体系结构多模态体系结构多模态体系结构

Multi-Modal Architectures

前面我们讨论了专门设计用于在一个特定任务域中处理数据的多任务体系结构。在这里,我们描述了使用来自多个域的数据(通常是视觉和语言数据的某种组合)来处理多个任务的体系结构。多模态学习是多任务学习的有趣扩展:跨域共享表示可减少过拟合并提高数据效率。在多任务单模态情况下,represent是跨任务共享的,但是,在多任务多模态的情况下,represent是跨任务和跨模态共享的,从而提供了另一个抽象层,通过该抽象层,必须对学习的represent进行概括。这表明,多任务多模式学习可能会增加多任务学习已经展现出的收益

(Nguyen和Okatani,2019年)通过使用密集的共同注意层(Nguyen和Okatani,2018年)介绍了用于共享视觉和语言任务的体系结构(Nguyen和Okatani,2018年),其中将任务组织为层次结构,并在早期的层中监督低级任务网络(意思是低级任务网络直接上任务层完成任务)。开发了密集的共同注意层,用于视觉问题解答,特别是用于视觉和语言信息的集成。任务监督的这种设置类似于上文中讨论的级联信息体系结构。但是,此方法不是手动设计任务的层次结构,而是执行在每个任务的层上搜索以了解任务层次。 (Akhtar et al。,2019)的体系结构使用双向GRU层以及成对注意机制为每对模式提供学习,从而处理视觉,音频和文本输入以对人类说话者的视频中的情感和情感进行分类包含所有输入模式的共享表示。

两者(Nguyen和Okatani,2019年; Akhtar等人,2019年)都专注于一组任务,这些任务都共享相同的固定模式集。相反,(Kaiser等人,2017)和(Pramanik等人,2019)专注于构建“通用多模态多任务模型”,其中单个模型可以处理具有不同输入域的多个任务。引入(Kaiser等,2017)的系统由输入编码器,I / O混合器和自回归解码器组成,这三个模块分别由卷积,关注层和稀疏混合的混合组成,作者还证明了任务之间的高度共享可以显着提高训练数据有限的任务的性能。而不是汇总来自各种深度学习模式的机制,(Pramanik et al。,2019)引入了一种架构称为OmniNet,它具有时空缓存机制,可以学习数据在空间和时间维度上的依存关系,如图12所示。每个输入模态都有一个对应的“外围”网络,这些网络的输出网络被汇总并馈入中央神经处理器,其输出被馈送到特定于任务的输出头。 CNP具有带有空间缓存和时间缓存的编码器-解码器体系结构。 OmniNet在POS标记,图像标题,视觉问题解答和视频活动识别方面达到了SOTA竞争性能。

最近,(Lu等人,2020年)引入了一种多任务模型,该模型可以同时处理12个不同的数据集,恰当地命名为12合1。。。。他们的模型在这些任务中的12个中有11个在性能上优于相应的单任务模型,并且使用多任务训练作为预训练步骤可以在其中7个任务上实现SOTA性能。该架构基于ViLBERT模型(Lu等人,2020),并使用诸如动态任务调度,课程学习和超参数启发式等多种方法进行了训练。

(多模态目前感觉发展势头很猛啊。。可以,是个很不错很有意思的方向)


Learned Architectures(自动多任务框架学习)Learned Architectures(自动多任务框架学习)Learned Architectures(自动多任务框架学习)Learned Architectures(自动多任务框架学习)Learned Architectures(自动多任务框架学习)Learned Architectures(自动多任务框架学习)

正如我们在前面的部分中已经看到的那样,共享体系结构的设计已经有了很多发展,以强调多任务学习的优点,同时减轻缺点。用于多任务学习的体系结构设计的另一种方法是学习体系结构以及所得模型的权重。以下许多用于学习共享体系结构的方法允许模型学习如何在任务之间共享参数。使用可变的参数共享方案,模型可以以类似的任务比不相关的任务具有更高的共享度的方式移动任务之间的重叠。这是减轻任务之间负效应的一种潜在方法:如果两个任务呈现负向转移,则模型可以学习将这些任务的参数分开。更进一步,可能情况是两个任务在网络的某些部分呈现出正向转移,而在其他部分呈现出负向转移。在这种情况下,手动设计参数共享方案以适应网络不同部分的各种任务相似性变得不可行,尤其是随着任务数量和网络规模的增长。经验丰富的参数共享提供了一种方法,可以促进任务之间的自适应共享,其精确度对于手工设计的共享体系结构来说是不现实的。

我们将自动多任务框架学习的体系结构的方法大致分为四类:

体系结构搜索,

分支共享,

模块共享,

细粒度共享。

这些分类之间的界限不是具体的,而且常常模糊不清,但是我们认为这是一种有用的方法,可以广泛地代表最近开发的方法中的模式。

体系结构搜索,

Wong和Gesmundo,2017年; Liang等人,2018年; Gao等人,2020年中的每一个都介绍了一种用于多任务架构搜索的方法,但是方法却完全不同。 (Wong and Gesmundo,2017)引入了多任务神经模型搜索(MNMS)控制器。此方法不涉及在所有任务之间共享的单个网络。取而代之的是,在所有任务上同时训练MNMS控制器,以为每个任务生成一个单独的体系结构。该方法是(Zoph和Le,2016)的扩展,其中RNN控制器迭代地选择架构设计,并通过强化学习进行训练,以最大程度地提高最终网络的预期性能。在多任务变体中,RNN还使用任务嵌入(与MNMS控制器一起学习),以根据任务的性质来决定体系结构设计的选择。

另一方面,(Liang等人,2018)介绍了多任务神经体系结构搜索算法的几种变体,该算法使用进化策略来学习神经网络模块,这些神经网络模块可以针对各种任务进行不同的重新排序。该方法是(Meyerson和Miikkulainen,2017)中引入的软层排序的扩展(在2.3.2节中进行了讨论)。就像(Meyerson and Miikkulainen,2017)中一样,(Liang et al。,2018)的方法涉及一起学习神经网络模块及其对各种任务的排序。在体系结构搜索扩展中,将学习模块的体系结构以及针对单个任务的路由。该算法最复杂的变种称为模块和任务路由的协同进化(CMTR),其中CoDeepNEAT算法(Miikkulainen等人,2019)用于在外部循环中演化共享组模块的体系结构,这些模块的任务特定路由在一个内部循环中演化。

最近,(Gao等人,2020年)提出了MTL-NAS作为MTL中基于梯度的体系结构搜索的一种方法。搜索空间中的所有体系结构均由一组固定体系结构的单任务主干网络组成,每个任务骨干网一个,并且搜索过程在这些单任务网络的不同层之间的特征融合操作上进行操作。特征融合操作由NDDR(来自NDDR-CNN(Gao等人,2019),参见2.1.2节)进行参数化,本质上是作用于来自不同任务的特征图串联的1 1卷积。此方法还为融合操作的权重引入了最小熵目标,从而使搜索过程在体系结构搜索阶段收敛到离散体系结构,从而减少了对离散化体系结构组合的需求,就像在其他NAS工作中一样(Liu et al。,2018)并缩小了学习的软架构和最终离散化版本之间的性能差距。在NYU-v2(Silberman et al。,2012)和Taskonomy(Zamir et al。,2018)数据集上,最终学习的体系结构表现出优于常见的多任务基准。

分支共享方法是在任务之间共享参数的粗粒度方法。一旦两个任务的计算图不同,它们就永远不会重新结合(见图13)。

(Lu et al。,2017)是多任务深度学习中分支共享方法的最早方法之一。这个想法是从一个网络开始的,该网络在所有任务之间共享,直到特定于任务的输出头为止,然后从最靠近输出头的那一层开始,逐层迭代地分离任务之间的参数,并移动到较早的层。此过程的示意图如图13所示。当共享层拆分为多个特定于任务的层时,将基于成对任务亲缘关系的估计来对任务进行聚类。这些任务亲和力是根据以下原理计算的:如果对于每个任务对应的模型,相同的输入数据同样容易/困难,则两个任务很可能相关。

最近,(Vandenhende et al。,2019)提出了一种类似的方法,但具有不同的任务分组标准。代替并发样本难度,此算法使用表示相似度分析(RSA)(Kriegeskorte,2008)作为任务相似度的度量。 RSA建立在以下原则上:相似的任务将依赖于输入的相似特征,因此将学习相似的特征表示。这些方法之间的另一个重要区别是(Vandenhende et al。,2019)全局计算分支结构,而不是逐层贪婪地计算分支结构。但是,对所有分支结构的搜索在计算上是昂贵的,因此作者采用beam search策略来根据网络不同部分中任务之间的表示相似性来计算分支结构。本文包括两种方法的直接比较,并且基于RSA的变体被证明是更好的。在某些方法中还使用RSA来学习明确的任务关系,这在第4节中进行了讨论。

模块共享代表了一种更细粒度的方法,其中在任务之间共享一组神经网络模块,其中每个任务的体系结构是由一些或所有模块的任务特定组合构成的,如图16所示。

我们知道的最早在多任务学习中进行模块化参数共享的工作是PathNet(Fernando等人,2017)。

尽管不同的任务在较大的模型中具有不同的计算路径,但PathNet模型是一个用于多个任务的大型神经网络。如图14所示。每个任务的途径都是通过锦标赛选择遗传算法学习的,其中许多不同的候选途径竞争并朝着更大网络的最佳子网络发展。尽管这种想法通常是笼统的,并且可以应用于各种环境,例如多任务学习和元学习,但是作者将这种模型部署为具有两个强化学习任务的连续学习。在第一项任务的训练中获得的权重在第二项任务的训练期间被固定,在此期间,通过网络的新途径得以发展以完成手头的任务。

软层排序(Soft Layer Ordering)(Meyerson和Miikkulainen,2017年)和模块化元学习(Alet等人,2018年)是模块化MTL的两个并行工作,相似但有重要区别。这些方法中的每一种都学习一组共享的神经网络模块,这些神经网络模块以不同的方式组合用于不同的任务,希望如果在不同任务网络中的各种情况下使用网络“构建块”,它们将学习普遍适用的知识。软层排序通过计算网络每个层上每个模块的输出的凸组合来对任务网络进行参数化,如图15所示。

通过此参数化,每个学习到的模块都可以对网络中的每个深度级别做出贡献。模块化元学习在模块上学习计算图,这意味着计算的每个步骤都是少量模​​块的离散组成,而不是所有模块的软组合。这些方法导致了不同的优化策略,即可以使用梯度的来优化“soft layer order”体系结构中的计算图。网络模块具有共同的意义,因为模块的组成是可区分的操作。相比之下,“模块化元学习”中的计算图是离散结构,因此不能使用基于梯度的优化方法来学习每个任务的模块上的图。相反,作者采用模拟退火(一种黑盒优化方法)来学习计算图。虽然此两级优化会产生计算成本,但计算图的离散性质提供了在生成的模型中产生归纳偏差的能力,而层间的软共享则不会表现出这种偏差。这些方法代表了许多其他方法已采用的广泛通用模板的两种实现:学习单个网络部分,并学习如何将它们组合在一起。

最细粒度的参数共享

最后,最细粒度的参数共享方法就是我们所谓的细粒度共享,其中共享决策发生在参数级别而不是层级别,如图17所示。

细粒度参数共享方案是最近引入的MTL体系结构类型,与在层或多层级别共享相比,它们允许任务之间的信息流更灵活。 Piggyback(Mallya et al。,2018)是一种通过学习掩盖原始网络的各个权重来使预训练网络适应相关任务的方法。这允许存储新训练的模型,而在保留原始网络功能的同时,每个原始模型参数的存储成本仅为一个额外的位。尽管网络输出相对于这些网络掩码不可区分,但是通过使用掩码值的连续松弛作为二进制掩码值的噪声估计,通过梯度下降与网络权重一起优化了这些网络掩码。在二进制化神经网络的先前工作中,证明了这种优化掩码值的方法是合理的(Courbariaux等人,2015)。

(Newell等人,2019)和(Bragman等人,2019)分别提出了两个新的思路,它们各自为多任务CNN提出了一种参数共享方案,其中共享发生在卷积核级别。对于多任务网络的每个卷积层,(Newell等人,2019)的方法学习一个二进制值的NC数组M,其中N是任务数,C是给定层中的特征通道数网络。 M的第(i; c)个元素表示第i个任务的模型是否应在考虑的层中包括第c个特征图。与其使用Gumbel-Softmax(Jang et al。,2016)分布优化此二进制值数组,作者并没有直接学习这些值。相反,该方法学习大小为N N的实值矩阵P,其值在[0; 1],其中P的第(i; j)个元素表示特征通道的比例,该特征通道由任务i和任务j的模型共享。以这种方式,直接学习任务之间的关系,并且在计算每个新的P值之后,对满足P = C1 MT M的数组M进行采样。使用M进行此参数化后,就不会直接学习网络体系结构,而是对其进行采样,以使学习到的任务相似度矩阵以指示任务参数之间的重叠量。该任务相似度矩阵P是通过演化策略学习的。 (Bragman et al。,2019)提出了随机滤波器组(SFG),其中通过变分推理学习将卷积滤波器分配给特定任务或共享任务。更具体地说,通过学习卷积过滤器可能分配给特定任务或共享角色的后验分布来训练SFG。据我们所知,SFG是多任务体系结构学习的唯一概率方法。

Sun等人(2019a)引入了一种算法,该算法可通过提取单个完全共享模型的稀疏子网络来学习细粒度参数共享方案。作者从一个随机初始化的,超参数化的网络中采用迭代幅度修剪(IMP)(Frankle and Carbin,2018),从较大的网络中为每个单独的任务提取一个稀疏的子网络。 IMP通过训练少量的时间段来修剪网络,然后删除幅度最小的权重,直到达到所需的稀疏度。给定合理的稀疏度,为每个任务提取的子网将重叠,并且在任务之间表现出细粒度的参数共享。图17中显示了一个图表。

重要的是要注意,两个任务的提取子网之间的重叠程度不一定与这两个任务的相关性相关,这表明需要一种细粒度的参数共享方案,该方案必须合并任务相关信息以构建任务之间的适当共享机制。

2.5 Conditional Architectures

条件或自适应计算(Bengio et al。,2013)是一种方法,其中根据网络的输入来选择要执行的部分神经网络体系结构。 在多任务学习之外的许多领域都使用了条件计算,例如降低模型计算成本和分层强化学习(Kulkarni等人,2016)。 在多任务情况下,条件架构在输入之间以及任务之间是动态的,

尽管这些动态实例化的体系结构的组件是共享的,但鼓励这些组件在各种输入和任务之间进行通用化。

神经模块网络(Andreas et al。,2016)是条件计算的早期工作,专门为视觉问题回答而设计。该方法利用自然语言中问题的组成结构来训练和部署专门针对问题各个部分的模块。给定问题的结构由非神经语义解析器(特别是斯坦福解析器)确定(Klein和Manning,2003年)。解析器的输出用于确定问题的组成部分以及它们之间的关系,相应的神经模块用于为给定问题动态实例化模型。此过程如图18所示。

尽管这项工作为将来的条件计算方法铺平了道路,但从某种意义上讲,它是无法理解的,其构成是无法学习的。因此,每个模块和模块组合的作用是固定的,无法提高。

路由网络(Rosenbaum等人,2017)和组合递归学习器(CRL)(Chang等人,2018)是条件计算的最新相关工作,其中除模块权重外,还学习了模块他们自己的组成。路由网络由路由器和一组神经网络模块组成。给定一条输入数据后,路由器会从网络模块集合中迭代选择一个模块,以将其应用于固定的迭代次数。此过程如图19所示。

路由器还可以选择“通过”操作而不是模块,而只是继续进行下一个路由迭代,可以直接通过反向传播来学习模块权重,并且可以通过以下方法学习路由器权重:强化学习以最大程度地提高动态实例化网络在其输入上的性能。(Chang等人,2018)的《 Compositional Recursive Learner》类似,但有一些关键区别。给定一个输入数据,CRL也会迭代选择一个网络模块中固定的一组模块(通过这些模块来路由输入),对于CRL,有意将任何特定于任务的信息(例如任务ID)从网络模块中隐藏起来,以确保模块学习与任务无关的信息CRL还通过在课程上进行强化学习来进行培训,以鼓励重用在较简单的问题上学习的模块。

(Ahn et al。,2019)引入了一种非常相似的架构,其中从较大的骨干网中选择配置和规模各异的层来路由输入。再次对路由器(在此变体中称为选择器网络)进行强化学习训练。

(Kirsch et al。,2018)的架构同样受到路由网络和CRL的启发,但采用的是本地路由而不是全局视图。在“路由网络”和“ CRL”中,任何网络模块都可以放在任何深度的实例化网络中。相反,(Kirsch et al。,2018)提出了一种条件架构,其中仅在网络层内做出路由决策。该体系结构由一系列模块化层组成,每个层都有m个网络模块。当将一层应用于输入时,输入将通过控制器,该控制器从属于该层的m个模块的集合中选择k个模块。然后单独输入图层输入

通过选择的k个模块中的每个模块,将结果相加或连接起来以形成该层的输出。这些模块化层中的控制器不是通过强化学习而是通过变式方法来训练的,其中模块的选择被视为潜在变量。作者认为,与过去在条件计算上的工作相比,他们的模型在体系结构上的差异减少了模块崩溃的发生,而模块崩溃是众所周知的条件模型的弱点。发生模块崩溃时,路由器仅从可用集中选择少量模块,而其余模块大部分仍未使用,因此生成的模型没有模块化。

最近,软模块化(Yang等,2020)是另一种条件方法,可以看作是路由网络的软松弛。软模块化使用由L层组成的路由器网络和策略网络,每个L层具有m个模块。代替路由网络那样在每个计算步骤上做出离散决策并选择一个模块,每个模块的输入是前一层模块输出的线性组合。具体而言,路由器网络将观察值和相应的任务索引作为输入,并输出第一层之后每一层的线性组合权重的mm矩阵,以便权重的第i行和第j列中的元素层`的矩阵表示从层`到模块j的输入中来自层`1的模块i的权重。路由网络的软放松消除了对路由器与策略分开进行训练的需要,而整个网络可以端到端地进行训练。该体系结构还与软层排序有关(Meyerson和Miikkulainen,2017年)(请参见2.3.2节),尽管使用软模块化不会直接学习线性组合权重,而是由一个单独的网络(路由器)动态计算得出的网络)。当与Soft Actor-Critic(Haarnoja等人,2018)结合使用时,根据Meta-World基准测试,Soft Modularization代理在MT50上的成功率达到60%(Yu等人,2019)。

可以在(Rosenbaum et al。,2019)和(Ramachandran and Le,2019)中找到基于路由的方法的优缺点的详尽讨论。


接下来是关于多目标优化的部分,这部分和我目前做的事情比较相关,所以打算单独开篇详细地研究一下,多任务深度学习部分了解个大概就好了


Task Relationship Learning

现在,我们已经讨论了MTL体系结构和优化方法,从而完成了由硬参数共享和软参数共享指定的流行二分法的更广泛的类比。但是,这两种方法的鲜为人知的第三个方向是:任务关系学习。任务关系学习(或TRL)是一种单独的方法,既不适合架构设计也不适合优化,而是专门针对MTL的多任务的关系学习。 TRL的目标是学习任务或任务之间关系的显式表示形式,例如通过相似性将任务分为几类,并利用学习到的任务关系来改善对手头任务的学习

在本节中,我们讨论TRL中的三个研究方向。第一个是对任务进行分组,其中的目标是将一组任务划分为多个组,以便在组中同时进行任务训练是有益的。第二种是学习转移关系,其中包括尝试分析和理解将知识从一项任务转移到另一项任务对学习有益的方法。最后,我们讨论了任务嵌入方法,该方法学习了任务本身的嵌入空间

分组任务

作为对负迁移的一种解决方案,许多MTL方法旨在自适应地在相关任务之间共享信息,并从可能会损害彼此学习的任务中分离信息。此处使用任务分组作为替代解决方案如果两个任务表现出负迁移,则只需将其学习从一开始就分开即可。但是,这样做需要花费大量的时间才能在训练网络中针对各种任务集共同进行反复试验,并且目前很少有方法能够准确地确定任务组的联合学习动态,而无需进行这种蛮力的反复试验。 。

Alons and Plank,2016)和(Bingel andSøgaard,2017)这两篇论文都是经验研究,分析了MTL中各种任务组对自然语言处理的有效性,重点是选择一个或两个辅助任务(例如POS标记,语法分块和单词计数)以帮助在主语言上学习通过在任务的许多组合上训练多任务网络来完成任务(例如,命名实体识别和语义框架检测)。在这些研究中,为每个单独的主要任务训练了一个单任务网络,并将其性能与结合一个或两个辅助任务在主要任务上训练的多任务网络的性能进行了比较

(Alonso and Plank,2016)训练了1440个任务组合,每个任务组合都有一个主任务和一个或两个辅助任务,发现使用标签具有高熵和低峰度的辅助任务,主要任务的性能提升最大。这与(Bingel andSøgaard,2017)的发现是一致的,在该发现中训练了90对任务(一个主要任务,一个辅助任务)。使用这些训练运行的结果作为数据,此工作将训练逻辑对数回归模型,以基于数据集和两个任务的学习曲线的特征来预测辅助任务是对主要任务的性能有帮助还是有损。他们还发现,辅助标签分布的熵与主要任务的改善高度相关,尽管与主要任务改善最相关的特征是自行训练时主要任务学习曲线的梯度。具体来说,如果任务的学习曲线(在单任务设置中进行训练时)在训练的前20%到30%期间开始趋于平稳,则在训练中包含辅助任务可能会改善主要任务的性能。作者推测这可能是因为其学习曲线具有早期平稳期的主要任务很可能卡在了非最佳局部最小值中,而包含辅助任务则有助于优化过程逃脱该最小值。他们的发现令人惊讶的是,当包括辅助任务时,未发现主任务数据集和辅助任务数据集大小的差异指示了主任务性能的提高。尽管这些研究不能像对待MTL一样对待所有任务,但他们发现暗示任务之间积极转移的条件足够普遍,以至于它们在多任务设置中很有用。

在(Doersch and Zisserman,2017)中进行了计算机视觉任务联合训练的实证研究,重点是自监督的任务,即相对位置回归,着色,运动分割和示例匹配。这项研究不是很深入,因为它不是本文的唯一重点,但是作者得出了一个有趣的结论,即与单任务基准相比,多任务训练始终可以提高性能。考虑到MTL通常无法完成单任务训练,因此这一事实非常令人惊讶。持续的改进可能是由于任务之间的关系或其自我监督的标签的性质,但这些答案中的任何一个都不确定。

与这些用于分析多任务任务关系的实证研究相邻的是一种有原则的方法,该方法可以在训练过程中在线学习这些关系,而无需进行反复试验的任务分组,称为选择性共享(Strezoski等人,2019b)。选择性共享使用共享的主干体系结构来处理多个任务,并根据整个训练过程中梯度向量的相似性将任务分为几组。聚类的原因是特定于任务的分支都使用相同的参数初始化,因此任务梯度之间的相似性表示任务的相似性。在整个训练过程中更新任务群集时,网络的任务分支将合并,以便将群集在一起的任务共享参数,并且此过程将继续进行,直到群集停止更改为止。与确定大型任务组的大型实证研究相比,降低计算成本具有明显的好处,该方法还利用学习到的任务特征来了解任务之间的关系,这是TRL的一种功能强大且价格便宜的方法,在(Kriegeskorte (2008年; Song等人,2019年)(请参见第4.2节以进行进一步讨论)。但是,应该指出的是,他们的模型基于一个假设,该假设在训练过程中会越来越分解。当跨任务的参数仍然相对相似时,梯度向量可以在训练开始时指示任务的相似性。但是,随着训练的继续和模型参数的进一步分离,任务梯度之间的相似性变得越来越无法代表任务之间的相似性,并且该信号将演变为噪声,具有足够非凸的损耗态势。尽管如此,该方法仍凭经验显示对通过适当配置计算任务关系有效。

最近,(Standley等,2019)对Taskonomy数据集进行的任务分组进行了深入的实证研究(Zamir等,2018),以及将一组任务划分为多个簇的方法,每个簇之间表现出正向转移他们各自的任务。这样的任务划分如图24所示。

使用具有不同数量的训练数据和网络规模的四个不同的训练设置来训练五个任务组中的每对任务,作者发现了一些有趣的趋势。首先,关于多任务训练是否在单任务基线上得到改善的结果好坏参半,许多多任务网络的性能都比单任务相对好。接下来,从单任务到多任务训练的性能增益随训练设置的不同而有很大差异,这意味着MTL的有效性不再像我们曾经想过的那样依赖于任务本身之间的关系。出乎意料的是,该研究还发现多任务相似度与任务之间的转移相似度之间没有相关性,这再次表明,联合任务学习动力学背后的因素(多任务和转移学习中)实际上更多。正在考虑的任务。为了找到一组具有理想学习动态的任务组,本工作使用了多任务网络在收敛时的性能近似值和使用这些近似值选择一组多任务集的分支定界算法。任务网络共同执行所有任务。使用这种对任务进行分组的方法,所得的多任务网络始终优于单个任务基线,这是对联合研究每对任务的经验研究的多任务设置的巨大改进。据我们所知,这是决定在多任务学习中一起训练哪些任务的唯一计算框架,该框架允许对两个以上的任务进行联合训练。

迁移关系

如上所述,MTL中任务之间的学习转移关系与为了联合学习而将任务分组的问题有关,尽管它们并不总是相关联,。但是,与同时学习任务不同,转移学习(迁移学习)已经在更广泛的深度学习研究工作中发挥了重要作用。大多数自然语言处理和计算机视觉模型不是从头开始,而是转移经过预先训练的模型以用于新任务。即便如此,对可以显式学习任务之间的转移关系的方法的研究还只是最近。如今,随着迁移学习的广泛应用,这些方法有可能对更大的研究领域产生重大影响。

尝试学习任务之间的转移相似度的第一项(当然也是最著名的)工作是Taskonomy(Zamir等人,2018)。除了Taskonomy数据集(其中包含标记为26个任务的400万张图像)之外,本文还介绍了一种基于任务之间的转移关系自动构建视觉任务分类法的计算方法。为此,在每个任务上训练一个单任务网络,然后通过对每对任务回答以下问题来计算传输关系:通过在特征提取器之上训练一个解码器,我们如何能够很好地执行任务i接受过任务j的训练?

这有点简化,因为实际的训练设置涉及从多个源任务转移到单个目标任务,但是主要思想是相同的。一旦计算了转移相似度,构造任务分类法的问题就是以满足源任务数量预算的方式为每个目标任务选择理想的一个或多个源任务。这样做的动机是限制可以访问全部受监督数据(这些是源任务)的任务的数量,并学习其余任务则通过从源任务转移而来,仅需少量训练数据就可以在转移的特征提取器之上训练解码器。选择理想的源任务集以及将每个目标任务使用哪些源任务(给定任务传递相似度)的问题被编码为布尔整数编程问题。解决方案可以表示为有向图,其中节点是任务,并且从任务i到任务j的边的存在意味着任务i包含在任务j的源任务集合中。图中显示了用于不同监管预算和转移顺序的某些最终分类法(每个目标任务的最大源任务数)

25. Taskonomy是第一个大规模的实证研究,用于分析任务转移关系并根据其转移关系计算任务的显式层次结构,从而能够计算最佳转移策略,从而在有限的监督下学习一组相关任务。但是,他们这样做的方法非常昂贵,因为它涉及对源/目标任务的大量组合进行培训。构造任务分类法的整个过程花费了47,886个GPU小时。

(Dwivedi and Roig,2019)引入了一种类似的启发但效率更高的方法来学习任务转移关系,该方法使用表示相似度分析(RSA)(Kriegeskorte,2008)计算任务之间的相似度。 RSA是计算神经科学中用于定量比较神经活动度量的一种常用工具,近年来,它已被用于深度学习社区分析神经网络的激活(Vandenhende et al。,2019)。 (Dwivedi和Roig,2019)中RSA传输模型背后的基本假设是,如果两个任务表现出正向传输,则在每个任务上训练的单任务网络将倾向于学习相似的表示形式,因此RSA将是准确的衡量当前任务的转移亲和力。由于RSA仅涉及比较不同网络的表示,因此无需在每对任务之间实际执行任何传输学习,从而使RSA传输模型比Taskonomy快了几个数量级。此外,作者发现,从RSA计算出的任务相似度几乎与用于训练任务的模型的大小无关,因此可以使用非常小的模型来完成任务关系的计算,从而降低计算成本,甚至更多。

学习任务转移关系的现有方法都是最近才出现的,在这一领域还有很多工作要做。 需要注意的一件有趣的事是,RSA和归因图传递模型(Kriegeskorte,2008; Song等,2019)在计算非平凡信息时实现效率的方式。 简而言之,这些模型使用网络来训练网络。 两种方法都利用单任务网络学习的信息(中间表示或相关性评分),以告知下游训练。 另一方面,Taskonomy训练了额外的网络来完成这两种方法的工作,而无需进行任何额外的训练。 它表明,深层网络学习到的丰富信息不仅对网络的前向传递有用。 通常,即使在MTL之外,也可以并且应该利用此信息来进一步为模型训练提供信息:使用网络来训练网络。

任务嵌入

尽管任务嵌入主要用于元学习(meta learning,还没仔细研究过),但任务嵌入是学习任务关系的一种非常通用的形式,并且与本节到目前为止我们讨论的方法密切相关。即使在模型之间建立了牢固的联系,在MTL中仍然严重缺乏利用任务嵌入的方法。不过,这不足为奇。任务嵌入在已经从同一个分布中学习了许多任务后给出了新任务的情况下找到了最有用的方法,并且必须针对已学习的任务对新任务进行本地化。如果要学习的模型的任务集是固定的(与MTL一样),为什么要为每个任务分配矢量表示呢?尽管如此,我们仍然认为与TRL的连接很重要,因此我们简要介绍了元学习文献中的几种任务嵌入方法。

(James et al。,2018)使用度量学习来构建任务嵌入,以模仿学习各种机器人操纵任务。该模型名为TecNet,由嵌入网络和控制网络组成。嵌入网络根据给定任务的许多示例来生成任务的矢量表示,而控制网络将观察值和任务表示作为输入来产生动作。 (Achille et al。,2019)不是从专家演示中计算嵌入的任务,而是从预训练网络的Fisher信息矩阵构造它们。最后,(Lan et al。,2019)训练了一种用于元强化学习的共享策略,该策略以任务嵌入为条件。这些任务嵌入是任务编码器的输出,任务编码器经过训练可以根据每个任务的经验输出嵌入。


MTL in non-neural models

这个上一篇已经大概介绍完了,这里不赘述了。


简单总结:

写到这边,我发现如果扩展来看,将hard share和soft share扩展为网络局部单元的share方式,现有的网络结构可以做一个归类

首先是单源input的情况

(1)单个input源+单个loss(任务)+没有share的概念,很常见了;

图片来源:

//zhuanlan.zhihu.com/p/65472471zhuanlan.zhihu.com图标

(2)单个input源,多个loss+no share,

CyberZHG/keras-multi-headgithub.com图标

典型的,multi-head机制的阉割版

把concat的部分化成不同任务的任务层即可。

上述都是不考虑share的网络结构,也是比较常见的网络结构,下面是引入share的概念之后的网络结构,个人认为hard share,soft share可以作为一种网络构建的机制灵活的应用于网络中的部分模块不一定要按照原文的架构来看

(3)单个input源,多个loss+hard share/softshare/noshare,

如果hard share可以扩展来看,作为一种局部结构的话,这样其实还有更多的情况,比如input部分可以接n个子网络结构,这些子网络结构不进行任何形式的share,然后n个自网络的结果concat之后再进入shared layers。比如multi head attention的模型结构(看这个网络结构就好。。。)

concat之后就linear这层算是共享的

同样啊,我们也可以就对上图中,某两层进行softshare,最后一层不share或者concat做成no share或者concat之后再加两三层做hard share也可以。。。头痛

然后是多源input的情况:

多个input源的思路和单源类似,一个经典图:

下面是

一个多input源+单个loss+hard share(2 dense layers其实勉强算是做了一层的hard share,如果直接concat不接任何共享层则为no share的形式)

binary cross entropy部分换成多个任务层,则变成了 多input源+多loss+hard share

如果下图的三个dense之间做soft share

则变成 多input源+多个loss+hard/soft/no share 。。。脑子疼

//zhuanlan.zhihu.com/p/38707354zhuanlan.zhihu.com图标


后续待研究的一些比较著名并且有开源的多任务网络架构:

MOE和MMOE

图5 谷歌SNR模型

SNR

图6 腾讯PCG PLE网络(RecSys 2020 Best paper)

PCG PLE

十字绣网络