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

我从两个不同的机器学习/深度学习框架中提取了两种特征响应。现在我有两个维度为 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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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