有没有办法控制特征的提取?如何确定在训练过程中学习了哪些特征,即是否学习了相关信息?
如何确定在 CNN 训练期间学习了哪些相关特征?
有一种称为“评分系统”的方法,您可以在其中给图像评分,例如“0.9 个条纹,0.0 个红色,0.8 个头发,...”,然后使用这些评分对对象进行分类。这是一个较旧的想法,不用于确定网络是否正在学习。它不在标准的 CNN 中。
要确定是否正在学习相关信息,标准的做法是使用测试准确度、训练准确度、混淆矩阵或 AUC。
确定 CNN 究竟在学习什么是一个正在进行的复杂研究问题。简而言之-您无法真正知道。对于一个基本的网络,你可以说它正在学习一些东西,而不是它实际用来做出决定的东西。
就在这里!如果一个模型很好地推广到测试集,我们已经知道它已经找到了一些有用的特征。然而,数据的潜在表示可能仍然是“纠缠的”——潜在向量的单个元素实际上可能编码有关输入的多个属性的信息,或者单个属性可能分布在多个元素中。我们通常更喜欢用潜在空间的轴来表示特征的表示——一种“解开的”表示。例如,如果我们要对面孔进行编码,最好有一个用于微笑/不微笑的轴,另一个用于男性/女性的轴,等等。
推动模型学习“干净”(分离)表示是机器学习研究的一个活跃子领域,具有实际应用(如可解释性,但也因为它使“下游”模型更容易学习它们的任务,例如控制策略强化学习系统将来自世界模型的学习表示作为输入)。
从哪里开始?从 L2 正则化开始,推动您的网络明智地“使用”这些权重(更多权重接近零 => 稀疏潜在向量),然后从那里开始往上走。
所以有一些低级激活图的图片,以及一些基于梯度的信息,其中 yoy 将输出相对于输入求导并生成热图。
我有点怀疑这通常有多大用处,我认为这有点在创造一种错误的理解错觉。
还有一些额外的研究使用模糊来找出相关特征,但我再次怀疑。
可能最有用的是通过优化你的班级分数来生成图像。您可以了解您的 CNN 实际标记事物的程度(这样做会让您很快意识到 CNN 在实际理解方面是垃圾,而且非常容易被欺骗)。