区分持续学习中的多任务与单增量任务

数据挖掘 机器学习 在线学习
2022-02-23 21:21:00

我通过互联网阅读并发现了这一点:

大多数持续学习研究都集中在多任务场景上,其中需要相同的模型来逐步学习许多孤立的任务,而不会忘记之前的任务。

他们解释说 PermutedMNIST 是多任务。我不知道为什么?

换句话说,

单增量任务考虑本质上是增量的单个任务。换句话说,我们仍然按顺序添加新类,但分类问题是唯一的,在计算准确度时,我们需要区分目前遇到的所有类。

但是,我还是不能澄清这两个定义?有人可以帮我,给我多任务场景和单增量任务场景的例子。

1个回答

TL;DR/总结:类(y1,y2,y3下面)在多任务中可以是任何东西(可能是y1y2=,y1y2=, 等等)。在增量中,我们获取标签(以及来自公共集合的数据,(即y[:2]y[:4]y,根据子集的定义)

这只是定义的解释问题。这些定义看起来非常相似,但细节很重要。

假设模型可以区分类的上键数:例如,它是一个具有N输出层中的神经元和类数 (k) 在大多数类的任务中是k<=N(多任务)或类总数(k) 也是k<=N(单增量任务);我们可以说:

多任务

在这里,我们将随着时间的推移在不同的任务上训练模型,这通常称为强化学习。在半 python 伪代码中(其中.train已经包括交叉验证之类的东西):

model = Whatever(...)

X1 = [[1, 0],
      [2, 2],
      [3, 0]]
y1 = [0, 1, 0]
model.train(X1, y1)

X2 = [[4, 4],
      [5, 5],
      [6, 0]]
y2 = [1, 2, 0]
model.train(X2, y2)

X3 = [[7, 0],
      [8, 8],
      [9, 9]]
y3 = [0, 1, 1]
model.train(X3, y3)
score = model.score(X3, y3)

这里的任务可能相关也可能不相关。或者通常是稍微相关的(例如在每次训练中识别不同类型的对象)。

单个增量任务

这也是多次训练模型,这里我们只有一个任务,X但不会一次输入整个数据集。在半python伪代码中:

model = Whatever(...)

X = [[1, 0],
     [2, 2],
     [3, 0],
     [4, 4],
     [5, 5],
     [6, 0]]
y = [0, 1, 0, 3, 2, 0]

model.train(X[:2, :], y[:2])
score1 = model.score(X[:2, :], y[:2])
model.train(X[:4, :], y[:4])
score2 = model.score(X[:4, :], y[:4])
model.train(X, y)
score3 = model.score(X, y)

这里的任务是一项,但它可能是一项艰巨的任务。使用这种技术的一个地方是建立一个学习曲线,这是评估我们是否有足够的数据来理解任务变化的一种方法。


额外说明:在多任务情况下,我们说过y1y2y3=可能(而且很可能)是可能的。一个例子是:y1是不同型号的汽车和y2是不同型号的船。问题是:了解不同型号的汽车是否有助于区分不同型号的船舶?

(PS ys 将始终从 0 到类数进行枚举,即 s 的数值y将始终相同但它们的类含义不必相同)。