©PaperWeekly 原创 · 作者|苏剑林

单位|追一科技

研究方向|NLP、神经网络

本文介绍一种神经网络的可视化方法:积分梯度(Integrated Gradients),它首先在论文 Gradients of Counterfactuals [1] 中提出,后来 Axiomatic Attribution for Deep Networks [2] 再次介绍了它,两篇论文作者都是一样的,内容也大体上相同,后一篇相对来说更易懂一些,如果要读原论文的话,建议大家优先读后一篇。

当然,它已经是 2016-2017 年间的工作了,“新颖”说的是它思路上的创新有趣,而不是指最近发表。

所谓可视化,简单来说就是对于给定的输入 x 以及模型 F(x),我们想办法指出 x 的哪些分量对模型的决策有重要影响,或者说对 x 各个分量的重要性做个排序,用专业的话术来说那就是“归因”。一个朴素的思路是直接使用梯度











来作为 x 各个分量的重要性指标,而积分梯度是对它的改进。

然而,笔者认为,很多介绍积分梯度方法的文章(包括原论文),都过于“生硬”(形式化),没有很好地突出积分梯度能比朴素梯度更有效的本质原因。本文试图用自己的思路介绍一下积分梯度方法。

朴素梯度

首先,我们来学习一下基于梯度的方法,其实它就是基于泰勒展开:

我们知道











是大小跟 x 一样的向量,这里
















为它的第 i 个分量,那么对于同样大小的








,















的绝对值越大,那么










相对于







的变化就越大,也就是说:


















衡量了模型对输入的第 i 个分量的敏感程度,所以我们用


















作为第 i 个分量的重要性指标。

这种思路比较简单直接,在论文 How to Explain Individual Classification Decisions [3] 和 Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps [4] 都有描述,在很多时候它确实也可以成功解释一些预测结果,但它也有明显的缺点。

很多文章提到了饱和区的情况,也就是一旦进入到了饱和区(典型的就是




的负半轴),梯度就为 0 了,那就揭示不出什么有效信息了。

从实践角度看,这种理解是合理的,但是笔者认为还不够深刻。从之前的文章对抗训练浅谈:意义、方法和思考(附 Keras 实现)可以看出,对抗训练的目标可以理解为就是在推动着


















,这也就可以理解为,梯度是可以被“操控”的,哪怕不影响模型的预测准确率的情况下,我们都可以让梯度尽可能接近于0。

所以,回到本文的主题,那就是:
















确实衡量了模型对输入的第 i 个分量的敏感程度,但敏感程度不足以作为重要性的良好度量。

积分梯度

鉴于直接使用梯度的上述缺点,一些新的改进相继被提出来,如 LRP [5]、DeepLift [6] 等,不过相对而言,笔者还是觉得积分梯度的改进更为简洁漂亮。

2.1 参照背景

首先,我们需要换个角度来理解原始问题:我们的目的是找出比较重要的分量,但是这个重要性不应该是绝对的,而应该是相对的。比如,我们要找出近来比较热门的流行词,我们就不能单根据词频来找,不然找出来肯定是“的”、“了”之类的停用词,我们应当准备一个平衡语料统计出来的“参照”词频表,然后对比词频差异而不是绝对值。这就告诉我们,为了衡量 x 各个分量的重要性,我们也需要有一个“参照背景”









当然,很多场景下我们可以简单地让











,但这未必是最优的,比如我们还可以选择









为所有训练样本的均值。我们期望












应当给一个比较平凡的预测结果,比如分类模型的话,









的预测结果应该是每个类的概率都很均衡。于是我们去考虑

















,我们可以想象为这是从 x 移动到









的成本。

如果还是用近似展开(1),那么我们将得到:

对于上式,我们就可以有一种新的理解:

从 x 移动到









的总成本为

















,它是每个分量的成本之和,而每个分量的成本近似为





























,所以我们可以用































作为第i个分量的重要性指标。

当然,不管是
















还是































它们的缺陷在数学上都是一样的(梯度消失),但是对应的解释却并不一样。前面说了,
















的缺陷源于“敏感程度不足以作为重要性的良好度量”,而纵观这一小节的推理过程,































的缺陷则只是因为“等式(2)仅仅是近似成立的”,但整个逻辑推理是没毛病的。

2.2 积分恒等

很多时候一种新的解释能带给我们新的视角,继而启发我们做出新的改进。比如前面对缺陷的分析,说白了就是说“































不够好是因为式(2)不够精确”,那如果我们直接能找到一个精确相等的类似表达式,那么就可以解决这个问题了。

积分梯度正是找到了这样的一个表达式:设















代表连接 x 和









的一条参数曲线,其中





















,那么我们有:

可以看到,式(3)具有跟(2) 一样的形式,只不过将





























换成了 。但式(3) 是精确的积分恒等式,所以积分梯度就提出使用:

作为第i个分量的重要性度量。作为最简单的方案,自然就是将







取为两点间的直线,即:

这时候积分梯度具体化为:

所以相比































的话,就是用梯度的积分

替换











,也就是从 x 到









的直线上每一点的梯度的平均结果。直观来看,由于考虑了整条路径上的所有点的梯度,因此就不再受某一点梯度为 0 的限制了。

如果读者看了积分梯度的两篇原始论文,就会发现原论文的介绍是反过来的:先莫名其妙地给出式(6),然后再证明它满足两点莫名其妙的性质(敏感性和不变性),接着证明它满足式(3)。

总之就是带着读者做了一大圈,就是没说清楚它是一个更好的重要性度量的本质原因——大家都是基于对

















的分解,而式(3)比式(2)更为精确。

2.3 离散近似

最后就是这个积分形式的量怎么算呢?深度学习框架没有算积分的功能呀。其实也简单,根据积分的“近似-取极限”定义,我们直接用离散近似就好,以式(6)为例,它近似于:

所以还是那句话,本质上就是“从 x 到









的直线上每一点的梯度的平均”,比单点处的梯度效果更好。

实验效果

看完了理论,我们再来看看实验效果。

3.1 原始效果

原始论文实现:

https://github.com/ankurtaly/Integrated-Gradients

下面是原论文的一些效果图:

▲ 原论文中对梯度和积分梯度的比较(CV任务,可以看到积分梯度能更精细地突出重点特征)

▲ 原论文中对梯度和积分梯度的比较(NLP任务,红色为正相关,蓝色是负相关,灰色为不相关)

3.2 个人实现

虽然 Keras 官网已经给出了参考实现了(请看这里 [7] ),但代码实在是太长,看着太累,笔者根据自己的理解也用 Keras 实现了一个,并应用到了 NLP 中,具体代码见:

https://github.com/bojone/bert4keras/blob/master/examples/task_sentiment_integrated_gradients.py

目前的代码仅仅是简单的 demo,欢迎读者在此基础上派生出更强大的代码。

▲ 笔者在中文情感分类上对积分梯度的实验效果(越红的token越重要)

上图中笔者给出了几个样本的效果(模型对上述样本的情感标签预测都是正确的),由此我们可以推测原模型进行情感分类的原理。从上图我们可以看到,对于负样本,积分梯度可以比较合理地定位到句子中的负面词语,而对于正样本,哪怕它的语法格式跟负样本一样,却无法定位到句子中的正面词语。

这个现象表明,原模型做情感分类的思路可能是“负面检测”,也就是说主要做负面情绪检测,而检测不到负面情绪则视为正样本,这大概是因为没有“中性”样本训练所带来的结果。

又到文末

本文介绍了一种称为“积分梯度”的神经网络可视化方法,利用它可以一定程度上更好描述输入的各个分量的重要程度。积分梯度通过沿着路径对梯度进行积分来构建了精确的等式,弥补了泰勒展开的不足,从而达到了比直接使用梯度更好的可视化效果。

参考文献

[1] https://arxiv.org/abs/1611.02639

[2] https://arxiv.org/abs/1703.01365

[3] https://arxiv.org/abs/0912.1128

[4] https://arxiv.org/abs/1312.6034

[5] https://arxiv.org/abs/1604.00825

[6] https://arxiv.org/abs/1704.02685

[7] https://keras.io/examples/vision/integrated_gradients/

更多阅读

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

积分梯度:一种新颖的神经网络可视化方法相关推荐

  1. 只需一次向前推导,深度神经网络可视化方法来了!(ECCVW 2022)

    作者 | Ziyang Li  编辑 | 汽车人 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 导读 本文首次提出可学习的 ...

  2. 神经网络可视化方法总结

    目录 1--利用netron库可视化神经网络 2--利用tensorboard可视化神经网络 3--FCNN实现Mnist数据集分类的tensorboard可视化 4--参考 ​​​​​​​​​​​​ ...

  3. 新冠肺炎疫情数据爬取以及几种简单的地图可视化方法

    众所周知,新冠肺炎疫情是一次很流行的全球性公共卫生事件.如今我国疫情已经好了许多,但世界各国的疫情依然严峻.特殊时期,正好尝试一下疫情网络数据的抓取,并用几种python库对数据进行简单的地图可视化( ...

  4. 可解释性与积分梯度 Integrated Gradients

    积分梯度是一种神经网络可解释性方法 此方法首先在论文<Gradients of Counterfactuals>中提出,后来 <Axiomatic Attribution for D ...

  5. 深度神经网络可视化技术

    深度神经网络可视化技术 深度学习模型表述的难点与意义 深度神经网络的可视化 云脑 Deepro 采用的 CNN 可视化 独立单元激活的可视化 图案和区域生成法 云脑 Deepro 采用的 RNN 可视 ...

  6. 神经网络可解释性的另一种方法:积分梯度,解决梯度饱和缺陷

    作者|hahakity,https://zhuanlan.zhihu.com/p/148105536 本文已获作者授权,不得二次转载 今天介绍一种特定的神经网络可解释性方法 -- 积分梯度法 (Int ...

  7. DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练、预测

    DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练.预测 导读 利用python的numpy计算库,进行自定义搭建2层神经网络TwoLayerN ...

  8. 磁共振指纹:一种新颖的定量磁共振技术

    前言 磁共振指纹(MRF,MR fingerprinting)是一种新颖的定量磁共振技术,可以在较短的扫描时间内同时量化多种组织特性.自2013年首次发表在<Nature>杂志上以来,该技 ...

  9. 经典论文-卷积神经网络可视化与理解及实践

    Visualizing and Understanding Convolutional Networks 卷积神经网络的可视化与理解 作者:Matthew D. Zeiler, Rob Fergus ...

最新文章

  1. 仿qq左滑删除listview_Java基于Swing和Netty仿QQ界面聊天小项目
  2. 学习python装饰器_Python装饰器学习(九步入门)
  3. JVM GC耗时频频升高,这次排查完想说:还有谁?
  4. sonarqube代码检核工具安装
  5. 当前用户安装anaconda,不需要sudo权限
  6. echarts 柱状图点击事件
  7. postman - github下载地址
  8. 协助数据库完成大数据实时查询
  9. 如何通过安全的网络防御XcodeGhost?
  10. X509TrustManager信任SSL证书
  11. 游戏google广告添加详解
  12. substring字符串截取
  13. android 键盘自适应,Android输入框布局如何随键盘变化
  14. 农村房屋房产证怎么申请
  15. 你要的项目复盘都在这里,赶紧学习
  16. bayaim_当前国内外Hadoop的实际使用案例
  17. 27款国外最新Photoshop色板
  18. 用matlab解方程组例子,Matlab求解超定方程组实例
  19. Fiddler对手机或模拟器的网络请求抓包
  20. Tomcat不自动解压war包

热门文章

  1. 工厂模式的python实现
  2. bzoj4427【Nwerc2015】Cleaning Pipes清理管道
  3. DataSet转化为DataTable
  4. iOS --- DIY文件名批量修改
  5. [Objective-C] 020_ Block
  6. HDU 5389 Zero Escape
  7. 5. Binary Tree Postorder Traversal
  8. [Android] Android开发优化之——使用软引用和弱引用
  9. Ajax(一)显示可用内存空间
  10. 正则表达式学习 (一) 转