如何训练神经网络*不*给出一定的输出?

机器算法验证 机器学习 神经网络 分类
2022-04-06 18:59:06

我有一个以 softmax 层作为最后一层的神经网络。我使用的损失函数是分类交叉熵损失。我想将输入分类为恰好属于 N 个类之一。但是对于某些输入,我不知道它们属于哪个类,而只知道它们不属于哪个将此作为训练示例的最佳方法是什么?

我使用的方法最好通过一个示例来解释:假设我们要分离 4 个类,并给出一个我们知道不属于类 2 和 3 的训练示例,那么我将提供以下向量作为目标向量:

[0.5, 0, 0, 0.5]

相反,如果我们知道训练示例不属于第 1 类,那么我将提供以下向量作为目标向量:

[0, 1/3, 1/3, 1/3]

这是正确的方法吗?我在最后一层选择的激活函数是否正确?

2个回答

通常在进行多类分类时,我们使用one-hot encoding对类进行编码。例如,在四类分类中,属于第三类的将被编码为[0, 0, 1, 0]在您的情况下,您似乎在数据中缺少信息,因为您只知道“它不是一级或二级”之类的信息,即[0, 0, ?, ?].

简单的解决方案可能是重新定义问题,并将其视为多标签分类问题,其中对于每个训练示例,您会将0正类编码为' ,而将正类或未知类编码为'。1

[0, 0, ?, ?] -> [0, 0, 1, 1]
[1, 0, 0, 0] -> [1, 0, 0, 0]
[?, ?, 0, ?] -> [1, 1, 0, 1]

这将使您的算法学会对可能的正面进行分类,因此您可以在其中进行选择以进行正确的分类。

请注意,这使它成为一个嘈杂的标签问题。您有数据,但不精确。想象一下,你有三个非常相似的例子,你会知道第一个是“不是第一类”,第二个是“不是第一类或第四类”,而第三个是“不是第三类或第四类”。由此,你可以推断出这些例子肯定不是来自四班,也可能不是来自一、二班,所以它们很可能来自二班。这就是在给定足够数据的情况下,您的算法可以在给定嘈杂标签的情况下学习正确答案的方式。

如果您还有一部分好的数据,其中所有示例都有适当的标签,那么您可以使用这些数据来学习标准的多类分类器。接下来,您可以组合这两个结果,以便第一个分类器用于过滤可能的类,第二个用于进行分类。例如,如果第一个分类器返回非负概率,第二个分类器返回属于该类的概率,那么您可以将它们组合起来通过取来进行分类(p1,p2,p3,p4)(q1,q2,q3,q4)

argmaxi(p1q1,p2q2,p3q3,p4q4)

要回答有关您提供目标分布的方法的问题:是的,这是一种正确的方法,softmax 是这种方法的正确最后一层。