让 AI 算积分梯度:终点斜率为零,特征贡献为何仍然非零
检查分类器是否依赖某个输入时,人们常看当前位置的梯度。可模型输出已经饱和,局部再改一点输入不会改变分数,梯度便可能为零。积分梯度沿基线到当前输入的整条路径累计变化,适合用来检查这种局部信息的遗漏。先算一个小函数,就能看清归因回答了什么。
AI模型生成的概念插图:到达平台前的路径仍有变化;不是精确函数图、训练截图或真实特征热图。
终点已经停在平台上
原创函数F(x₁,x₂)先将x₁+x₂与0取较大值,再与1取较小值。它在和小于0时输出0,在0到1之间线性增加,和大于1后保持1。取输入x=(1.5,0.5),和为2,输出为1;当前两个偏导数都是0。
基线先取b=(0,0),其输出为0。若把终点梯度直接乘输入,两个归因都会是0,但输出相对基线实际增加了1。终点梯度只描述平台附近的微小扰动,不能据此断言两个特征都没有参与这次输出变化。
把路径分成有斜率和没斜率的两段
用t从0走到1,直线路径是b+t(x-b)=(1.5t,0.5t),两项之和为2t。当0小于t小于0.5时,F对每个输入的偏导数都是1;当0.5小于t小于1时,两项偏导数都为0。转折点处的不可导不会改变这一积分结果。
积分梯度的每项等于该特征的输入差,乘沿路径的偏导积分。因此第一项为1.5×0.5=0.75,第二项为0.5×0.5=0.25。二者相加为1,恰好等于F(x)-F(b)。这是完整性检查,核对的是输出差,不能漏掉基线输出。
也能把路径切成许多等长小段,取每段中点的梯度再平均。本次程序分别用解析分段和6000个中点核算,得到相同的0.75与0.25。实际网络的数值积分可能有误差,应同时记录步数与归因总和偏离输出差多少。
基线改变,问题也跟着改变
现在保持输入不变,只把基线改为(0.5,0),基线输出为0.5。路径的和是0.5+1.5t,到t=1/3便饱和。输入差为(1,0.5),两项归因变成1/3和1/6,加起来0.5,仍等于新的输出差。
这两份结果没有互相否定。第一份解释从全零出发增加的1,第二份解释在已有0.5输出后又增加的0.5。报告归因时若只留彩色热图,不写基线和所解释的输出量,读者便无法判断数字对应哪个比较。
让AI交付函数、输入、基线、路径表达式、每段偏导和两项积分,再以输出差核算总和。还应声明解释的是某类logit、概率,还是回归值;这些量经过非线性变换后,归因数值不会天然相同。不要只验算终点一次梯度。
积分路径中的中间输入可能不符合真实数据,例如两幅图像之间的混合未必是自然图像。因此归因是给定模型、基线和路径下的解释,不自动证明现实因果作用。基线选择与真实输入语义是否合适,需要结合具体任务检查;这份算例只验证机制。
资料核对日期:2026年10月2日。算例为原创教学设定,已用独立程序复核,未进行真实模型训练或效果测试。


