Captum 的 convergence delta 怎样帮助判断积分近似误差
在 Captum 的 IntegratedGradients 里,convergence delta 不是模型分类准确率,也不是特征重要性的分数。它来自 completeness 关系:输入样本的模型输出与 baseline 的模型输出之差,应该接近所有特征 attribution 的总和。这个“接近程度”的逐样本差值,就是判断积分近似是否足够细的一个信号。
官方地址:https://captum.ai/api/integrated_gradients.html
如果 delta 的绝对值在同一批样本、同一输出尺度下明显变小,通常说明积分离散化更接近;如果它很大,优先比较n_steps、method、baseline 和模型输出尺度,不要直接断言“模型解释错误”。
先看懂 convergence delta 在比较什么
Integrated Gradients 从 baseline 走向真实输入,沿直线路径累积模型输出对输入的梯度。理想情况下,归因总和应满足:
sum(attributions) ≈ forward(inputs) - forward(baselines)
Captum 返回的 delta 正是围绕这条关系计算的差值,而且按样本返回;输入 batch 有几个样本,delta 通常就有几个元素。它回答的是“这次积分近似是否把输出差解释得足够接近”,而不是“哪一个特征一定重要”。

因此,比较 delta 时要保持比较条件一致:同一个模型、同一批输入、同一 target、同一种 baseline 语义和相近的输出尺度。换了 baseline 后,输出差本身也可能改变,不能只看 delta 的大小就评价两套解释谁更好。
用 return_convergence_delta 读出每个样本信号
attribute 默认只返回 attribution。把 return_convergence_delta 设为 True 后,返回值变成 attribution 与 delta 的二元组。分类模型通常要传 target;如果模型对每个样本只返回一个标量,则可以不传 target。
import torch
from captum.attr import IntegratedGradients
# forward_func 可以是模型,也可以是只取某个输出的包装函数
ig = IntegratedGradients(model)
# 这里用零 baseline 只是示例,实际要按输入语义选择
baselines = torch.zeros_like(inputs)
# target 指定要解释的类别;n_steps 控制积分近似的采样规模
attributions, delta = ig.attribute(
inputs,
baselines=baselines,
target=target,
n_steps=50,
method="gausslegendre",
return_convergence_delta=True,
)
# delta 是每个样本一个值;只把它当作同尺度下的近似误差信号
delta_abs = delta.detach().abs()
largest_gap = delta_abs.max().item()
print("最大绝对 convergence delta:", largest_gap)
上面的 largest_gap 适合做批次内的快速筛查,但阈值不能脱离任务直接硬编码。例如 logits、概率和回归值的量纲不同;同一个绝对阈值在不同输出空间里没有同样的含义。更稳妥的做法是保存每个样本的 delta,再按输出尺度、分位数或业务容忍度制定规则。
用 n_steps 和 method 做对比
delta 偏大时,第一组可控变量是积分近似本身。Captum 的默认 n_steps 是 50,默认 method 是 gausslegendre;也支持 riemann_left、riemann_right、riemann_middle 和 riemann_trapezoid 等规则。

工程上可以固定一批代表性输入,先用默认配置取得 delta,再只提高 n_steps 或更换求积规则做对照:
def measure_delta(ig, inputs, baselines, target, n_steps, method):
# 用相同输入与 baseline 对比积分参数,避免把变量混在一起
_, delta = ig.attribute(
inputs,
baselines=baselines,
target=target,
n_steps=n_steps,
method=method,
return_convergence_delta=True,
)
# 返回每个样本的绝对差值,供外部记录和横向比较
return delta.detach().abs()
baseline_delta = measure_delta(ig, inputs, baselines, target, 50, "gausslegendre")
denser_delta = measure_delta(ig, inputs, baselines, target, 100, "gausslegendre")
# 这里只比较两次结果,不把变化直接解释成模型质量变化
improved = denser_delta.mean()
如果增加 n_steps 后 delta 稳定下降,说明原配置的离散化可能偏粗;如果变化很小,继续加步数的收益有限。若换 method 后结果差异明显,则应把求积规则作为实验记录的一部分,而不是只保存最终 attribution。
别把 delta 当成绝对正确率
convergence delta 只覆盖积分近似与 completeness 关系,不能替代 baseline 选择、target 选择或模型行为分析。零 baseline 对图像、表格和文本的含义不同;对文本或嵌入输入,零向量未必代表“缺失输入”。此外,非线性很强、输出变化很大或模型带有特殊控制流时,delta 的解释也需要结合任务语义。
一个实用的决策顺序是:先确认 target 与 baseline 是否表达了正确的问题,再固定样本比较 n_steps,最后比较不同 method。只有在这些条件一致时,delta 的下降才适合被记录为“积分近似更稳定”的证据。
| 现象 | 优先检查 | 合适动作 |
|---|---|---|
| delta 偏大且加步数后下降 | 离散化是否过粗 | 提高 n_steps,并记录计算成本 |
| delta 小但解释不符合业务直觉 | baseline、target 与输入语义 | 重新定义比较基准,不要只调阈值 |
| 不同样本 delta 差异很大 | 输出尺度和样本分布 | 保留逐样本数据,避免只看平均值 |
常见问题
delta 是不是越接近零越好?在同一模型、同一输出尺度、同一输入与 baseline 条件下,通常可以把更小的绝对 delta 视为更接近 completeness 的近似结果;它不是跨模型、跨任务的通用评分。
为什么换 baseline 后 delta 变了?因为 baseline 改变了积分起点,也改变了 forward(inputs) - forward(baselines) 这条比较关系。先确定 baseline 的业务语义,再比较数值。
什么时候应该调用 has_convergence_delta?如果你在统一封装多种 Captum attribution 算法,可以先用它判断该算法是否提供 convergence delta;IntegratedGradients 提供这一能力。
Redis FUNCTION RESTORE 的 APPEND 与 REPLACE 有什么区别
- 上一篇
- Redis FUNCTION RESTORE 的 APPEND 与 REPLACE 有什么区别
- 下一篇
- GitLab Orbit 新演示怎样串联漏洞涉及的项目和责任人
-
- 科技周边 · 人工智能 | 49分钟前 |
- Captum Saliency 怎样为多分类模型指定目标输出
- 385浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | PyTorch Baseline Captum IntegratedGradients
- Captum IntegratedGradients 怎样选择输入基线
- 284浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 |
- PEFT 怎样分别启用和停用模型中的 LoRA 层
- 483浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 | LoRa PEFT merge_and_unload
- PEFT 怎样在合并适配器后恢复基础模型接口
- 185浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 |
- Hugging Face Tokenizers 怎样为句对配置后处理模板
- 420浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- Hugging Face Tokenizers 怎样组合多个文本正规化器
- 415浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | ai · CrossEncoder Sentence Transformers 文档重排
- Sentence Transformers 怎样用 CrossEncoder 对候选文档重排
- 224浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | 人工智能 · 向量数据库 · 向量检索 Sentence Transformers 嵌入向量 二进制量化
- Sentence Transformers 怎样用二进制量化保存嵌入向量
- 150浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | 性能优化 · 人工智能 · ONNX Runtime InferenceSession SessionOptions 图优化
- ONNX Runtime 怎样为指定会话选择图优化等级
- 269浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- ONNX Runtime 怎样把优化后的模型另存为文件
- 372浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | python · 人工智能 · Optuna 超参数优化 MedianPruner 中间指标
- Optuna MedianPruner 怎样结合中间指标提前停止试验
- 298浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 796次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 786次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 874次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 841次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 674次使用
-
- 量化模型本地推理的显存估算方法
- 2026-10-17 501浏览
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览

