当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > Captum 的 convergence delta 怎样帮助判断积分近似误差

Captum 的 convergence delta 怎样帮助判断积分近似误差

来源:17golang原创 2026-10-30 15:32:10 0浏览 收藏

在 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 通常就有几个元素。它回答的是“这次积分近似是否把输出差解释得足够接近”,而不是“哪一个特征一定重要”。

Captum 输入、baseline、目标输出、归因总和与 convergence delta 的静态结构关系说明图
图1:结构说明图,查看输入与 baseline 的输出差、归因总和以及 convergence 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 等规则。

Captum n_steps、Riemann 方法、Gauss-Legendre、attributions 与每样本 delta 的静态依赖关系说明图
图2:结构说明图,查看 n_steps 与积分方法如何影响归因结果和每样本 delta。

工程上可以固定一批代表性输入,先用默认配置取得 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 提供这一能力。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Redis FUNCTION RESTORE 的 APPEND 与 REPLACE 有什么区别Redis FUNCTION RESTORE 的 APPEND 与 REPLACE 有什么区别
上一篇
Redis FUNCTION RESTORE 的 APPEND 与 REPLACE 有什么区别
GitLab Orbit 新演示怎样串联漏洞涉及的项目和责任人
下一篇
GitLab Orbit 新演示怎样串联漏洞涉及的项目和责任人
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    796次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    786次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    874次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    841次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    674次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码