2-8 多任务学习

多任务学习(Multi-task learning)

在迁移学习中,你的步骤是串行的,你从任务A里学习只是然后迁移到任务B。在多任务学习中,你是同时开始学习的,试图让单个神经网络同时做几件事情,然后希望这里每个任务都能帮到其他所有任务。

假设你在研发无人驾驶车辆,那么你的无人驾驶车可能需要同时检测不同的物体,比如检测行人、车辆、停车标志,还有交通灯各种其他东西。如果这是输入图像${x^{(i)}}$ 那么这里不再是一个标签${y^{(i)}}$,而是有 4 个标签。在这个例子中,没有行人,有一辆车,有一个停车标志,没有交通灯。然后如果你尝试检测其他物体,也许${y^{(i)}}$ 的维数会更高。

如果你从整体来看这个训练集标签和以前类似,我们将训练集的标签水平堆叠起来,像这样${y^{(1)}}$一直到${y^{(m)}}$:

不过现在${y^{(i)}}$是4×1向量,所以这些都是竖向的列向量,所以这个矩阵Y现在变成4 × m矩阵。而之前,当y是单实数时,这就是1 × m矩阵。

那么你现在可以做的是训练一个神经网络,来预测这些y值,你就得到这样的神经网络,输入x,现在输出是一个四维向量y。请注意,这里输出我画了四个节点,所以第一个节点就是我们想预测图中有没有行人,然后第二个输出节点预测的是有没有车,这里预测有没有停车标志,这里预测有没有交通灯,所以这里${\hat y}$是四维的。

要训练这个神经网络,你现在需要定义神经网络的损失函数,对于一个输出${\hat y}$,是个 4维向量,对于整个训练集的平均损失:

$\frac{1}{m}\sum\limits_{i = 1}^m {\sum\limits_{j = 1}^4 {L(\hat y_j^{(i)},y_j^{(i)})} }$

$\sum\limits_{j = 1}^4 {L(\hat y_j^{(i)},y_j^{(i)})}$ 这些单个预测的损失,所以这就是对四个分量的求和,行人、车、停车标志、交通灯,而这个标志L指的是 logistic 损失,我们就这么写:

$L(\hat y_j^{(i)},y_j^{(i)}) =  - y_j^{(i)}\log \hat y_j^{(i)} - (1 - y_j^{(i)})\log (1 - \hat y_j^{(i)})$

整个训练集的平均损失和之前分类猫的例子主要区别在于,现在你要对j = 1到 4 求和,这与 softmax 回归的主要区别在于,与 softmax 回归不同, softmax 将单个标签分配给单个样本。

如果你训练了一个神经网络,试图最小化这个成本函数,你做的就是多任务学习。因为你现在做的是建立单个神经网络,观察每张图,然后解决四个问题,系统试图告诉你,每张图里面有没有这四个物体。另外你也可以训练四个不同的神经网络,而不是训练一个网络做四件事情。但神经网络一些早期特征,在识别不同物体时都会用到,然后你发现,训练一个神经网络做四件事情会比训练四个完全独立的神经网络分别做四件事性能要更好,这就是多任务学习的力量。

另一个细节,好像每张图都有全部标签。事实证明,多任务学习也可以处理图像只有部分物体被标记的情况。所以第一个训练样本,我们说有人,给数据贴标签的人告诉你里面有一个行人,没有车,但他们没有标记是否有停车标志,或者是否有交通灯。也许第二个例子中,有行人,有车。但是,当标记人看着那张图片时,他们没有加标签,没有标记是否有停车标志,是否有交通灯等等。也许有些样本都有标记,但也许有些样本他们只标记了有没有车,然后还有一些是问号。

即使是这样的数据集,你也可以在上面训练算法,同时做四个任务,即使一些图像只有一小部分标签,其他是问号或者不管是什么。然后你训练算法的方式,即使这里有些标签是问号,或者没有标记,这就是对j从 1 到 4 求和,你就只对带 0 和 1 标签的j值求和,所以当

有问号的时候,你就在求和时忽略那个项,这样只对有标签的值求和,于是你就能利用这样的数据集。

那么多任务学习什么时候有意义呢?当三件事为真时,它就是有意义的:

第一,如果你训练的一组任务,可以共用低层次特征。对于无人驾驶的例子,同时识别交通灯、汽车和行人是有道理的,这些物体有相似的特征,也许能帮你识别停车标志,因为这些都是道路上的特征。

第二,这个准则没有那么绝对,所以不一定是对的。如果你专注于单项任务,如果想要从多任务学习得到很大性能提升,那么其他任务加起来必须要有比单个任务大得多的数据量。要满足这个条件,其中一种方法是,每个任务中的数据量很相近。

最后,多任务学习会降低性能的唯一情况,和训练单个神经网络相比性能更低的情况就是你的神经网络还不够大。但如果你可以训练一个足够大的神经网络,那么多任务学习肯定不会或者很少会降低性能,我们都希望它可以提升性能,比单独训练神经网络来单独完成各个任务性能要更好。

posted @ 2018-11-04 11:33  刘-皇叔  阅读(1137)  评论(0编辑  收藏  举报