前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >积分梯度:一种新颖的神经网络可视化方法

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

作者头像
mathor
发布2021-05-20 14:55:32
1.7K0
发布2021-05-20 14:55:32
举报
文章被收录于专栏:mathormathor

本文介绍一种神经网络的可视化方法:积分梯度(Integrated Gradients),它首先在论文《Gradients of Counterfactuals》中提出,后来《Axiomatic Attribution for Deep Networks》再次介绍了它,两篇论文作者都是一样的,内容也大体上相同,后一篇相对来说更易懂一些,如果要读原论文的话,建议大家优先读后一篇。当然,它已经是2016~2017年间的工作了,“新颖”说的是它思路上的创新有趣,而不是指最近发表

所谓可视化,简单来说就是对于给定的输入x以及模型F(x),我们想办法指出x的哪些分量对模型的决策有重要影响,或者说对x各个分量的重要性做个排序(在不同的领域,这些分量所指代也不同,例如图CV中可能指的是每个像素,NLP中指的可能是一个词)。一个朴素的思路是直接使用梯度\nabla_x F(x)来作为x各个分量的重要性指标,而积分梯度是对它的改进

朴素梯度

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

\begin{equation}F(x+\Delta x) - F(x) \approx \langle\nabla_x F(x), \Delta x\rangle=\sum_i [\nabla_x F(x)]_i \Delta x_i\label{eq:g}\tag{1}\end{equation}

我们知道\nabla_x F(x)是大小跟x一样的向量,这里[\nabla_x F(x)]_i为它的第i个分量,那么对于同样大小的\Delta x_i[\nabla_x F(x)]_i的绝对值越大,那么F(x+\Delta x)相对于F(x)的变化就越大,也就是说:

[\nabla_x F(x)]_i衡量了模型对输入的第i个分量的敏感程度,所以我们用|[\nabla_x F(x)]_i|作为第i个分量的重要性指标

这种思路比较简单直接,在论文《How to Explain Individual Classification Decisions》《Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps》都有描述都有描述,在很多时候它确实也可以成功解释一些预测结果,但它也有明显的缺点。很多文章提到了饱和区的情况,也就是一旦进入到了饱和区(典型的就是relu的负半轴),梯度就为0了,那就揭示不出什么有效信息了

从实践角度看,这种理解是合理的,但是笔者认为还不够深刻。从之前的文章NLP 中的对抗训练可以看出,对抗训练的目标可以理解为就是在推动着\Vert \nabla_x F(x)\Vert ^2\to 0,这也就可以理解为,梯度是可被"操控"的,我们可以让梯度尽可能接近于0,并且还不会影响模型预测准确率。所以,回到本文的主题,那就是:[\nabla_x F(x)]_i确实衡量了模型对输入的第i个分量的敏感程度,但敏感程度不足以作为重要性的良好度量

这里插一个李宏毅老师课程当中提到的例子。大象的鼻子对神经网络将一个物体识别为大象的决策很重要,但当大象的鼻子长度增加到一定程度后(比如1米),继续增加不会带来决策分数的增加,导致输出对输入特征的梯度为0,所以单纯利用梯度在某些情况下确实不太合理

梯度积分

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

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

比方说我们通过平衡语料统计出来的"参照"词频表中,"的"出现了2000次,"小龙虾"出现了2次,而最近一段时间网络上的词汇经统计后,发现"的"出现了2005次,"小龙虾"出现了3000次。通过相较于"参照"词频表,"小龙虾"是当前的热门词

当然,很多场景下我们可以简单地让\bar{x}=0,但这未必是最优的,比如我们还可以选择\bar{x}为所有训练样本的均值。我们期望F(\bar{x})应当给一个比较平凡的预测结果,例如对于分类模型来说,\bar{x}的预测结果应该是每个类的概率很均衡。于是我们去考虑F(\bar{x})-F(x),我们可以想象为这是从x移动到\bar{x}的成本

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

F(\bar{x}) - F(x) \approx \sum_i [\nabla_x F(x)]_i[\bar{x} - x]_i\tag{2}

对于上式,我们有一种新的理解:从x移动到\bar{x}的总成本为F(\bar{x})-F(x),它是每个分量的成本之和,而每个分量的成本近似为[\nabla_x F(x)]_i[\bar{x}-x]_i,所以我们可以用|[\nabla_x F(x)]_i[\bar{x}-x]_i|作为第i个分量的重要性指标

当然,不管是[\nabla_x F(x)]_i还是|[\nabla_x F(x)]_i[\bar{x}-x]_i|,它们的缺陷在数学上都是一样的(梯度消失),但是对应的解释却并不一样。前面说了,[\nabla_x F(x)]_i的缺陷源于"敏感程度不足以作为重要性的良好度量",而纵观这一小节的推理过程,|[\nabla_x F(x)]_i[\bar{x}-x]_i|的缺陷则只是因为"等式(2)仅仅是近似成立的",但整个推理的逻辑是没问题的

积分恒等

很多时候一种新的解释能带给我们新的视角,继而启发我们做出新的改进。比如前面对缺陷的分析,说白了就是说"\gamma(\alpha),\alpha\in[0,1]代表连接x\bar{x}的一条参数曲线,其中\gamma(0)=x,\gamma(1)=\bar{x},那么我们有

可以看到,式(3)具有跟式(2)一样的形式,只不过将[\nabla_x F(x)]_i[\bar{x}-x]_i换成了\int_0^1 \left[\nabla_{\gamma} F(\gamma(\alpha))\right]_i \left[\gamma'(\alpha)\right]_i d\alpha。但式(3)是精确的积分恒等式,所以积分梯度就提出使用

\begin{equation}\left|\int_0^1 \left[\nabla_{\gamma} F(\gamma(\alpha))\right]_i \left[\gamma'(\alpha)\right]_i d\alpha\right|\label{eq:ig-1}\tag{4}\end{equation}

作为第i个分量的重要性度量。作为最简单的方案,自然就是将\gamma(\alpha)取为两点间的直线,即

\gamma(\alpha) = (1-\alpha)x + \alpha \bar{x}\tag{5}

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

\begin{equation}\left|\left[\int_0^1 \nabla_{\gamma} F(\gamma(\alpha))\big|_{\gamma(\alpha) = (1 - \alpha) x + \alpha \bar{x}}d\alpha\right]_i \left[\bar{x}-x\right]_i\right|\tag{6}\end{equation}

所以相比|\nabla_xF(x)[\bar{x}-x]_i|的话,就是用梯度积分\int_0^1 \nabla_{\gamma} F(\gamma(\alpha))\big|_{\gamma(\alpha) = (1 - \alpha) x + \alpha \bar{x}}d\alpha替换\nabla_x F(x),也就是从x\bar{x}的直线上每一点的梯度的平均结果。直观上来看,由于考虑了整条路径上的所有点的梯度,因此就不再受某一点梯度为0的限制了

离散近似

最后就是这个积形式的量怎么算呢?其实也简单,根据积分的"近似-取极限"定义,我们直接用离散近似就好,以式(6)为例,它近似于:

\begin{equation}\left|\left[\frac{1}{n}\sum_{k=1}^n\Big(\nabla_{\gamma} F(\gamma(\alpha))\big|_{\gamma(\alpha) = (1 - \alpha) x + \alpha \bar{x}, \alpha=k/n}\Big)\right]_i \left[\bar{x}-x\right]_i\right|\tag{7}\end{equation}

所以还是那句话,本质上就是"从\bar{x}的直线上每一点的梯度的平均",比单点处的梯度效果更好

原始效果

原始论文实现:https://github.com/ankurtaly/Integrated-Gradients。下面是原论文的一些效果图:

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

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

Captum

实际上并不需要我们手动实现积分梯度,Facebook的研究人员开源了一个名为Captum的库可以直接使用,这里我看了下官方的Tutorial感觉并不难理解,所以我也就不详细解释了,直接贴出链接大家去看吧

如果仅仅是简单的分类问题,例如情感分类,我们想知道模型到底为什么能知道这是积极/消极句子,或者说模型通过看到了哪些词认为这是一个积极/消极句子,可以通过这个例子查看

References
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 朴素梯度
  • 梯度积分
  • 积分恒等
  • 离散近似
  • 原始效果
  • Captum
  • References
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档