多任务学习 (Multi-task Learning) 已应用到诸多任务, 例如计算机视觉中的目标检测, 通常采用 “分类” + “回归” 多任务模式, Semantic Segmentation 或 Instance Segmantation 也会采用类似的方法. 更直接的应用是多属性识别, 每个属性当成一个任务, 最后将各分支损失函数加权并计算梯度回传. 本 Blog 旨在总结多任务学习的文献, 通过阅读解决遇到的问题.
多任务学习中遇到的问题主要有:
- Shared Layers
- Class Imbalance
- Task Weight
- Negative Transfer
(1) 什么情况下容易发生 Negative Transfer?
- 所有任务不相关, 难以找到恰当的共同潜在表示
- 一组相关的任务在训练过程中占据了主导, 从而导致非主导性的任务性能很差.
Methods
网络结构
Many Task Learning with Task Routing
G. Strezoski, N. van Noord, and M. Worring, “Many Task Learning with Task Routing,” arXiv:1903.12117 [cs], Mar. 2019.
Branched Multi-Task Networks: Deciding What Layers To Share
Vandenhende, Simon, Bert De Brabandere, and Luc Van Gool. “Branched Multi-Task Networks: Deciding What Layers To Share.” ArXiv:1904.02920 [Cs], April 5, 2019. http://arxiv.org/abs/1904.02920.
损失函数
Loss-Balanced Task Weighting to Reduce Negative Transfer in Multi-Task Learning
Liu, Shengchao, Yingyu Liang, and Anthony Gitter. “Loss-Balanced Task Weighting to Reduce Negative Transfer in Multi-Task Learning.” Conference on Machine Learning. Vol. 793. 2019.
这篇文章的思想很简单, 将任务 t 后续各个 batch 的 loss 与第一个 batch 的 loss 做比较得到 loss 的比值 $\left(\frac{Loss_n}{Loss_1}\right)^{\alpha}$, 这个比值越小, 说明该任务收敛越好. 以此作为权重对各个任务的 loss 进行加权.