编辑:
好的。我发现它在输入空间中不起作用。所以旧的解释可能是错误的,但我还是会保留它。
这是我的新想法:
在我的高级项目中,我使用了名为AugMix 的算法。在这个算法中,他们计算了两个增强图像之间的香农-詹森散度,这是 KL 散度的对称形式。
他们使用模型输出作为数据集的概率分布。这个想法是将模型拟合到数据集,然后将模型的输出解释为概率密度函数。
例如,您在没有过度拟合的情况下拟合了数据集。然后(假设这是一个分类问题)你将你的 logits(最后一层的输出)提供给每个类的 softmax 函数(有时 softmax 函数作为层添加到网络的末端,小心)。您的 softmax 函数(或层)的输出可以解释为 P(Y|X_{1}),其中 X_{1} 是输入样本,Y 是 groundtruth 类。然后你对另一个样本 X_{2},P(Y|X_{2}) 进行预测,其中 X_{1} 和 X_{2} 来自不同的数据集(比如 dataset_1 和 dataset_2),并且模型没有经过训练任何这些数据集。
那么dataset_1和dataset_2的KL散度可以通过KL(dataset_1 || dataset_2) = P(Y|X_{1}) * log(P(Y|X_{1}) / P(Y|X_ {2}))
确保 X_{1} 和 X_{2} 属于同一类。
我不确定这是否是正确的方法。 或者,您可以使用不同的数据集(dataset_1 和 dataset_2)训练两个不同的模型(model_1 和 model_2),然后使用另一个名为 dataset_3 的数据集的样本计算这两个模型的预测值的 KL 散度。换句话说:
KL(dataset_1 || dataset_2) = sum x in dataset_3 model_1(x) * log(model_1(x) / model_2(x))
其中 model_1(x) 是 model_1 的 softmax 输出,使用 dataset_1 进行训练,没有过拟合,得到正确的标签。
后者对我来说听起来更合理,但我不确定它们中的任何一个。我自己找不到合适的答案。
我要解释的东西来自machinelearningmastery.comKL Divergence的Jason Brownlee的博客
据我了解,首先,您必须将数据集转换为概率分布,以便您可以从两个数据集的并集(或相交?)中计算每个样本的概率。
KL(P || Q) = X 中的总和 P(x) * log(P(x) / Q(x))
但是,大多数情况下,数据集的交集都没有。例如,如果要衡量 CIFAR10 和 ImageNet 之间的差异,则没有任何共同样本。计算此指标的唯一方法是从同一数据集中进行抽样以创建两个不同的数据集。因此,您可以拥有两个数据集中都存在的样本,并计算 KL 散度。
最后,也许您想检查 GAN 中使用的Wasserstein Divergence,以便比较源分布和目标分布。