- 是迁移学习的一种
- 希望模型同时做多个任务时,能将其他任务学到的知识,用于目标任务中,从而提升目标任务效果。
- 多任务学习,其实是对目标任务做了一定的约束,或者叫做regularization。因为不希望模型只局限于目标任务的学习,而是能够适应多个任务场景,这样可以大大的增加模型的泛函能力(generalization)。
- 多任务的各个任务之间一定要有强相关性,如果任务之间本身的关联性就不大,多任务学习并不会对模型的提升并不一定会有用。
- 深度学习中两种多任务学习模式:隐层参数的硬共享与软共享。
- 隐层参数硬共享:指的是多个任务之间共享网络的同几层隐藏层,只不过在网络的靠近输出部分开始分叉去做不同的任务。
- 隐层参数软共享:不同的任务使用不同的网络,但是不同任务的网络参数,采用距离(L1,L2)等作为约束,鼓励参数相似化。
- 多任务训练模型的泛化能力确实很强。如果深度学习模型遇到瓶颈了,可以尝试一下多任务学习模型。
- 只要loss有多个就算MTL,一些别名(joint learning,learning to learn,learning with auxiliary task)
- MTL可以看作一种inductive transfer(先验知识),通过提供inductive bias(某种对模型的先验假设)来提升模型效果。比如,使用L1正则对模型的假设模型偏向于sparse solution(参数要少)。在MTL中,先验是通过auxiliary task来提供,更灵活,告诉模型偏向一些其他任务,最终导致模型会泛化得更好。
- 每个任务有自己的参数,最后通过对不同任务的参数之间的差异加约束,表达相似性。比如可以使用L2, trace norm等。
- 优点及使用场景:
- implicit data augmentation: 每个任务多少都有样本噪声,不同的任务可能噪声不同,最终多个任务学习会抵消一部分噪声(类似bagging的思想,不同任务噪声存在于各个方向,最终平均就会趋于零)
- 一些噪声很大的任务,或者训练样本不足,维度高,模型可能无法有效学习,甚至无法无法学习到相关特征
- 某些特征可能在主任务不好学习(比如只存在很高阶的相关性,或被其他因素抑制),但在辅助任务上好学习。可以通过辅助任务来学习这些特征,方法比如hints(预测重要特征)[2]
- 通过学习足够大的假设空间,在未来某些新任务中可以有较好的表现(解决冷启动),前提是这些任务都是同源的。
- 作为一种正则方式,约束模型。所谓的inductive bias。缓解过拟合,降低模型的Rademacher complexity(拟合噪声的能力,用于衡量模型的能力)
- 传统方法中的MTL (linear model, kernel methods, Bayesian algo),其主要关注两点:
- 通过norm regularization使模型在任务之间具有稀疏性
- 对多任务之间关系进行建模
- Block-sparse regularization (mixed l1/lq norm)
- 目标:强制模型只考虑部分特征,前提为不同任务之间必须相关。
- 假设K个任务有相同的特征,和相同数量的模型参数。形成一个矩阵A(DxK),D为参数维度,K为任务数,目标为这些任务只使用一些特征,也就是A的某些行也0。(最简单的想法就是使其变为一个low rank的矩阵;或者使用L1正则,因为L1可以约束某些特征到0,如果想使某些行为0,则只要先对行聚合操作,再对聚合后的结果使用L1即可。通常,使用lq norm 先对行(每个特征)进行约束,之后使用L1 norm再约束,就是mixer l1/lq norm。
- 当任务之间相关性较弱,使用上述方法可能导致negative transfer(也就是负向效果)。在此情景下,希望增加的先验知识是,某些任务之间是相关的,但是某些任务之间是相关性较差。可以通过引入任务clustering来约束模型。可以通过penalize 不同任务的parameter vectors 和他们的方差。限制不同模型趋向于不同的各自 cluster mean vector。
- 类似的,比如SVM中引入bayesian方法,事先指定一些cluster,目标在最大化margin的同时使不同任务趋向于各自的cluster中心;[8]
- 指定了cluster,可以通过聚类方法(类内,类间,自己的复杂度)对模型进行约束
- 寻找更好的多任务结构,复杂任务的底层应该被低级任务目标来监督(比如NLP前几层学习一个NER或POS辅助任务)
- 当任务相关性下降或需要不同level推理时,hard parameter sharing就不行了。目前比较火的是learning what to share(outperform hard parameter sharing);还有就是对任务层级进行学习在任务具有多粒度因素时也是有用的。
- 只关注主任务目标,但是希望从其他有效的辅助任务中获利!目前选择一些辅助任务方法:
- Related task:常规思路(自动驾驶+路标识别;query classification+web search;坐标预测+物体识别;duration+frequency)
- Adversarial:在domain adaption,相关的任务可能无法获取,可以使用对抗任务作为negative task(最大化training error),比如辅助任务为预测输入的domain,则导致主任务模型学习的表征不能区分不同的domain。
- Hints:前面提到的某些特征在某些任务不好学,选择辅助任务为predicting features(NLP中主任务为情感预测,辅助任务为inputs是否包含积极或消极的词;主任务name error detection,辅助任务为句子中是否有name)
- Focusing attention:使模型注意到那些在任务中可能不容易被注意到的部分(自动驾驶+路标检测;面部识别+头部位置识别)
- Quantization smoothing:某些任务中,训练目标是高度离散化的(人为打分,情感打分,疾病风险等级),使用离散程度较小的辅助任务可能是有帮助的,因为目标更平滑使任务更好学
- prediting inputs:有些场景下,可能不会选择某些特征,由于其不利于预估目标,但是这可能这些特征对模型的训练有一定的帮助,这种场景下,这些特征可以作为outputs而不是inputs
- Using the future to predict the presnet:有些特征只有在决策之后才会有,比如自动驾驶时,当车路过一些物体才得到这些物体的数据;医疗中只有使用过药物才知此药物的效果。这些特征不能作为inputs,但是可以用作辅助任务,来给主任务在训练过程中透露信息。
- representation learning:auxiliary task大多都是潜在地学习一些特征表达,且一定程度上都利于主任务。也可以显示地对此学习(使用一个学习迁移特征表达的辅助任务,比如AE)
- 衡量两个任务是否相关:
- 使用相同的特征做决策
- 相关的任务共享同一个最优假设空间(having the same inductive bias)
- F-related: 如果两个任务的数据是通过一个固定分布经过一些变换得到
- 分类边界(parameter vectors)接近
- 任务是否相似不是非0即1的,越相似的任务,收益越大。learning what to share允许暂时忽略理论上的不足,即使相关性不好的任务之间也能有所收益。但是发展任务之间的相似性对我们在选择辅助任务上也是有绝对的帮助的。
- MTL learning Tips:
- 紧凑分布均匀的label的辅助任务更好(from POS in NLP)
- 主任务训练曲线更快平稳,辅助任务平稳慢(还未平稳)
- 不同任务尺度不一样,任务最优学习率可能不同
- 某个任务的输出可以作为某些任务的输入
- 某些任务的迭代周期不同,可能需要异步训练(后验信息;特征选择,特征衍生任务等)
- 整体loss可能被某些任务主导,需要整个周期对参数进行动态调整(通过引入一些不确定性,每个任务学习一个噪声参数,统一所有损失 [31]
- 某些估计作为特征(交替训练)