hahakity 原创
现在网上有个新概念 XAI, 全称 Explainable Artificial Intelligence, 中文翻译为可解释人工智能,又称 AI 3.0。与目前的黑盒子 AI 相比,XAI 堪称 deep learner 的梦中情人,她将拥有众多美德,比如可靠性,可解释性,负责性,透明性。这些美德对于 AI 在各行各业的部署至关重要,比如自动驾驶,医学诊断,政府决策,军事无人机等等。AI 在这些领域的部署都事关人命,如果不清楚 AI 如何做出决策,那么绝对不可能也不应该在这些关系国计民生甚至是人类未来命运的领域得到广泛部署。在强人工智能出现之前,我们不用担心如何约束AI,而应聚焦于如何解释AI做出的每一个决定。
可靠性:机器学习模型在重要领域部署之前应该达到足够的预测精度,而且精度不能因为世异时移而降低,拥有在线更新能力,与时俱进。同时,应该在对抗样本上经过充分训练,对简单的对抗样本攻击免疫。
可解释性:机器学习模型分白盒子模型和黑盒子模型。简单的线性模型,单棵决策树属于白盒子模型,其将输入映射为输出的方式,可被人类完全理解。而由许多决策树组成的随机森林,提升树,以及深度神经网络都属于黑盒子模型。这些模型输入到输出的映射非常复杂,就像吃进去的是草,挤出来的是奶的奶牛一样,想完整了解整个机器的内部运作方式,几乎不可能。虽然前途艰险,但总有英雄负重前行。到目前为止,已经有很多这方面的研究,后文会聚焦于这个性质。
负责任:其决策需要符合人类的价值观,世界观和道德观,要公平无偏见,拥有对这个世界的热爱,对造物主人类的感恩,对人类文明传承的责任感。斯坦福的以人为本AI研究院走的就是这条路。
透明性:机器需要对不确定的输入和输出及时预警,报错,并将最终决策权交予人类。其内部决策过程,需要时刻以可视化,或其他人类智能可理解的方式呈现给人类观察员。透明性非常重要,在最近的两起波音737 Max飞机坠毁事故中,其中一起人类与自动控制系统搏斗了10分钟,最终不敌自动控制系统而无奈坠毁。如果机器做出决策的过程透明,有预警,并及时向人类观察员移交控制权,那么将可避免此事故。这可能是一个不正确的例子,因为波音飞机的这部分自动控制系统并没有用到人工智能技术。
什么是可解释能力
Towards A Rigorous Science of Interpretable Machine Learning 这篇文章中给出的定义是:可解释能力是以人类能理解的方式解释或表达的能力。这个定义中的关键词是“人类能理解的方式”。
Lipton 的 文章 The Mythos of Model Interpretability 试图说明什么是可解释性,他在文章中问了很多发人深思的问题。比如,我们什么时候需要可解释能力?如果一个模型的精确度很高,百分百正确,我们可能不需要可解释能力。如果一个模型精度不够高,我们就会急切想知道机器为何出错。如果机器出错的地方,也是人类出错的地方,那么人们可能将心比心,不会削弱对机器的信任。对于人类不容易出错,但机器却出错的地方,人类对机器的信任度就会急剧降低。比如对抗样本攻击,在熊猫图片中加些精心设计的噪声,人类仍然能容易的识别出是熊猫,机器却会将其判断为长臂猿。这时候,人类就急切的需要知道机器为何会做出这种判断。人类需要可解释能力的另一个原因是机器与人类目标的错位。有时候人类想要的是因果关系,但监督学习给出来的只是相关关系。还有可能机器在offline 数据上做了训练,但当部署到日常生活中,会有输入不一致,输入随时间变化,输入空间因为机器的部署而发生变化等各种问题。这种时候,人类一定想知道究竟发生了什么呢?是不是输入空间的一个很小的改变,引起了蝴蝶效应般的模型输出的发散?类似的输入会不会得到稳定的输出?我们知不知道模型的每一个参数代表什么意思?
可解释性是一个很宽泛的概念。比如我们知道模型出错的概率是多少,知道对于哪些输入会出错是可解释性。知道模型如何运作,对输入的某个特征微调,模型的输出与人类的经验符合算可解释性。而且,线性模型不一定比深度神经网络的可解释性好。为了达到相同的预测精度,线性模型可能利用了非常复杂的手工构造的特征,而很多这样的特征是不可分解的。相反,神经网络的特征 activation map 可以通过语言,可视化以及聚类的方法被人类所理解。给图像打标签的任务,就是一种对深度学习分类器的语言解释。而 Saliency map 则是可视化解释。聚类也是一种解释,如果一只狗长得很像猫,机器将其误判为猫的错误就很容易被人类谅解。
去年的新文章,Learning to Explain with Complemental Examples ,这篇文章很有意思,在训练分类器的时候,同时训练了一个基于语言的解释器,告诉人类它是基于什么做出的判断。不仅于此,它会从训练样本中挑选出很多与输入图片有相似特征以及不同特征的图片,来作为其言语解释的佐证。比如下图,神经网络在做出判断 -- 此鸟种类为朱红霸鹟(英文俗名 Vermilion Flycatcher)的同时,给出了它的理由,
- 翅膀是黑色 (wing color is black), 并列举出同样翅膀为黑色,以及翅膀不为黑色的鸟作为佐证
- 主要颜色为红色 (primary color is red), 并给出相似案例以及反例
BoLei Zhou 的文章--解剖神经网络, https://arxiv.org/abs/1704.05796
这篇文章不关注特征的判别能力,而是关注特征之间的纠缠,力求更多的特征与人类可以理解的特征,如物体,部位,颜色,贴图等拥有一一对应关系。此一一对应关系根据 Intersection over union (IoU) 计算出来,即对每个 channel 的 feature map, 分别计算一个 class activation map, 并由此得到一个 mask, IoU 量化了此 mask 跟人类可理解的概念所对应的图像区域的重叠程度。其中 IoU 定义为,
M_k(x) \equiv S_k(x) > T_k \\ IoU_{k,c} =\frac{\sum |M_k(x) \cap L_c(x)|}{\sum |M_k(x) \cup L_c(x)|}
其中 S_k(x) 是第 k 个 feature map 计算出的 class activation map, T_k 是阈值, M_k(x) 是mask, L_c 是人类可以理解的第 c 个概念对应的输入图片中的区域。 \cap 和 \cup 分别代表交集和并集。据此量化判断不同的模型架构,其可解释能力是不一样的,如果按顺序排,ResNet > VGG > GoogLeNet > AlexNet.
我自己理解的可解释性与LIME的思想相似。如果将输入中不重要的特征全部丢掉,仅保留重要的特征,作为新的输入,模型给出的判断与原始判断一致,则这为一种人类可以理解的解释。
目前的计算机视觉领域最好的模式识别算法是深度卷积神经网络 CNN。CNN 究竟是根据输入图片中的哪些部分做出决策?图片中的背景对分类究竟有多大影响?有哪些定量的,或可视化的方法提取对分类或回归起到决定性作用的区域?对CNN的可视化解释不仅能够帮我们调试代码,发现黑盒子神经网络在做某种决策时所犯的明显错误,从而帮助改进模型,还可以寻找输入图片中对最终决策起至关重要的因素,实现知识发现。下文聚焦CNN的可解释性。
局部线性可解释性 (LIME)
想解释黑盒子神经网络为什么能够识别所有的猫是件非常困难的事情,因为神经网络是高度非线性的。但是,想解释为什么神经网络认为某一张图片中画的是猫,则是一件相对来说简单很多的任务。这是一个非常深刻的洞见,即虽然模型很复杂,输入空间维度很高,但高维弯曲空间的局域是平直的,局域平直性保证了一个训练良好,对对抗样本免疫的神经网络,对图片的微调是线性响应。之前说过线性模型是白盒子模型, f(\vec{x}) = \sum_i \omega_i x_i , 输入x_i 对输出 f(x_i) 的贡献完全由系数 \omega_i 决定。一旦假设了局域线性,那么就可以用一个线性模型来近似得到黑盒模型在一个特定输入 \vec{x} 附近的行为。这就是 LIME 的思想。
如下图所示,任务目标是对红十字和蓝色圆点进行分类,神经网络学到的分类器可能给出很复杂的分类边界,即粉红区域与浅蓝区域的分界线,所有的红色十字都在边界包围的粉红区域内,而蓝色圆点在浅蓝区域。如果想从全局层面解释清楚此神经网络在整个输入空间如何工作,用语言描述则非常困难,因为无法精确表示这条弯弯曲曲的分界线。但如果用视觉来向另一个人类解释,则相对简单,只要用手指出整个边界即可。而物理学家做的,是用数学公式把这条分界线表示出来。数学公式可以被不同的人理解,所以是一种除了语言,视觉之外的可以实现共情的解释方式。LIME 做的就简单多了,只要找出那条虚线,就可以局部的解释为什么神经网络对一个特定的输入做出目前的分类。
如果输入是图片,那么LIME会将图片按边界分割,并将类似的像素划归为超级像素,通过随机的丢掉某些超级像素,构造不完整输入 x',输入神经网络,检查分类概率的变化 f(x'),来获得某些图片区域对分类的重要性。LIME 已经开源,可以简单的通过 pip 安装,
使用方法在Github页面有花样介绍,在此不做叙述。我使用 LIME 对一张大象的照片进行分析,看看神经网络 Inceptionv3 模型通过什么得到这是一只大象的结论。如下图所示,象鼻,眼睛,耳朵都是对分类起重要作用的区域。
反卷积 (Deconvolution)
这方面研究的极致是Google的 Deep Dreams 以及这个Activation Atlas的项目。给定一张空白图片(或者初始化为白噪声),然后通过梯度上升法,计算如何修改输入图片可以最大化每个 feature map,从而得到每个 feature map 学到的概念。与LIME相反,这种方法属于从全局的层面理解为何神经网络在所有的输入空间都可以工作的很好。想全面了解神经网络如何将各种各样的猫识别为猫,将各种各样的狗识别为狗,非常困难。这是一种对输入空间的全局解释。目前人们在全局解释方面能做到目前这步,实属不易,所以你看到的每个 feature map 给出的解释都非常的鬼畜。去年的一篇文章 The Building Blocks of Interpretability,对这个方向做了详细的研究,其结果发表在 Distill。基本上通过梯度上升最大化神经网络某个 feature map 的平均值,得到的输入图片都有如下结构,
这种方法得到的解释,很难被人类理解,有时候需要进一步解释。比如我们可能觉得第二张图对应的 feature map 学到的是鸟的脑袋,第4张图学到的是砖块的立体结构。但这种解释不容易被人类理解,不是所有人都喜欢这种解释,比如我自己。最让人讨厌的是卷积带来的周期性结构,如果能够去掉这种周期性结构,每张 feature map 只给出一个重要特征,那么可能会清楚明白的多,也更匹配人类智能的理解能力。
Saliency Map
Vanilla Saliency Map (原始的重要性地图)
\begin{equation} SaliencyMap = gradient = \frac{\partial\ class\ score}{\partial\ input\ image} \end{equation}
相比前面一小节讲的 feature map 的反卷积,需要对输入空白图像做梯度上升,这种 Saliency Map 的计算则更加直接,只需要计算 class score 对某个特定输入图像的梯度即可,而不再做如下的梯度上升 (其中 lr 是超参数 learning rate),

input\ img\ += lr \times \frac{\partial\ class\ score }{\partial\ input\ image}
求class score(在此用符号 s_c 表示)对输入图片的梯度,而不是经过 softmax 计算之后的类概率 P(c) = \frac{\exp(s_c)}{\sum_{c'} \exp(s_{c'})}
对输入图片的梯度,原因是最大化类 c 的概率有时候等价于最小化其他类的概率,而使用类分数 s_c 则能更加直接的捕捉某一类别对输入图片的敏感程度。
在网上看到一篇搞笑的文章,作者声称他遍索网络,没有找到类似的研究,他是第一个提出使用对输入图像的梯度,来得到Saliency Map的人,这篇文章的地址是 https://arxiv.org/pdf/1611.07634.pdf ,发表于2016年,但其实2013年的时候,Karen Simonyan 等人在文章 “Deep inside convolutional networks: Visualising image classification models and saliency maps.“ 中就提出了这种方法。
Guided Back Propagation
这种方法的梯度计算方法与原始的Saliency Map 一致,不同的地方在于,在正常的梯度向后传播时,如果原始 feature map 值为负数,RELU 函数会将其变成0,对于 feature map 的这些像素,反向传回来的梯度为0,但是原始 feature map 为正的部分,反向传回来的梯度有正有负,很多情况下正负相消。对于分类任务,我们希望只有对分类起到积极影响的梯度反向传递回来,所以在 Guided Back Propagation 方法里,如果梯度为负,则不会反向传递。这个就像PCA 和 非负矩阵分解的区别,PCA 得到的几个主要特征有正有负,相加相消,很难带来直观的满足人类理解能力的特征,而非负矩阵分解几个主要特征全部为正,只有累积,没有相消,更加容易被人类智能理解。
但是这种方法并不适用于回归任务,因为回归任务的目标是尽可能精确的重现结果,所以正负相消是必要条件。在分类任务中,目标是最大化class score,所以可以丢掉所有使 class score 减小的负梯度。除此之外,还有路径积分 Saliency Map,Visual BackProp Saliency Map, Pattern Net, ...
Integrate Saliency Map 使用 Path Integral (路径积分)的方法,计算将图片光滑的从 Base Line 变到目标图片,Class Score 对渐变图片的梯度的积分。
Visual BackProp 这篇文章的 “Related Work“ 部分给了一个比较全的综述。
根据之前 LIME 里的介绍,对于一张给定的图片 I_0 ,在其附近可以做线性的泰勒展开。关于基于梯度的方法与反卷积的关系,这篇文章中有段话,除了 RELU layer,使用反卷积计算的特征地图等价于使用 back propagation 计算类分数对输入的梯度 \partial f / \partial X_n 。
有一个开源的库 iNNvestigate, 对各种基于梯度的方法做了对比,结果如下
从效果上看,PatternNet 和 PatternAttribution 方法效果最好。在文章THE (UN)RELIABILITY OF SALIENCY METHODS中,作者发现除了 PatternAttribution 方法,其他方法都对输入非常敏感。比如在所有输入图片中添加固定的可作背景的色块,原则上不应该改变 Saliency Map的输出结果,但现实是除了 PatternAttribution 方法,其他方法产生的 Saliency Map 基本都被破坏。所以如果要使用 Saliency Map,首推 PatternNet 和 Pattern Attribution。
类激活地图 (Class Activation Map)
CAM 是MIT的 BoLei Zhou 首先提出的,基本思想是深度卷积神经网络加全连接层之前的比较高的那些卷积层,学到了比较完整的局域抽象概念,与输入图像有一个空间位置上的一一对应关系。在最后一个卷积层之后使用GlobalAveragePooling替换全连接层,不仅可以大大减少模型参数的个数,而且能够保留卷积核空间位置与输入图像相应位置的对应关系。这对于我们在最后一个卷积层上做反卷积,插值,得到 Class Activation Map 以及实体分割都很重要。在大神 KERAS的作者写的书 《Deep Learning with Python》第五章,有详细的 Grad-CAM 实现,稍加修改就可以得到原始的 CAM。效果如下面两张图片所示。不同的深度卷积神经网络结构,学习到的CAM区域不同。此外,大神书中的梯度加权Grad-CAM实现有bug,当神经网络预测的两个类的概率很接近时,对双方同等重要的区域对CAM的贡献会互相抵消。检查大神的实现与Grad-CAM原始文献中的描述,发现大神的实现中对梯度加权的CAM没有使用 ReLU 激活函数,过滤掉对分类有负面影响的部分。
除了 CAM 和 Grad-CAM,这篇文章 MultiCAM尝试根据成对的类别其CAM是互补关系,来解决 CAM 高亮区域过于局域化的问题。另外,文章还提出了融合多层CAM 来同时捕捉语义CAM和贴图CAM。我自己的尝试是通过底层的卷积层计算得到的CAM,清晰的捕捉了物体的边界,而高层的CAM,因为激活地图分辨率问题,向输入图片映射时,并不是很准确。而多层融合的CAM,也解决了另外一个问题,那就是当分类器的 top-n 预测结果不准确时,通过使用多个分类融合的CAM,来得到更准确的CAM区域。
Class Activation Map 的问题是如果使用底层的 feature map 计算Class Activation Map,结果分辨率很高,物体的边界很清晰,但是包含有很多无关的属性。而高层的 feature map 计算的class activation map 提取了对分类最重要的区域,更加局域,但定位精度不高。有没有什么办法可以解决这个问题呢?NVIDIA 提出的多层融合法是一种,而 LRP (Layer Wise Relevance Propagation)是另一种。LRP 的方法很难看懂,从效果上看也没太大提高,不是很明白这种方法的意义究竟是什么。还有一点就是,LRP 的文章完全没有引用 BoLei Zhou 的文章,差评!
一般的CAM只高亮一张图片中对分类起最重要作用的区域,但对于语义分割任务,人类则希望获得一个物体的整体,比如整只大象,而不仅仅是大象的鼻子,眼睛和耳朵。如何从预训练的图像分类器出发,弱监督的使用CAM给出语义分割,是困难的任务。今年刚刚出的一篇文章 FickleNet,则使用了随机抽样的方法,从隐神经元中抽取随机组合,计算各种组合下,class score 的变化,从而得到更加整体的 CAM 和分割。
Mask 的方法
意识到机器学习的可解释性可能是未来几年将人工智能部署到社会生活各个方面时所面临的最大问题时,我自己试着想了一种方法 -- 通过分类器学到的东西,弱监督的做一个mask,使用此mask遮蔽输入图像,看分类的结果会发生如何变化。后来在做调研的时候,发现我自己尝试的暴力对输入图片做 mask,计算梯度的方法就是 Saliency map 方法,而使用 AutoEncoder/Unet 学习一个 mask 的方法,就是反卷积。学习一个mask出来这件事本身,跟 LIME 的 super pixel 思想,也没有本质的区别。最关键的是,遍搜网络之后,发现已经有不少这方面的研究,比如这篇硕士论文,Convolutional Top-Down Mask Generator for Performance Improvement of Neural Network Classifier ,还有这篇大神何凯明和他的合作者们在2015年发表的文章,Convolutional Feature Masking for Joint Object and Stuff Segmentation ,以及最近一篇文章,EXPLANATORY MASKS FOR NEURAL NETWORK INTERPRETABILITY 根据其描述,与我尝试的方法一摸一样。不过对于最后这篇文章里描述的生成一个mask, 最小化mask图片的分类概率改变和mask的面积大小,
L = || f(mask\ \circ x) - f(x)||_2^2 + ||mask||_1
只对比较简单的 VGG 网络表现好,对于复杂点的34层的 Residual Net,学到的 mask 在我自己的任务上表现很差。
方向展望
人类看到一张图片的时候,大脑不仅对图片中所有物体做了分类,同时还做了像素级别的分割。我们并没有在 Bounding Box / Pixel-wise segmentation 数据上做过监督训练。如果能通过半监督学习的方法,比如 Autoencoder, GAN + Classifier 的方法,弱监督学习到如何对一张图片做出与人类大脑一致的分割,那么将极大提高其可解释性,至少是人类可理解的解释。
在整理文献的时候,看到 Quan-shi Zhang and Song-chun Zhu 教授做了很多这方面的工作,比如如何将特征解耦,如何让特征学到更加局域的信息,如何将特征以图和决策树的形式表达出来,增强解释能力等。我目前还没关注到的研究,肯定更是不计其数。在此向所有没有介绍到的研究致歉,希望以后能够慢慢补全,慢慢形成这个方向的文章索引数据库。
参考文献:
综述文章:
- By Quan-shi Zhang and Song-chun Zhu
Peaking inside the blackbox: XAI
A Survey Of Methods For Explaining Black Box Models
Layer Wise Relevance Propagation
Interpretable Deep Learning under Fire
具体方法:Heatmapping.org具体方法:
0. Deconvolution
- Interpretable Machine Learning
2. How convolution neural network see the world
3. Understanding your Convolution network with Visualizations
4. Essentials of Deep Learning: Visualizing Convolutional Neural Networks in Python
5. Convolutional Feature Masking for Joint Object and Stuff Segmentation
6. Class activation map
7. Fast Unsupervised Object Localization (Guided back-propagation)
8. Prediction difference analysis
9. Feature Selection Guided Auto-Encoder
10. 知乎专栏
11. 知乎专栏
12. SuperVAE
13. LIME: Why should I Trust you
14. SHAP:
15. Learning a mask
15. TF What-if tool
16. Interpretable convolution neural networks
Others:
上面这篇文章面向大众解释机器学习可解释的重要性,非常不错。
Youtube 视频:
Adadi, A., & Berrada, M. (2018). Peeking inside the black-box: A survey on Explainable Artificial Intelligence (XAI). IEEE Access.
• Breiman, L. (2001). Random forests. Machine learning, 45(1), 5-32.
• Dabkowski, P., & Gal, Y. (2017). Real time image saliency for black box classifiers. NIPS.
• Doshi-Velez, F., & Kim, B. (2017). Towards a rigorous science of interpretable machine learning. arXiv preprint arXiv:1702.08608.
• Edwards, L., & Veale, M. (2017). Slave to the Algorithm: Why a Right to an Explanation Is Probably Not the Remedy You Are Looking for. Duke L. & Tech. Rev., 16, 18.
• Goodman, B., & Flaxman, S. (2016). European Union regulations on algorithmic decision-making and a" right to explanation". ICML WHI 2016. arXiv:1606.08813.
• Guidotti, R., Monreale, A., Ruggieri, S., Turini, F., Giannotti, F., & Pedreschi, D. (2018). A survey of methods for explaining black box models. ACM Computing Surveys (CSUR), 51(5), 93.
• Henelius, A., Puolamäki, K., Boström, H., Asker, L., & Papapetrou, P. (2014). A peek into the black box: exploring classifiers by randomization. Data mining and knowledge discovery, 28(5- 6), 1503-1529.
• Henelius, A., Puolamäki, K., & Ukkonen, A. (2017). Interpreting Classifiers through Attribute Interactions in Datasets. ICML WHI. arXiv:1707.07576.
• Krause, J., Perer, A., & Bertini, E. (2016). Using visual analytics to interpret predictive machine learning models. ICML WHI 2016. arXiv:1606.05685.
• Lakkaraju, H., Bach, S. H., & Leskovec, J. (2016). Interpretable decision sets: A joint framework for description and prediction. KDD.
• Lipton, Z. C. (2016). The mythos of model interpretability. ICML WHI. arXiv:1606.03490.
• O'Neil, C. (2016) "Weapons of Math Destruction: How Big Data Increases Inequality and Threatens Democracy". Broadway Books.
• Ribeiro, M. T., Singh, S., & Guestrin, C. (2016). Why should i trust you?: Explaining the predictions of any classifier. KDD.
• Szegedy, C., Zaremba, W., Sutskever, I., Bruna, J., Erhan, D., Goodfellow, I., & Fergus, R. (2013). Intriguing properties of neural networks. ArXiv:1312.6199.
• Žliobaitė, I. (2017). Measuring discrimination in algorithmic decision making. Data Mining and Knowledge Discovery, 31(4), 1060-1089.
开源软件:
1。LIME
2。 SHAP
3。INNVestigate
4。deep-viz-keras