2020-7-21 吴恩达DL学习-C3结构化ML项目-w2 ML策略2(2.8 多任务学习-满足3个条件才有意义。使用频率比迁移学习低)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

2.8 多任务学习 Multi-task learning

我们已经了解了迁移学习,你从一个任务中学习,然后尝试迁移到另一个不同任务中。从多个任务中学习还有另外一个版本,就是所谓的多任务学习

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

我们来看一个例子。
在这里插入图片描述

假设你在研发无人驾驶车辆,那么你的无人驾驶车可能需要同时检测不同的物体,比如检测行人、车辆、停车标志,还有交通灯各种其他东西。比如在上图左边,图像里有个停车标志,然后图像中有辆车,但没有行人,也没有交通灯。

如果输入图像是 x ( i ) x^{(i)} x(i),此时输出不再是一个标签 y ( i ) y^{(i)} y(i) ,而是有4个标签。在这个例子中,没有行人,有一辆车,有一个停车标志,没有交通灯。如果你尝试检测其他物体,也许 y ( i ) y^{(i)} y(i)的维数会更高,现在我们就先用4个吧,所以 y ( i ) y^{(i)} y(i)是个4×1向量。

如果你从整体来看,这个训练集标签和以前类似,我们将训练集的标签水平堆叠起来,像下面这样 y ( 1 ) y^{(1)} y(1)一直到 y ( m ) y^{(m)} y(m)
Y = [ ∣ ∣ ∣ … ∣ y ( 1 ) y ( 2 ) y ( 3 ) … y ( m ) ∣ ∣ ∣ … ∣ ] Y = \begin{bmatrix} | & | & | & \ldots & | \\ y^{(1)} & y^{(2)} & y^{(3)} & \ldots & y^{(m)} \\| & | & | & \ldots & | \\ \end{bmatrix} Y=y(1)y(2)y(3)y(m)

y ( i ) y^{(i)} y(i)是4×1向量,所以矩阵 Y Y Y中的每个元素都是竖向的列向量,矩阵 Y Y Y现在变成 4 x m 矩阵。而之前,当 y y y是单实数时,矩阵 Y Y Y就是 1 x m 矩阵。

现在你可以做的是训练一个NN,来预测这些 y y y值。
在这里插入图片描述

如上图,你得到这样的NN。输入 x x x,现在输出是一个四维向量 y y y
请注意,输出层画了四个节点,

  • 第一个输出节点就是我们想预测图中有没有行人
  • 第二个输出节点预测的是有没有车
  • 第三个输出节点预测有没有停车标志
  • 第四个输出节点预测有没有交通灯

最终的预测结果 y ^ \hat y y^是四维的。
在这里插入图片描述

要训练这个NN,你现在需要定义NN的损失函数。对于一个输出 y ^ \hat y y^,是个4维向量,对于整个训练集的平均损失:
1 m ∑ i = 1 m ∑ j = 1 4 L ( y ^ j ( i ) , y j ( i ) ) \frac 1m \sum_{i=1}^m \sum_{j=1}^4L(\hat y^{(i)}_j,y^{(i)}_j) m1i=1mj=14L(y^j(i),yj(i))
其中, ∑ j = 1 4 L ( y ^ j ( i ) , y j ( i ) ) \sum_{j=1}^4L(\hat y^{(i)}_j,y^{(i)}_j) j=14L(y^j(i),yj(i))是四个分量单个预测损失之和,包含:行人、车、停车标志、交通灯。
而单个损失定义:
L ( y ^ j ( i ) , y j ( i ) ) = − y j ( i ) l o g y ^ j ( i ) − ( 1 − y j ( i ) ) l o g ( 1 − y ^ j ( i ) ) L(\hat y^{(i)}_j,y^{(i)}_j)=-y^{(i)}_jlog \hat y_j^{(i)} - (1-y^{(i)}_j)log(1-\hat y^{(i)}_j) L(y^j(i),yj(i))=yj(i)logy^j(i)(1yj(i))log(1y^j(i))
整个训练集的平均损失

  • 与之前分类猫的例子主要区别在于,现在你要对 j = 1 j=1 j=1到4求和
  • softmax回归的主要区别在于,与softmax回归不同,softmax将单个标签分配给单个样本。而这张图可以有很多不同的标签(one image can have multyle lables),所以不是说每张图都只是一张行人图片,汽车图片、停车标志图片或者交通灯图片。你要知道每张照片是否有行人、或汽车、停车标志或交通灯,多个物体可能同时出现在一张图里。

实际上,在本文第一张图像中,同时有车和停车标志,但没有行人和交通灯,所以你不是只给图片一个标签,而是需要遍历不同类型,然后看看每个类型,那类物体有没有出现在图中。

如果你训练了一个NN,试图最小化成本函数,你做的就是多任务学习。因为你现在做的是建立单个NN,观察每张图,然后解决四个问题,系统试图告诉你,每张图里面有没有这四个物体。

另外你也可以训练四个不同的NN,而不是训练一个网络做四件事情。但NN一些早期特征(NN网络的前几层),在识别不同物体时都会用到,然后你发现,训练一个NN做四件事情会比训练四个完全独立的NN分别做四件事性能要更好,这就是多任务学习的力量

另一个细节,到目前为止都是这么描述算法的,好像每张图都有全部标签。
事实证明,多任务学习也可以处理图像只有部分物体被标记的情况。

  • 第一个训练样本,我们说有人,给数据贴标签的人告诉你里面有一个行人,没有车,但他们没有标记是否有停车标志,或者是否有交通灯。
  • 第二个训练样本,有行人,有车。但是,当标记人看着那张图片时,他们没有加标签标记是否有停车标志,是否有交通灯等等。
  • 也许有些样本都有标记
  • 也许有些样本他们只标记了有没有车,然后还有一些是问号。
    在这里插入图片描述

即使是如上图这样的数据集,你也可以在上面训练算法,同时做四个任务。即使一些图像只有一小部分标签,其他是问号或者不管是什么。

你训练算法的方式,即使数据集中有些标签是问号,或者没有标记,就是对 j j j从1到4求和。你就只对带0和1标签的 j j j值求和,所以当有问号的时候,你就在求和时忽略那个项,只对有标签的值求和。

多任务学习什么时候有意义呢?

那么多任务学习什么时候有意义呢?当三件事为真时,它就是有意义的。
在这里插入图片描述

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

Training on a set of tasks that could benefit from having shared lower-level features.

第二,这个准则没有那么绝对,所以不一定是对的。但我从很多成功的多任务学习案例中看到,如果每个任务的数据量很接近。

Usually: Amount of data you have for each task is quite similar.

还记得迁移学习时,你从任务 A A A学到知识然后迁移到任务 B B B,所以如果任务 A A A有1百万个样本,任务 B B B只有1000个样本,那么你从这1百万个样本学到的知识,就可以帮你增强对更小数据集任务 B B B的训练。

那么多任务学习又怎么样呢?
在多任务学习中,你通常有更多任务而不仅仅是两个,比如说你要完成100个任务,尝试同时识别100种不同类型的物体,假设每个任务大概有1000个样本。所以如果你专注加强单个任务的性能,比如我们专注加强第100个任务的表现,这里用 A 100 A100 A100表示,如果你试图单独去做这个最后的任务,你只有1000个样本去训练这个任务,这是100项任务之一。

而通过在其他99项任务的训练,加起来可以一共有99000个样本,这可能大幅提升算法性能,可以提供很多知识来增强这个任务的性能。不然对于任务 A 100 A100 A100,只有1000个样本的训练集,效果可能会很差。
在这里插入图片描述

如果有对称性,其他99个任务,也许能提供一些数据或提供一些知识来帮到这100个任务中的每一个任务。

所以第二点不是绝对正确的准则,但我通常会看的是如果你专注于单项任务,如果想要从多任务学习得到很大性能提升,那么其他任务加起来必须要有比单个任务大得多的数据量。

要满足这个条件,其中一种方法是,比如上面100个任务的例子这样,或者如果每个任务中的数据量很相近,但关键在于,如果对于单个任务你已经有1000个样本了,那么对于所有其他任务,你最好有超过1000个样本,这样其他任务的知识才能帮你改善这个任务的性能。

最后,多任务学习往往在以下场合更有意义,当你可以训练一个足够大的NN,同时做好所有的工作。

Can train a big enough neural network to do well on all the tasks.

多任务学习的替代方法是为每个任务训练一个单独的NN。这不是训练单个NN同时处理行人、汽车、停车标志和交通灯检测。而是你可以训练一个用于行人检测的NN,一个用于汽车检测的NN,一个用于停车标志检测的NN和一个用于交通信号灯检测的NN。

研究员Rich Carona几年前发现,多任务学习和训练单个NN相比,性能更低的唯一情况就是你的NN还不够大。但如果你可以训练一个足够大的NN,那么多任务学习肯定不会或者很少会降低性能,我们都希望它可以提升性能,比单独训练NN来单独完成各个任务性能要更好。

总结

以上介绍的内容就是多任务学习。

在实践中,多任务学习的使用频率要低于迁移学习。

我看到很多迁移学习的应用,你需要解决一个问题,但你的训练数据很少,所以你需要找一个数据很多的相关问题来预先学习,并将知识迁移到这个新问题上。

但多任务学习比较少见,就是你需要同时处理很多任务,都要做好,你可以同时训练所有这些任务,也许计算机视觉是一个例子。在物体检测中,我们看到更多使用多任务学习的应用,其中一个NN尝试检测一大堆物体,比分别训练不同的NN检测物体更好。

平均来说,目前迁移学习使用频率更高,比多任务学习频率要高,这是因为你很难找到那么多相似且数据量对等的任务可以用单一NN训练。但两者都可以成为你的强力工具。

总结一下,多任务学习能让你训练一个NN来执行许多任务,这可以给你比单独完成各个任务更高的性能。但要注意,实际上迁移学习比多任务学习使用频率更高。我看到很多任务都是,如果你想解决一个ML问题,但你的数据集相对较小,那么迁移学习真的能帮到你,就是如果你找到一个相关问题,其中数据量要大得多,你就能以它为基础训练你的ML,然后迁移到这个数据量很少的任务上来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值