深度学习:我如何知道哪些变量很重要?

机器算法验证 机器学习 神经网络 偏见 张量流 西阿诺
2022-02-02 11:28:06

就神经网络术语(y = 权重 * x + 偏差)而言,我怎么知道哪些变量比其他变量更重要?

我有一个具有 10 个输入的神经网络、1 个具有 20 个节点的隐藏层和 1 个具有 1 个节点的输出层。我不确定如何知道哪些输入变量比其他变量更有影响力。我在想的是,如果输入很重要,那么它将与第一层有高度加权的连接,但权重可能是正数或负数。所以我可能做的是取输入权重的绝对值并将它们相加。更重要的输入将具有更高的总和。

例如,如果头发长度是输入之一,那么它应该与下一层中的每个节点有 1 个连接,因此有 20 个连接(因此有 20 个权重)。我可以只取每个重量的绝对值并将它们加在一起吗?

4个回答

您所描述的确实是量化神经网络输入重要性的一种标准方法。请注意,为了使其正常工作,必须以某种方式对输入变量进行归一化。否则,与倾向于具有较大值的输入变量相对应的权重将按比例减小。有不同的归一化方案,例如减去变量的平均值并除以其标准差。如果变量一开始没有归一化,您可以在重要性计算中对权重本身进行校正,例如乘以变量的标准差。

Ii=σij=1nhidden|wij|.

这里个输入的标准差是第个输入的重要性,是连接第个输入到个隐藏节点的权重,是第一层隐藏节点的数量。σiiIiiwijijnhidden

另一种技术是使用神经网络映射关于所讨论输入的导数,对输入进行平均。

Ii=σi|dydxi|

这里是第个输入,是输出,期望值取自输入向量xiiyx

有点蛮力但有效的解决方案:

尝试通过对您的输入功能之一使用常量来“删除”输入。然后,针对每种可能的情况训练网络,看看你的准确性如何下降。重要的输入将为整体准确性提供最大的好处。

您所描述的不是“深度网络”,在隐藏层中只有输入和当人们说深度学习时,通常意味着数十万个隐藏单元。105

对于浅层网络,给出了定义变量重要性的示例。

对于一个非常深的网络,人们不会过多地谈论变量的重要性。因为输入是原始级别的特征,例如图像中的像素。

我发现的关于这个的最详细的内容都在这个网站上详细列出,你可以看看这个如果您只谈论线性模型,那么您必须对权重进行归一化以使其可解释,但即使这在提到的链接上也可能会产生更多误导。有些人尝试制作复杂的权重函数来解释输入的重要性(Garson's , Gedeon's 和 Milne's ),但即使这可能会产生误导,一旦滚动我提到的第一个链接,您可以找到更多相关信息。一般来说,我建议继续用一粒盐来解释结果。

会同意@rhadar 的回答,但想补充一点,而不是使用任何常数尝试使用该输入的平均值,并且不要忘记重新训练网络。

PS:抱歉不能在这里发布更多链接或评论没有太大的声誉。