本文首发于公众号“我AI”,欢迎关注,共同进步。
本篇文章从自动驾驶中的多任务开始讲起,引出多任务学习问题的定义、挑战以及研究方向。
金庸先生的《射雕英雄传》中塑造了一个“老顽童”周伯通的角色,天性爱玩。在被黄药师困于桃花岛的十五年里,为了打发无聊的时间,萌生出“左手与右手”打架的想法,遂创出“左右互搏术”这一精妙且有趣的武学。
左右互搏的本质上是一心二用,左手与右手能够同时做不同的任务,例如一手画圆、一手画方。
如果让我形象解释多任务学习的话:左右互搏便是一个非常经典的多任务学习。
虽然普通人不经过训练,很难做到左右手互搏,但是“一心二用”甚至“一心多用”这件事情却是在普通人的日常生活中再稀疏平常不过了:比如我现在就是在一边写这篇文章一边听着歌。
在开车的任务中,我们更是要“眼观六路、耳听八方”:同时处理跟前车保持车距、观察其他车辆、保持车道、观察红绿灯/道路标志牌等多个任务。
基于视觉的自动驾驶,需要的不仅仅是一个深度神经网络,而是多个深度神经⽹络各司其职的组合体。在驾驶场景中,需要以视觉系统完成不同物体的检测与分类,包括感知道路上的车辆、行人、交通灯(不分辨状态)和路标;对交通灯的状态进行分类(红色、黄色或绿色);识别路标类型(停车/限速/单行道等);检测识别车辆必须停车和等待的情况,例如交叉路口/大型停车场……
对于这些目标,它们都对应同等重要的识别任务,必须以最高效的方式得到并行感知和处理。
为了完成对复杂环境的感知,Tesla设计了一个多任务的深度学习模型HydraNet:包括了48个神经网络、1000个不同的输出,完整的训练一次需要70000个GPU小时(一台有8块GPU的训练服务器需要耗费一年时间完成一次训练)。[1]
多任务学习(Multi-task learning)是机器学习中的一种重要方法,它是指给定一批学习任务,通过对这批任务的联合学习,达到以下一个或多个目的:
1. 降低模型大小和复杂度,提升运算速度,减小计算开销;
2. 利用任务之间的相关性,提升各个任务的性能;
3. 减少某些任务对样本数量的依赖,减轻因样本稀少造成的过拟合。
多任务学习与迁移学习有异曲同工之妙,都涉及到不同学习任务之间的相互帮助,但差别在于迁移学习的帮助是单向的(从A任务迁移知识到B任务上),而多任务学习往往是双向的(A与B互相促进)。
尽管多任务学习能够带来上面提到的3点优点,但在具体的算法实现上,面临的挑战极大:
1. 任务间干扰:有些任务在训练过程中可能是正相关的,能够彼此促进,有些则可能彼此干扰。因此需要甄别任务的相关性,避免出现由于任务之间干扰导致训练过程中出现Negative transfer的现象(多任务训练结果差于任何一个单任务训练)。本想“一心二用”,结果成了“三心二意”;
2. 训练难度大:对同一个神经网络,不同任务的训练难易度也会不同。训练难易度可能体现在所需数据量上,往往会导致一个任务已经过拟合(Overfitting)需要停止训练而另一个任务还在欠拟合(Underfitting),需要继续训练;
3. 模型的训练和推理可能具有时变性:以自动驾驶视觉系统为例,随着时间的推移,系统需要根据当前的车辆自动驾驶需求,灵活地、分批次地、甚至同时并发地激活多任务网络的子网络。
针对这些挑战,在多任务学习的领域中,可以从以下几个研究方向考虑能做一些工作:
1. 多任务网络结构设计
2. 多任务损失函数设计
3. 辅助学习(任务的筛选方法)
4. 多任务网络的训练方法
对这些研究方向的展开,以后会以论文解读的形式逐步展开,进一步和大家分享。
参考资料:
[1] Multi-task learning in the wildness. https://slideslive.com/38917690/multitask-learning-in-the- wilderness
- END -
新朋友们可以看看我过往的相关文章
⬇
【相关推荐阅读】