深度学习笔记(19) 多任务学习
1. 多任务学习概念
在迁移学习中,步骤是串行的,从任务A里学习只是然后迁移到任务B
在多任务学习中,步骤是同时开始学习的
试图让单个神经网络同时做几件事情
然后希望这里每个任务都能帮到其他所有任务
2. 物体检测的多任务学习
来看一个例子,假设在研发无人驾驶车辆
那么无人驾驶车可能需要同时检测不同的物体
比如检测行人、车辆、停车标志,还有交通灯等其他各种东西
比如在下边边这个例子中,图像里有个停车标志,然后图像中有辆车,但没有行人,也没有交通灯
如果输入图像是x(i),那么这里不再是1个标签y(i),而是有4个标签
也许y^((i))的维数会更高,现在就先用4个
所以 y^((i))是个4×1向量
如果从整体来看这个训练集标签和以前类似
将训练集的标签水平堆叠起来,像这样 y(1)一直到 y(m):
不过现在y(i)是4×1向量
所以这些都是竖向的列向量
所以这个矩阵Y现在变成4×m矩阵
而之前,当y是单实数时,这就是1×m矩阵
那么现在可以做的是训练一个神经网络,来预测这些y值
输入x,现在输出是一个四维向量y
请注意,这里输出画了四个节点
第一个节点就是想预测图中有没有行人,第二个输出节点预测的是有没有车,这里预测有没有停车标志,这里预测有没有交通灯,所以这里^y是四维的
训练神经网络,需要定义神经网络的损失函数,对于一个输出^y,是个4维向量,对于整个训练集的平均损失:
∑4j=1
L L
L(yj(i) ,yj(i))是单个预测的损失
所以这是对四个分量的求和,行人、车、停车标志、交通灯
这个标志
L L
L 指的是 logistic损失:
这与softmax回归的主要区别在于, softmax是将单个标签分配给单个样本
然后发现,训练一个神经网络做四件事情会比训练四个完全独立的神经网络分别做四件事性能要更好
3. 多任务学习的条件
-
如果训练的一组任务,可以共用低层次特征
对于无人驾驶的例子,同时识别交通灯、汽车和行人是有道理的
这些物体有相似的特征 -
如果每个任务的数据量很接近(这个准则没有那么绝对,所以不一定是对的)
在多任务学习中,通常有更多任务而不仅仅是两个
但比如说要完成100个任务,而要做多任务学习
尝试同时识别100种不同类型的物体
可能会发现,每个任务大概有1000个样本
所以如果专注加强单个任务的性能
比如专注加强第100个任务的表现,用A100表示
如果试图单独去做这个最后的任务,只有1000个样本去训练这个任务
但这只是100项任务之一
而通过在其他99项任务的训练,加起来一共100k个样本,大幅提升算法性能
如果有对称性,其他99个任务
也许能提供一些数据或提供一些知识来帮到这100个任务中的每一个任务
所以第二点不是绝对正确的准则,但通常会看的是如果专注于单项任务
如果想要从多任务学习得到很大性能提升
那么其他任务加起来必须要有比单个任务大得多的数据量 -
当训练一个足够大的神经网络,同时做好所有的工作
所以多任务学习的替代方法是为每个任务训练一个单独的神经网络
所以不是训练单个神经网络同时处理行人、汽车、停车标志和交通灯检测
可以训练一个用于行人检测,一个用于汽车检测,一个用于停车标志检测和一个用于交通信号灯检测的神经网络
多任务学习会降低性能的唯一情况和训练单个神经网络相比性能更低的情况
就是神经网络还不够大
但如果可以训练一个足够大的神经网络
那么多任务学习肯定不会或者很少会降低性能
都希望它可以提升性能,比单独训练神经网络来单独完成各个任务性能要更好
多任务学习能让训练一个神经网络来执行许多任务
这可以带来更高的性能,比单独完成各个任务更高的性能
但要注意,实际上迁移学习比多任务学习使用频率更高
参考:
相关推荐:
深度学习笔记(18) 迁移学习
深度学习笔记(17) 误差分析(二)
深度学习笔记(16) 误差分析(一)
深度学习笔记(15) 人的表现
深度学习笔记(14) 评估指标
谢谢!