迁移过程是有先后顺序的 从任务A中学习,然后将其迁移到任务B。 在多任务学习中,你(多个任务)一起开始 尝试让一个神经网络同时做几件事 然后,每个任务将会帮助完成其他任务。 我们来看个例子让我们来看一个例子 假设你正在建造一辆自动驾驶汽车。 然后你的车将需要检测几个不同的 事物如行人、其他车辆、停车标志 还有交通信号灯和其他的东西。 例如,在左边的例子中,图中有个停止路标 这张照片里有一辆车,但没有行人或红绿灯。 如果这个图像作为输入,如x(i), 而输出并不是一个标签y(i)而是四个。 在这个例子中,没有行人,有一辆车, 有一个停车标志,没有红绿灯。 如果你试着发现其他的东西 y(i)可能会有更多的维度。 但现在我们只用这四个。 所以y(i)是一个4x1的向量。 如果你把训练测试标签当成一个整体 和之前一样,我们将训练数据的标签 如下地进行水平堆栈,y(1)到y(m) y(i)是4x1向量,所以每一个都是列向量。 所以矩阵Y现在是一个4xm矩阵,而以前, 当y是单一实数时,是一个1xm的矩阵。 你现在做的是训练一个神经网络来预测y。 你可以有一个神经网络以x作为输入和 输出为四维的y。 请注意这里的输出,我已经绘制了四节点。 第一个节点,我们试图检测是否有行人 在这张图片中 第二个输出会检测到是否有辆车 还会检测到是否有个停车标志和红绿灯 所以这里的y^是四维的。 为了训练这个神经网络,你需要定义 这个神经网络的损失函数 预测输出的y^(i)是4x1维的。 损失是整个训练集的平均损失 为1除以m,乘以从i=1到m的总和 j从1到4各自预测的损失 它只是将4个部分行人、车、停车标志 红绿灯进行相加 这里的L是普通的逻辑斯蒂损失函数。 把这写下来 所以就是 yj(i)logŷj(i)+(1-yj(i))log(1-ŷj(i)) 与前面的分类示例相比,主要的区别是 现在你将j从1到4相加。 和softmax回归区别是,不像softmax 回归,它将单个标签分配给单个示例。 这一个图像可以有多个标签。 所以你不说每个图像是一个行人图片,或 汽车图片,停车标志图片,交通信号灯图片。 你看每张照片,它是否有行人,汽车,停车标志或 红绿灯和多个对象出现在同一图像中。 在上一张幻灯片的例子中,有一辆车和 有个停车标志,但没有行人和红绿灯。 所以你不是给图片分配一个标签 你有不同的类别和 查看该类别是否在该图片中? 所以,这就是为什么我说,在这个设置下, 一张图片可以有多个标签。 如你在进行多任务学习需要 训练神经网络来使损失函数最小 因为你在建一个单一的神经网络,通过 一张图片来解决4个问题。 它试图告诉你每个图像中的4个对象。 或者你可以做的是训练4个独立的神经网络 而不是训练一个网络做4件事。 但是在不同输出之间,神经网络 前面的特征可以共享,那么你会发现 训练一个神经网络做4件事的结果比 训练4个完全独立的神经网络的结果要好。 这就是多任务学习的力量。 还有一个细节 到目前为止在算法中,好像每个图像都要标签。 其实在多任务学习中,即使一些图像 只标记某些对象也能正常工作。 在第一个训练例子,标注的人告诉你图片有 行人,没有汽车,但他们标注是否 有停车标志和红绿灯。 在第二个例子中,有行人和汽车 但是标注的人看到图却没有把他们标注 有没有停车标志和有没有交通灯等等。 也许一些例子是完全标记的,也许一些例子 他们只是标注是否有汽车,所以 会有些问号等。 这样的数据集,你仍然可以训练你的算法 进行同时完成4项任务,即使有些图像 只有一些标志和其他问号或不关心的项。 还有你训练算法的方式 在j从1到4中,即使这些标签中的一 些是问号或没有标注 你只需要对标签为0或1的j值求和。 每当有一个问号,你只省略该项求和, 只对有标签的值进行求和。 你可以这样使用数据集 那么什么时候进行多任务学习才有意义? 那么什么时候进行多任务学习才有意义? 我会说它在以下三个条件下适用 一是你要训练一系列的任务可以 共享一些低层次的特征 自动驾驶的例子中,在识别交通灯 汽车和行人时,都有相似的特征 这可以帮你识别停车标志,因为他们都是道路特征 其次——这不是硬性的规则,所以不总是存在的—— 但我看到很多成功的多任务学习,他们 每个单项任务的数据量非常相似。 你会回想起迁移学习,从任务A 迁移到任务B。 如果任务A中100万个数据,任务B中有1000个 数据,那么从百万个数据中训练的值 能够帮助增强数据集较少的任务B 那么多任务学习呢? 多任务学习中,你一般会有多于两项的任务 前面例子中有四项,我们假设有100个任务。 你通过多任务学习,在同一时间内 试图识别100个类别。 每个任务中你有1000个例子 如果你只关注一个任务的准确率, 让我们看第100个任务,把它叫做A100 如果你想单独地完成这项最后的任务, 你只有1000个例子来训练这一项任务, 这1个任务由其他99个任务进行训练 有9.9万个样本是一个很大的推动, 它们可以给很多的信息来增强,否则在第 100个任务中只靠相对较小的1000个数据。 同样地,其余99个任务也有同样的数据也 得到其他任务信息来帮助训练。 第二点不是硬性要求,但我更倾向于这样 为了增强多任务学习,如果你集中在任一任务上, 其他任务比单一任务合计起来 有更多的数据。 一个方法是如果我们例子中有很多任务 每个任务中的数据也相当相似 但是关键是你在一个任务中已经有1000个例子 在其他任务中合计有远超过1000的数据, 其他任务可帮助你在最后的任务表现更好。 多任务学习往往会更有意义,当你训练一个 很大的神经网络来使所有任务都有高准确度 另一种多任务学习是 为每个任务单独训练一个神经网络。 与其为行人,汽车,停车标志,交通灯训练 一个神经网络,你可以训练一个行人的神经网络 汽车的神经网络,停车标志 的神经网络和交通灯的神经网络。 研究员Rich Carona,多年前发现 如果神经网络不够大,多任务学习 与单项训练相比会损害准确率。 但如果你训练足够大的神经网络,那多任务学习 应该不会或很少影响性能。 与你分别单独训练不同任务相比, 它实际上能够提高性能。 这就是多任务学习。 实际上多任务学习要比迁移学习用得少得多。 我看到很多迁移学习的应用,你 你想通过一个小数量的数据来解决问题。 你找一个有大量数据的相关问题来学习 然后转移到这个新的问题。 多任务学习用的更少,一般在你有大量任务 需要完成,你可以同时 训练所有这些任务。 可能一个例子是计算机视觉 在对象检测中,有很多多任务学习的应用, 一个神经网络可以同时检测到一大堆对象 这比多个不同的神经网络单独地检测物体好。 但我要说的是,平均来说迁移学习要比多 任务学习用的更多,但是两者都是有用的工具。 总结一下总结一下 多任务学习能训练一个神经网络来完成多任务 这可以使你的性能比单独执行任务时更好。 请注意一点,实际上迁移学习 比多任务学习用得更多。 所以如果你想解决一个机器学习问题 但你有一个相对较小得数据集,迁移学习可以帮助你。 当你有个相关的问题有更大得数据集, 你可以用来训练你的神经网络 然后迁移到小数据集的问题上。 因此,迁移学习在今天使用得很多。 也有很多多任务学习 但是多任务学习与迁移学习相比要少。 但是有一个例外就是计算机视觉物体检测。 我在那看到了很多训练神经网络 用来检测不同物体的应用。 这比训练单独的神经网络 来检测物体更有效。 但我认为迁移学习和 多任务学习都以类似方式提出,实际上 我看到迁移学习比多任务学习应用更多。 我想这是因为很难找到这么多不同 的任务要单独在单个神经网络上训练。 再次,用计算机视觉的 物体检测是最为显著的例外。 这就是多任务学习。 多任务学习与 迁移学习是你的工具包中的重要工具。 最后,我下次想讨论端到端的深度学习。 让我们进入下一个视频,学习端到端学习。