Re-calibrating Feature Attributions for Model Interpretation
1. 引言
有效的模型解释可以帮助我们理解模型的预测依据,从而增强模型的透明度和可信度。此外,准确的特征归因对于模型的调整和优化也至关重要。论文提到,现有的特征归因方法存在理论与实际应用之间的不一致性,这可能影响模型解释的可靠性。因此,提出了新的方法来重新校准特征归因,以解决这一问题。
什么是特征归因方法?
特征归因方法(Feature Attribution Methods)是用于解释机器学习模型,特别是深度学习模型决策过程的一类技术。这些方法的核心目的是确定输入特征对模型输出的贡献程度,以便理解模型是如何基于不同的输入特征做出预测的。
特征归因方法的工作原理:
-
关联输入与输出:它们通过分析输入特征和模型输出之间的关系来工作。这涉及评估哪些输入特征对模型做出特定决策(如分类或回归)具有最大的影响。
-
归因分数:方法通常为每个输入特征分配一个“归因分数”,表明该特征对模型做出特定预测的重要性。
-
可视化解释:归因分数可以用于生成可视化解释,帮助开发者和最终用户理解模型的工作方式。
常见的特征归因方法:
-
积分梯度(Integrated Gradients, IG):
- 适用于深度神经网络。
- 它通过在模型的输入和一个基线(通常是一个无信息的输入)之间积分来工作。
- 举例:在图像识别模型中,积分梯度可以用于标识对模型识别特定类别(如“猫”)最重要的像素区域。
-
梯度乘输入(Gradient*Input, GI):
- 计算输入特征的梯度(即对输出的影响程度)并将其乘以输入特征本身。
- 这种方法简单直接,适用于许多类型的神经网络。
- 举例:在文本分类任务中,GI可以用来识别哪些单词或短语对模型判断文档类别最重要。
-
LIME(局部可解释模型-不透明预测):
- 创建模型局部的简化版本,这些简化版本在模型的一个小的邻域内是可解释的。
- LIME适用于任何类型的模型,并通过近似来解释模型的行为。
- 举例:在贷款批准模型中,LIME可以用来解释为什么某个客户的贷款被拒绝,指出了影响决策的关键因素(如信用评分、收入等)。
特征归因方法的应用:
- 提高透明度:帮助开发者和最终用户理解模型的工作原理,特别是在复杂的深度学习模型中。
- 模型调试:通过识别导致错误预测的输入特征,帮助改进模型。
- 公平性和合规性:在敏感领域(如医疗、金融)确保模型的决策不是基于不公平或非法的特征。
- 信任与采纳:通过提供解释,增加用户对模型的信任,促进技术的采纳。
征归因方法的现状以及存在的问题(也是本文中作者解决的问题)
- 现状:
- 现有的特征归因方法,如积分梯度(Integrated Gradients, IG)、平滑梯度(SmoothGrad, SG)、梯度乘输入(Gradient*Input, GI)等,旨在解释深度神经网络的决策过程。
- 这些方法通过分析模型的输入特征对输出的贡献程度来提供可解释性,帮助理解模型的预测行为。
- 存在的问题:
- 理论与实际应用的不一致性:现有方法在理论上的处理与实际实现之间存在不一致。这主要是因为在实践中,为了计算方便,常常采用一些近似和简化的假设,这可能导致误差和偏差。
- 参考点的选择:特征归因方法通常需要选择一个参考点(如一个“基线”输入),这对于归因结果有重要影响。不同的参考点可能导致不同的解释,但现有方法缺乏一种有效的方式来确定最合适的参考点。
- 插值点的选择:在计算路径积分时,需要选择一系列插值点。如何有效选择这些插值点以获得更准确的特征归因,也是一个挑战。
- 评估指标的缺乏:评估特征归因方法的有效性缺乏统一和广泛接受的标准,这使得比较不同方法的性能变得困难。
作者的动机
作者开发了一种计算输入的期望参考点的方法,并允许沿着非线性路径从参考点到输入进行梯度积分。通过系统地识别路径上的有效插值点,使得可以直接使用实际归因而非绝对归因进行模型解释。此外,作者还提出了一种有效计算积分的技术,可以使用现有方法所采用的预定义参考点来估计有效参考点。这使得作者能够利用他们的技术重新校准现有方法的归因,而无需额外的计算开销。这些改进使归因方法符合其原始的主张并符合其理论属性的设定,同时在定量评分上也取得了更好的成绩
论文贡献
- 论文提出了一种重新校准特征归因的方法,通过识别合适的参考点和选择有效的插值点,来解决现有方法中的问题。
- 这种新方法不仅能提高特征归因的准确性,还能增加模型解释的可靠性和透明度。
关键概念
路径积分(Path Integration)
路径积分是指在特征归因方法中,计算从一个参考点到实际输入点之间的积分。这种积分旨在量化每个输入特征对模型输出的贡献。
- 例子:假设有一个深度学习模型用于识别图像中的猫。在积分梯度方法中,我们可能会计算从一个全黑的图像(作为参考点)到实际含有猫的图像(实际输入)之间的积分。这个积分过程会逐渐“开启”图像中的像素,量化每个像素对于模型识别“猫”这一输出的贡献。
参考点(Reference Point)
参考点是特征归因方法中的起点,它代表了输入特征的缺失或基线状态。该点被用来与实际输入进行比较,以评估每个特征对模型预测的贡献。
- 例子:在处理图像识别问题时,一个常见的参考点是一张全黑或全白的图像,代表没有任何信息的状态。对于文本数据,参考点可能是一个空字符串或一组空白字符。
插值点(Interpolation Points)
插值点是从参考点到实际输入点之间的一系列点,用于在积分过程中计算路径上的变化。这些点帮助我们理解模型是如何逐渐从参考状态“过渡”到实际输入状态,并对每个特征的贡献进行量化。
- 例子:继续使用图像识别的例子,在从全黑图像(参考点)到含有猫的图像(实际输入)的路径上,插值点可能是一系列逐渐增加像素亮度的图像。每个插值点都稍微比前一个亮一些,这样可以逐步揭示哪些像素对模型识别“猫”最为关键。
本文提出的估计建议归因的方法
- 选择合适的参考点
- 关键思想:与以往方法不同,新方法不是随机选择或基于简单假设(如零图像、均匀噪声)的参考点,而是系统地识别合适的参考点。这是通过修改输入图像与模型梯度并沿着梯度上升方向优化输入来实现的,从而找到表示特征“缺失”的合适参考点。
- 非线性路径的积分
- 过程:作者的方法要求沿着非线性路径 γ i \gamma_i γi积分梯度,这与传统方法(如 IG 方法)采用的线性路径不同。
- 确定插值点
- 方法:关键是确定位于从所选参考点 x ′ x' x′ 到输入 x x x(或相反)的积分路径上的插值点。这些插值点位于相同的输入空间 R n R^n Rn中,并可以系统地识别。
- 计算所需积分
- 公式:作者使用以下公式来计算特征
x
i
x_i
xi 的归因
M
i
c
M_{ic}
Mic:
M i c ( x , x ′ ) = ( x i − x i ′ ) × ∫ α = 0 1 ∂ S c ( x ~ ) ∂ x ~ i ∣ x ~ = x ′ + γ i ( α ) ( x − x ′ ) d α M_{ic}(x, x') = (x_i - x'_i) \times \int_{\alpha=0}^1 \frac{\partial S_c(\tilde{x})}{\partial \tilde{x}_i} \bigg|_{\tilde{x} = x' + \gamma_i(\alpha)(x - x')} \, d\alpha Mic(x,x′)=(xi−xi′)×∫α=01∂x~i∂Sc(x~) x~=x′+γi(α)(x−x′)dα
其中, S c ( x ~ ) S_c(\tilde{x}) Sc(x~)是对类别 c c c的分数函数, γ i ( α ) \gamma_i(\alpha) γi(α) 表示积分路径函数,定义了从 x x x 到 x ′ x' x′的路径, x ~ i \tilde{x}_i x~i 是路径上的插值点。
- 利用 Lemma 1 估计归因
- Lemma 1:给定两个特征点 x i x_i xi和 x i ′ x'_i xi′ 以及 m m m 个均匀分布的插值点 x ~ ( 1 ) i , … , x ~ ( m ) i \tilde{x}_{(1)i}, \ldots, \tilde{x}_{(m)i} x~(1)i,…,x~(m)i之间的变化 δ i = x i − x i ′ \delta_i = x_i - x'_i δi=xi−xi′,这个变化与 x i x_i xi到所有插值点 x ~ i \tilde{x}_i x~i的平均距离成正比,比例系数为 2。
- 归因估计公式:根据 Lemma 1,归因
M
i
M_i
Mi 可以通过以下公式在
m
m
m次插值上估计:
M i ( x , X ~ ) = λ m ∑ j = 1 m δ i ( j ) ∇ x ~ ( i j ) M_i(x, \tilde{X}) = \frac{\lambda}{m} \sum_{j=1}^m \delta_i(j) \nabla \tilde{x}_{(ij)} Mi(x,X~)=mλj=1∑mδi(j)∇x~(ij)
其中 X ~ = { x ~ ( 1 ) , … , x ~ ( m ) } \tilde{X} = \{\tilde{x}^{(1)}, \ldots, \tilde{x}^{(m)}\} X~={x~(1),…,x~(m)}是积分路径上的插值集合, δ i ( j ) \delta_i(j) δi(j) 是 x i x_i xi到 x ~ ( i j ) \tilde{x}_{(ij)} x~(ij) 的变化, ∇ x ~ ( i j ) \nabla \tilde{x}_{(ij)} ∇x~(ij)是在 x ~ ( i j ) \tilde{x}_{(ij)} x~(ij)点的梯度。
综上所述,作者提出的方法通过系统地选择合适的参考点、沿非线性路径积分梯度,并通过一系列精心设计的插值点来计算归因,从而提高特征归因方法的可靠性和精确度。
上述过程用pytorch代码实现的简单示例:
import torch
import torch.nn.functional as F
def compute_gradients(model, input, target_class):
"""
计算模型输出相对于输入的梯度。
"""
input.requires_grad = True
model.zero_grad()
output = model(input)
target = torch.tensor([target_class])
loss = F.nll_loss(output, target)
loss.backward()
return input.grad.data
def find_reference_point(input, gradient, step_size=0.01, num_steps=50):
"""
使用模型梯度来找到表示特征“缺失”的合适参考点。
"""
ref = input.clone()
for _ in range(num_steps):
ref -= step_size * gradient
gradient = compute_gradients(model, ref, target_class)
return ref
def compute_attribution(model, input, reference, target_class):
"""
计算从输入到参考点的归因。
"""
# 定义插值函数
def interpolate(input, reference, alpha):
return input + alpha * (reference - input)
# 积分归因
attribution = 0.0
num_steps = 50
for alpha in torch.linspace(0, 1, steps=num_steps):
interpolated_input = interpolate(input, reference, alpha)
gradient = compute_gradients(model, interpolated_input, target_class)
attribution += gradient
return attribution / num_steps
# 示例使用
model = ... # 你的模型
input = ... # 输入数据
target_class = ... # 目标类别
# 计算初始梯度
gradient = compute_gradients(model, input, target_class)
# 找到合适的参考点
reference = find_reference_point(input, gradient)
# 计算归因
attribution = compute_attribution(model, input, reference, target_class)
attribution归因的应用举例:
场景
假设我们有一个图像分类模型,该模型可以识别图像中是否有猫。我们输入一张包含猫和其他一些物体(如树、汽车等)的图像。我们的目标是理解模型识别出猫的决策是基于图像中哪些特定的部分。
使用归因
-
输入图像:将一张包含猫的图像输入到模型中。
-
计算归因:使用上述的归因计算方法,我们可以得到每个像素对模型识别“猫”这一类别的贡献度。这通常通过计算模型输出(“猫”类别)相对于每个输入像素的梯度来实现。
-
解释归因:
- 通过观察归因分数最高的像素,我们可以发现模型是如何关注猫的特定部位(如脸、耳朵、尾巴)来做出其判断的。
- 如果归因分数显示模型过分关注背景(如树或汽车),这可能表明模型的某些偏见或是训练数据不足。
-
可视化:通常会将归因分数以热图的形式叠加在原始图像上,其中较高的归因分数对应热图中较“热”(通常是红色或黄色)的区域。这样的可视化直观地展示了模型在做出分类决策时关注图像的哪些部分。
结果应用
- 模型优化:如果发现模型过于依赖不相关的特征,如背景而非猫的主体部分,我们可能需要调整或重新训练模型,以确保其关注更加相关的特征。
- 理解模型行为:归因可以帮助我们验证模型是否按照我们的期望在运作,例如是否真正学会识别猫,而非仅仅依靠图像中的某些背景特征。
归因在实际应用中提供了一个强大的工具,用于增进我们对复杂模型决策过程的理解,从而帮助我们改进模型,并增强用户对模型输出的信任。
高效归因重校准与有效参考
此算法的核心思想是通过考虑合法(有效)的参考点来重新校准积分。这些参考点是根据模型的梯度动态选择的,以确保积分路径是有效的。算法首先迭代所有可能的参考点,然后对于每个参考点,通过计算不同插值点上的梯度来估计积分。如果梯度方向与输入特征和参考点之间的差异一致,这个参考点被认为是有效的,并且用于计算归因。最后,这些归因被平均,以得到最终的特征归因。
算法概述
算法的目的是改进基于积分的归因方法,使其更加准确和可靠。核心思想是在进行积分时,选择那些使得梯度方向与输入特征和参考点之间差异方向一致的参考点。
算法步骤
-
初始化:
M ← ∅
:初始化一个空集合 M 用于存储归因结果。g¯ ← 0
:初始化一个变量 g¯ 为0,用于存储梯度的平均值。
-
迭代参考点:
for each x′ in D do
:对于参考集 D 中的每个参考点 x′,进行迭代。
-
计算插值和梯度:
for k ← 1 to n do
:对于每个插值步骤 k,从 1 到 n。x˜ ← x′ + k/n (x - x′)
:计算插值点 x˜。g¯ ← g¯ + ∂S_c(x˜)/∂x˜_i / n
:计算梯度并更新 g¯ 的值。
-
检查梯度方向:
if g¯ · (xi - x′_i) ≥ 0 then
:如果梯度方向与输入特征 xi 和参考点 x′_i 之间的差异方向一致,则进行下一步。
-
计算并累积归因:
M ← M ∪ (xi - x′_i) × g¯
:将当前特征的归因加入到 M 中。
-
最终归因计算:
Mi ← λ × avg(M)
: 计算最终的归因 Mi,这是 M 中所有归因的平均值乘以一个标量 λ。
算法特点
- 有效参考:通过选择那些满足特定条件的参考点,使得归因计算更加符合模型的实际决策过程。
- 计算效率:算法避免了额外的计算开销,使得重校准操作既有效又高效。
应用与意义
通过这种重校准技术,可以提高基于积分的归因方法的准确性和可靠性,从而使模型解释更加符合实际情况,同时保持计算效率。这对于需要高度准确和可解释的模型(如在医疗、金融等领域)尤为重要。
下面是一个算法1的简单实现,references 应该是一个包含多个参考点的列表。这些参考点可以是不同的图像或输入状态,代表了模型输入的不同“基线”状态。
import torch
import torch.nn.functional as F
def compute_gradients(model, input, target_class):
"""
计算模型输出相对于输入的梯度。
"""
input.requires_grad = True
model.zero_grad()
output = model(input)
target = torch.tensor([target_class])
loss = F.nll_loss(output, target)
loss.backward()
return input.grad.data
def attribution_recalibration(model, input, references, target_class, n_steps=50):
"""
对基于积分的归因方法进行重校准。
"""
# 初始化
M = []
avg_grad = 0
# 遍历每个参考点
for ref in references:
for k in range(1, n_steps + 1):
# 计算插值点
interp = ref + (k / n_steps) * (input - ref)
# 更新平均梯度
avg_grad += compute_gradients(model, interp, target_class) / n_steps
# 检查梯度方向
if (avg_grad * (input - ref)).sum() >= 0:
M.append((input - ref) * avg_grad)
# 计算最终归因
if len(M) > 0:
return sum(M) / len(M)
else:
return torch.zeros_like(input)
# 示例使用
model = ... # 你的模型
input = ... # 输入数据
target_class = ... # 目标类别
references = ... # 参考点集合
# 执行归因重校准
attribution = attribution_recalibration(model, input, references, target_class)
实验
选择的归因方法
实验中使用了五种流行的基于积分的归因方法作为基线方法:
- IG-Uniform (Sturmfels et al. 2020):通过从均匀噪声中采样参考点来定义多个参考点。
- IG-SG (Smilkov et al. 2017):在输入中加入高斯噪声作为参考点。
- IG-SQ (Hooker et al. 2019):在积分估计中对梯度进行平方。
- EG (Erion et al. 2021):使用训练图像作为参考点,假定训练分布作为参考。
- AGI (Pan et al. 2021):计算特定类别的对抗性样本作为参考点。
对于ImageNet-2012数据集的实验,选择了10个参考点和5次插值(k=5)用于IG-Uniform、IG-SG和IG-SQ。对于EG,选择了50个参考点和1次随机插值(k=1),并为AGI设置了10次插值(k=10)和5个特定类别的对抗性参考点。
选择的模型
实验中选择了三种深度模型,包括VGG-16、ResNet-34和PreActResNet-18,由不同的归因方法来解释。对于像素扰动和Sensitivity-n基准测试,VGG-16和ResNet-34网络在ImageNet-2012训练数据集上进行了训练。对于DiffROAR基准测试,首先在CIFAR-10和CIFAR-100训练数据集上分别训练PreActResNet-18模型。然后对PreActResNet-18进行微调,总共训练10个周期,初始学习率为10^-2,在第5和第7个周期时减少10倍。
实验的配置
在所有实验中,确保所有这些方法使用了相同数量的50次反向传播。考虑到CIFAR-10和CIFAR-100数据集的小输入尺寸,对所有基线归因方法采用了30次反向传播。此外,还包括了依赖于多次梯度计算的其他比较方法,包括Integrated Gradients (IG)和SmoothGrad (SG),它们也使用了相同的超参数设置。在IG中,为最终积分估计产生了50次插值(k=50)。在SG中,对带有高斯噪声的输入进行了50次梯度的平均。
这些实验配置为研究者提供了一个全面的框架,用于评估新提出的归因重校准技术在不同模型和数据集上的有效性和可靠性。
实验中使用的评价指标
1. 像素扰动性能(Pixel Perturbation Performance)
- 描述:像素扰动是一个广泛使用的量化评估指标,用于评价归因方法的性能。该指标通过迭代地移除最重要或最不重要的像素(像素插入和删除),并测量输出变化来量化归因方法的性能。
- DiffID指标:使用DiffID指标来衡量在插入k%最重要像素和删除1-k%最不重要像素的图像上的性能差异。
2. 移除和重新训练性能(Remove and Retrain Performance)
- 描述:为了减轻输入分布变化对模型性能的影响,使用了“移除和重新训练”(ROAR)指标。ROAR指标通过重新训练模型,使用像素扰动产生的扰动图像,并测量输出变化。
- DiffROAR指标:DiffROAR是ROAR的扩展,用于测试使用k%最重要和最不重要像素重新训练的模型之间的差异。在实验中,作者使用DiffROAR来彻底评估提出的技术的有效性,并增强了流行的归因方法IG-Uniform, IG-SG, IG-SQ, EG, 和 AGI进行评估。
3. 敏感度-n性能(Sensitivity-n Performance)
- 描述:Sensitivity-n是一个用来验证模型输出变化对归因方法指定的特征敏感度的指标。该指标要求归因总和与目标输出变化之间的匹配。它通过变化特征子集中的特征比例(在0.1到0.9的范围内)来进行测试。
- 皮尔逊相关系数(PCC):对于每个特征子集,随机采样100个不同的输入特征子集,然后计算归因总和与目标输出变化之间的皮尔逊相关系数(PCC)。PCC在ImageNet 2012验证集的1000张测试图像上进行平均。与传统归因方法相比,提出的重新校准方法在所有基线方法上通常显示出更好的敏感度-n结果。
本文提出方法的优势与劣势
在论文《Re-calibrating Feature Attributions for Model Interpretation》中提出的归因重校准技术与现有方法相比具有以下优势和劣势:
优势
-
整体性能提升:该技术在多个评估指标上显著提高了现有基于积分的归因方法的性能,包括像素扰动、DiffROAR和Sensitivity-n指标。
-
减少绝对值依赖:与原始方法相比,重校准技术减少了对取绝对值进行解释的依赖,从而提供了更准确和可靠的归因。
-
改进特定归因方法:该技术对某些特定的归因方法(如IG-Uniform、IG-SG和AGI)的改进尤为显著。
-
提高模型输出对特征变化的敏感性:重校准后的归因方法在Sensitivity-n指标上显示出更好的结果,表明其对模型输出变化的敏感性得到了提升。
劣势
-
复杂性增加:与传统方法相比,重校准技术可能增加了计算的复杂性,尤其是在识别合适的参考点和有效的插值点方面。
-
实现难度:新方法的实现可能比某些现有的归因方法更复杂,需要更深入的理解和精确的实现。
-
适用性局限:虽然该技术在多种数据集和模型上表现良好,但其适用性可能依赖于特定的应用场景和模型类型。
-
理论与实践之间可能的偏差:新技术虽然在理论上具有优势,但在实际应用中可能仍存在与理论预期不符的情况。
总体而言,尽管新的归因重校准技术在提高精确性和可靠性方面显示出显著的优势,但它也带来了更高的实现复杂性和可能的适用性限制。在选择使用新技术时,需要权衡其优势和潜在的劣势。