多任务和多类学习有什么区别

机器算法验证 深度学习 多级 多任务学习
2022-03-21 11:57:33

考虑一个图像标记问题,我需要为图像分配一个或多个标签。可能的标签是human, moving, indoor人表示图片中有人,移动表示人是否在奔跑/行走等,而室内则区分图像是室内还是室外。

现在我可以使用标记的训练数据在输出层训练一个具有 3 个节点的 DNN。(比如节点 1,用于 +/- 人类,节点 2 +/- 移动等等)

我一直认为这只是使用 DNN 进行多类分类的另一种方式。(多类训练的另一种选择是用一个输出节点以成对或一对多的方式训练许多 DNN。)

但似乎我所描述的(训练具有 3 个输出节点的 DNN)多任务学习。(我阅读了 MTL 上的 wiki 并查看了这些论文

我的问题是:我描述的场景是 MTL 吗?如果不是,我错过了什么?如果是,MTL 还有什么其他的吗?(显然有)

我还注意到在 MTL 中一个图像可以有多个标签,但通常在多类中,一个图像只分配一个 - 这是区别吗?

4个回答

为了更清楚地理解,我用例子解释了每个术语

  • 多类分类/(One-Vs-One 和 One-Vs-ALL)
    • > 2类的分类任务!
    • 假设每个样本都分配给一个且只有一个标签
    • 例如 MNIST
    • 例如,一组可能是橙子、苹果或梨的水果图像。
    • 最后一层激活函数是softmax- softmax 激活函数将逻辑激活函数推广到 C 类,而不仅仅是两个类。单个标签到单个示例

      • 例如,说每个图像要么是行人,要么是汽车,或者检测停车标志!
      • 例如,说每个图像是 0-9(MNIST)之间的数字之一!
    • 或者你可以使用 4 种不同的逻辑回归分类器——最后一层中的每个神经元都有 sigmoid 激活函数(one-vs-all 方法的扩展!)! 在此处输入图像描述
  • 多标签分类
  • 此分类任务为每个样本分配一组目标标签。

  • 例如,为自动驾驶汽车构建一个分类器,该分类器需要检测多种不同的事物,例如行人、检测其他汽车、检测图像中的停车标志!

  • 例如,一个文档可以有多个主题!

  • 使用的损失函数将是“logLoss”

  • 多输出回归/多目标回归/多维线性回归
  • 此任务将样本分配给一组目标值!

  • 例如预测每个数据点的几个属性,例如某个位置的风向和大小

  • 最后一层激活应该是线性的

  • 使用的损失函数将是“MSE”


现在让我们来看看多任务学习(一个子集是多标签分类或多输出回归)和多类分类问题之间的区别!

  • 多类分类:如上所述,您正在为输入图像分配一个标签(可能是多个标签,例如 MNIST 问题)。

  • 多任务学习(它的一个子集是多标签分类)你要问每张图片,是否有行人,或者汽车,停车标志或交通信号灯,并且多个对象可能出现在同一张图像中(一张图片可以有多个标签!)。

    • 换句话说,如果你训练一个神经网络来最小化这个成本函数(对数损失),那么你就是在进行多任务学习,因为你正在做的是构建一个单一的神经网络来查看每个图像并基本上解决四个不同的问题分类问题。它试图告诉您每个图像中是否包含这四个对象中的每一个?

    • 或者你可以通过训练四个独立的神经网络而不是训练一个网络来做四件事来实现它!

    • 注意:但是如果神经网络中的一些早期特征可以在这些不同类型的对象之间共享,那么你会发现训练一个 NN 做四件事,比训练四个完全独立的神经网络做这四件事的性能更好分别做任务。这就是多任务学习的力量

从长远来看,当您有以下要求时,多任务学习将更有意义:

  • 对一组可以从共享较低级别功能中受益的任务进行培训!

  • 如果每个任务的数据量非常相似!

    @RockTheStar,我认为您的迁移学习建议不正确您要说的内容对于迁移学习具有相似(但较弱)的含义,我将尝试借助示例进行解释。假设你有 100 个不同的任务,每个任务都有 1000 个训练样本!如果您构建单独的 NN 来对每个类进行分类,您将不会有太大的好处!由于训练示例的数量有限(1000),但是如果您构建一个网络来解决 100 个不同的问题,比如说分类问题,那么您有(1000*1000)(对于每个单独的任务,有 1000 个而不是 1000 个)训练示例可以提供一些知识来帮助这 100 个任务中的所有其他任务。这是一个很大的推动!

  • 可以训练出足够大的神经网络来完成所有任务!

对@RockTheStar 的回答稍作修正。多任务学习不是当您学习一项任务然后按照建议转移到另一项任务时,而是并行学习任务,类似于通常的多类分类设置。

我想可以做出的简单区分是,输出不一定是单个任务的相同类,而是两个或多个共享信息的松散相关任务。

多类学习:有多个要分类的类标签。例如,我有标签 cat、dog 和 pig。这些是动物。我想制作一个 DNN 来对它们进行分类。那是多学科的学习。

多任务学习:有点像迁移学习。基本上,您为一个分类任务创建一个模型,然后他们在另一个分类任务中使用它(修改后)。

在您的情况下,您可以创建一个双标签 DNN 来分类图像是否是人类。然后使用该模型参数参数开始构建另一个分类器来分类移动与否。我会认为你的案例更像是多任务学习,因为兴趣的主题是不同的。

我注意到在 MTL 中,图像可以有多个标签,但通常在多类中,图像只分配一个 - 这是区别吗?

是的。

在多任务学习中,您可以在一张给定的图像中检测多个对象(即“汽车”、“人类”、“猫”、“树”)。如果您的模型中同时存在人和汽车,则您的标签为[1,1,0,0](from ['car', 'human', 'cat', 'tree'])。

在多类分类中,您的标签中将只有一个金 (1) [1,0,0,0],.