在回答一个已经回答的问题之后(从单层前馈网络提取权重重要性),我正在寻找关于神经网络中输入相关性的推论。
考虑到一个深层网络,通过从感兴趣的输出节点向后遍历各层来重建输入的重要性可能很困难或很耗时,我想知道在进行神经网络的敏感性分析时是否存在一些理论框架,基本上改变了一个输入并考虑感兴趣的输出节点如何变化。
在神经网络中是否存在执行某种敏感性分析的规范方法?
如果有的话,我真的很欢迎一些Python代码这样做
在回答一个已经回答的问题之后(从单层前馈网络提取权重重要性),我正在寻找关于神经网络中输入相关性的推论。
考虑到一个深层网络,通过从感兴趣的输出节点向后遍历各层来重建输入的重要性可能很困难或很耗时,我想知道在进行神经网络的敏感性分析时是否存在一些理论框架,基本上改变了一个输入并考虑感兴趣的输出节点如何变化。
在神经网络中是否存在执行某种敏感性分析的规范方法?
如果有的话,我真的很欢迎一些Python代码这样做
Answers:
您建议的灵敏度分析对应于检查输出相对于输入的偏导数。说输出向量给出由Ý = ˚F (X ),其中X ∈ [R d是输入向量和˚F是功能的网络工具。输入的输出的雅可比行列式为:
通常,它是非线性的,灵敏度的概念取决于输入。它在某些地区可能很大,而在其他地区则接近于零。如果您想对输出对输入的依赖程度进行某种形式的汇总测量,则必须汇总多个输入值。例如,您可以将雅可比行列式的绝对值取为训练集中所有输入的平均值(它充当输入基础分布的期望值的替代物)。当然,这种总结最终会丢弃信息,因此在某些情况下可能会产生误导。
您可以使用链式规则来得出雅可比行列式的表达式,类似于使用用于反向传播的参数来推导损失函数的梯度的方式。您还可以使用自动微分,例如Theano,TensorFlow等库来计算它。执行有限差分(即实际上模拟微扰并测量输出变化)的理由没有太多,除非您的网络实现的功能是不可微分的(在这种情况下,Jacobian不存在)。
注意事项:如果输入的单位/比例彼此不同,则灵敏度也将具有不同的单位/比例,无法直接比较。标准化/缩放输入是一种可能的解决方案。记住这一点也很重要,因为这种类型的分析告诉我们有关模型本身的信息,但不一定告诉我们生成数据的基础分布。例如,如果两个输入相关,则模型可能最终使用第一个输入而不使用第二个输入。在这种情况下,我们会发现灵敏度对于第一个输入而言较高,而对于第二个输入而言较低,但不应得出结论,对于一般地预测输出而言,第一个输入固有地更重要。
这个文章应该有兴趣。