深度神经网络的解释方法有很多,每种解释方法都有各自的优缺点。在大多数情况下,我们感兴趣的是局部解释方法,即对特定输入的网络输出的解释,因为DNNs往往过于复杂,无法进行全局解释(独立于输入)。
一般而言,所有局部解释方法都有一个共同的目标:可靠地(即准确地)表示要解释的函数f(例如DNN),至少可以部分的解释他们的输入和输褚的关系。
当然,这样的解释也必须是人类可以理解的才能有用。实现这一目标的最简单方法是为每个输入维度添加一个重要分数,也就是创建一个归属图。归因方法将模型输出的权重分配给给定输入的每个维度。
在这篇短文中,我将介绍一种基本的归因技术:遮挡分析。其基本概念非常简单:对于输入x的每个输入维度,我们在缺失该维度的情况下评估模型,并观察输出如何变化。特别是,如果||f(x) - f(x_without_i)||很大,那么维数一定很重要,因为删除它会改变输出。
遮挡分析通过观察去除patch后模型输出y的变化来计算每个patch的重要性。单个的结果可以组合成一张归因图。
遮挡分析的优点
如果维度是独立的,那么遮挡分析是完全可靠的,因为您准确地测量了每个维度的边际效应。
不幸的是,在大多数情况下,例如图像数据,情况并非如此。在这里,建议您删除整个色块而不是单个像素。这个想法是通常单个像素的信息可以从其相邻像素重建。因此,如果您具有猫的图像,则删除一个猫像素永远不会对输出产生太大影响,而删除覆盖耳朵的面片可能会导致模型对“猫”的预测显着下降。
关于遮挡分析的另一个优点是它是一种post-hoc 方法。这意味着它可以用来解释任何(已经训练过的)模型。没有必要再训练。这个模型甚至可以是一个不可微的黑盒。只要您能够输入输入并接收输出,就可以使用遮挡分析。
与基于梯度的解释方法相比,遮挡分析的另一个优势是,它甚至可以处理局部平坦的函数,没有或只有很小的梯度。
一些问题
但是,删除尺寸实际上意味着什么?毕竟,我们的模型始终采用相同大小的输入。删除尺寸意味着将其设置为具有“ 0信息”的值。该值取决于数据集。对于图像数据,我们通常使用平均RGB值。对于其他数据类型,通常将维设置为0即可。我们将在以后看到其他注意事项。
您可能已经猜到了,遮挡分析有一个很大的警告:我们必须将每一个遮挡输入到模型中并进行评估。如果您输入的内容有很多尺寸,例如如果图像为256x256像素,则必须运行256x256 = 65.536(!)模型才能获得完整的分析。在大多数情况下,这是非常昂贵的,特别是如果您要对整个数据集运行分析时,尤其如此。
一种减轻采用多个特征并将其一起删除的计算成本的方法(例如,图片中的8x8正方形)。这仅对于某些维度之间相互依存性强,以至于它们在语义上属于在一起的数据类型才有意义。
分布位移(Distribution Shift)
遮挡分析还有另一个问题,它讨论不多:分布位移。如果我们仔细考虑一下,我们在分析中观察到的输出变化除了信息被删除之外还有另一个原因:受干扰的输入不再位于我们训练模型所依据的数据分布中。
在机器学习中,我们通常假设模型将根据来自与训练样本相同分布的数据进行评估。如果不是这样(即如果我们移除像素),那么模型输出可能是错误的。虽然去除单个像素的效果通常可以忽略不计,但是去除整块的数据块与训练数据流形之间的距离更大,因此对输出的影响也更大。
但是有一些方法可以缓解该问题。基本思想是在仍然保持靠近数据分布的同时删除信息。这意味着要使用更复杂的信息删除技术,使图像仍然看起来像自然图像。
一种方法是模糊要“删除”的补丁。它不是最有效的方法,但它至少应该删除细粒度的纹理信息,并且它很容易实现。
一个更好的方法是使用修复算法:只是使用另一个模型来猜测(即inpaint)缺失部分的内容。实际上并没有添加任何信息,因为修复仅依赖于图像的剩余像素,但结果看起来仍然接近于正常图像,因此更接近于训练数据。您可以使用Yu等人设计的复杂算法,也可以使用容易访问的库,如openCV。
使用修复算法的问题是:1)它使该过程在计算上更加昂贵;2)您必须首先运行它;3)如果您不使用标准基准数据集,则可能必须对其进行重新训练。
最后总结
由于它的计算成本,遮挡分析当然不是一个适用于任何场合的工具,但肯定有一些用途。特别是如果你的数据很小,或者你只是想要一些容易实现和可靠的东西(只是要注意补丁的大小),遮挡分析可以很出色。与之密切相关且更为复杂的方法是Shapley值。不幸的是,它们的计算成本更高。如果你使用的是可微模型,那么仅次于它的简单方法就是基于梯度的解释方法。
引用
https://link.springer.com/chapter/10.1007%2F978-3-319-10590-1_53
https://en.wikipedia.org/wiki/Domain_adaptation#Domain_shift