比较两种深度学习框架的特征响应

我从两个不同的机器学习/深度学习框架中提取了两种特征响应。现在我有两个维度为 NxF 的矩阵,其中 N 是样本数量,F 是特征数量。我想比较这些学习到的特征的相似性。我尝试了几种方法,但主要思路是使用相关性(尝试了皮尔森和斯皮尔曼)来将特征响应相关成一个 FxF 矩阵。然后我取绝对值,在单个轴上取最大值,最后计算这些最大值的平均值。实际上我想比较几个框架,但我得到的结果非常相似。有人做过这个吗?其他人有什么更好的建议吗?我的代码样例如下。

from scipy.stats import spearmanrimport numpy as npdef similarity(resp1, resp2):    rho, p = spearmanr(resp1,resp2)    corr = rho[:resp1.shape[1],resp1.shape[1]:]    sim_mtrx = np.abs(corr)    feature_match = np.max(sim_mtrx,axis=1)    return np.mean(feature_match)

回答:

有人做过这个吗?其他人有什么更好的建议吗?我的代码样例如下。

说实话,这没有意义。为什么?因为在深度网络等事物中,特征之间没有顺序。因此,你所做的比较不能得出任何合理的结论。你的矩阵 N x F 可能是你第一层的权重矩阵。因此,这些矩阵的每一列向量代表 一个神经元。关键是 – 在一个网络(用一个框架训练)中的第 i 个神经元可能与另一个网络中的第 i 个神经元毫无关系,而可能与第 j 个神经元完全相同。例如,考虑一个在具有 F=3 的图像上训练的网络,你可能会发现这些神经元学会了检测水平线(神经元1)、垂直线(神经元2)和可能是一个圆(神经元3)。现在你再次训练,无论是用不同的框架,还是用相同的框架但不同的随机种子。现在即使第二个网络学会了完全相同的东西 – 检测水平线、垂直线和一个圆 – 但只是在不同的神经元中(如水平-2、垂直-3、圆-1),你的方法会声称这些是完全不同的模型,这显然是错误的。“具有相似表示”的问题本身就是一个研究方向。

你必须做的最低要求是在应用你提出的基本分析之前,找到两个网络中神经元之间的 最佳匹配。你可以通过暴力搜索(F^2 种可能的映射,只选择声称最大相似性的那个)或使用像匈牙利算法这样的方法来找到完美匹配。

最重要的是要保持 参考比较,以避免上述问题,因此不要每个框架只训练一个模型,每个框架至少训练 两个 模型。现在不要声称“方法 A 和 B 产生(不)相似的表示,因为 A 和 B 的单次实验生成的表示是(不)相似的”,你应该检查同一算法的两次运行(使用不同的种子)之间的(不)相似性与两个不同算法的单次运行之间的(不)相似性是否有统计上的显著差异,换句话说:

  • 你有两个算法 A、B(框架)
  • 你创建表示 A1、A2、B1、B2
  • 你测试是否 mean(sim(A1, A2), sim(B1, B2)) != mean(sim(A1, B1), sim(A2, B2))(而之前你只是检查 sim(A1, B1) 是否“大”)

更新

为了展示为什么所考虑的度量是错误的,让我们用它来处理以下情况:

>>> xarray([[0, 3, 6],       [1, 4, 7],       [2, 5, 8]])>>> yarray([[ 6,  0,     0],       [ 7, -1,  -123],       [ 8,  0,  1000]])>>> similarity(x,y)1.0

你最终只得到 一个 匹配,你不关心90%的数据完全不同 – 你仍然报告最大相似性。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注