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

时间:2016-10-21 21:01:56

标签: python machine-learning deep-learning correlation feature-extraction

我从两个独立的机器/深度学习框架中提取两个特征响应。我现在有两个具有NxF尺寸的矩阵,其中N是样本数,F是特征数。我想比较学习功能的相似程度。我尝试过几个方面,但主要的想法是使用相关性(试过Pearson和Spearman)将特征响应关联到FxF矩阵。然后,我在单个轴上取绝对值max,然后计算这些最大值的平均值。我实际上有几个框架,我想比较,但我得到非常相似的结果。有人这样做过吗?还有其他人有更好的建议吗?我的代码示例如下。

from scipy.stats import spearmanr
import numpy as np

def 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)

1 个答案:

答案 0 :(得分:1)

  

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

说实话,这没有任何意义。为什么?因为在深网这样的东西中没有特征排序。因此,您所做的比较不能用于得出任何合理的结论。您的矩阵N x F可能是您第一层的权重矩阵。因此,这些矩阵的每个(列)向量代表单个神经元。诀窍是 - 一个网络中的i神经元(用一个框架训练)可能与另一个神经元中的i神经元无关,而它可能与j相同。例如,考虑使用F=3训练图像的网络,您可能会发现这些神经元学会检测水平(神经元1),垂直(神经元2)线和可能是圆(神经元3)。现在你再次训练,或者使用不同的框架,或者甚至使用相同但随机种子不同的训练。现在,即使这第二个网络学到完全相同的东西 - 检测水平线,垂直线和圆形 - 但只是在不同的神经元(如水平-2,垂直-3,圆-1),你的方法将声称这些是完全的不同的型号,显然是假的。 “具有相似表征”的问题本身就是一个研究方向。

在应用您提出的基本分析之前,您必须做的最小事情是在两个网络中的神经元之间找到最佳匹配。你可以通过强制执行(F ^ 2可能的映射,只需要声称最大的相似性)或使用类似匈牙利算法的东西来找到完美匹配。

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

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

更新

为了说明为什么考虑的指标是错误的,让我们使用它:

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

您最终只有一次匹配,您并不关心90%的数据是完全不同的 - 您仍然会报告最大相似度。