雷锋网AI研习社按:神经网络长久以来的“黑盒”属性,导致人们一直无法理解网络的内部是如何运作的,针对这个困扰已久的问题,学界主要存在三种研究方向:数据归因模式、特征解码模式以及模型理解模式。
在近日的 AI 研习社大讲堂上,清华大学的王宇龙就从模型理解的角度入手,为我们详细介绍了如何通过发现网络中的关键数据通路(critical data routing paths, CDRPs),更好地理解网络。
公开课回放地址:
分享主题:利用关键数据通路理解神经网络
分享提纲:
方法介绍——distillation guided routing(DGR)算法
结果分析——路由的通路包含一定语义含义,帮助我们更好地理解网络行为
应用领域——安全对抗样本检测
雷锋网 AI 研习社将其分享内容整理如下:
这张图大概总结了一下当前这种网络可解释性的含义,我们常常把这种网络、深度神经网络看作一个black box model,也就是一个黑盒模型,就像图片中所描述的一样。
我们想知道网络里面运行的时候到底在做什么,学习完之后究竟学习到什么样的知识,能够对我们人类有什么样的启发,所以对于网络可理解性来说,目前有这样三个主要的研究方向:
左边绿色箭头指向的,是说我将网络所做的决策,或者说预测结果,直接归因到数据层面,去分析样本中哪些数据、或者说数据当中哪一块区域,它的特征更加重要,我就直接拿来作为网络行为的一种解释。
右边蓝色箭头指向的则是第二种方向也就是将网络所学到的这种行为或者特征和人类已有的这种像知识图谱的一些概念去进行联系,使网络在进行决策的时候,我们人类能够理解它究竟在做些什么。
下面又是另外一种方向,我画了一个显微镜的图案来表示,我们要直接去探求网络内部究竟在做什么,这个相对来说会比较难,因为它是一种更加直接的理解网络的方法——我们的工作就属于这个方向。
我再细说一下这三个方向。
第一类方法是归因到数据层面的方法,我们叫做attribution methods,中文为“溯因方法”,它的一个大致的流程是说,给一张图片,或者给一个数据,网络帮我们做出了这个决策,那么现在我要了解,究竟是数据的哪一面最终导致这个预测结果,然后我们就可以通过attribution methods去追溯和归因到数据层面上去。像右上方第一张图显示的,就是几种不同attribution methods的一个展示结果,主要通过一种叫做saliency maps(中文称作“显著图”)的方式来进行展示,图片上面可以看到像某种热力图一样,颜色越深的,代表这一部分区域所做的贡献越大,对最终预测结果起着最关键的影响。
第二类方法是归因到知识上去,这种被称作feature decoding的方式(中文“特征解码”),它将网络中间的中间层的特征给解码出来,然后转换到一个可理解的概念上去。换句话说,我在预测结果的同时,同时产生一段文本去解释这个预测结果产生的原因。比如说右面的第二张图,它在预测每一种鸟类的同时,也给出了这些鸟类局部的一些特征,比如说这个鸟之所以是某种鸟类,是因为它的脖子或者头部或者嘴巴具备什么样的特征,是一个比较接近人类的这样一种解释方式。不过,这种解释方法回避了模型本身的解释,也就是说产生这种文本的解释是用另外一种网络来去训练的,那么产生解释的网络又该如何去理解呢?
第三类方法是直接去理解模型本身的行为。这一类方法目前没有一个统一的范式,主要靠大家从多种不同的角度来做解释。比如说我本来有一个很深的网络,或者说一个很复杂的模型,那么我通过像知识蒸馏或者说模仿这种行为,去训练一个更容易理解的模型,通过这个更容易理解的模型,针对某个局部面再去模仿原来模型的行为,是一种基于局部的一种解释。或者说从一开始设计这种网络的时候,就是要设计成一个可解释的模型,比如说每一步都分别对应一种语义含义行为的设计方法。
关键数据通路
我们的工作主要是通过发现网络中的关键数据通路(critical data routing paths,CDRPs),更好地去理解网络。我们从之前类似网络压缩的一些工作中发现,网络中其实存在很多冗余,并不是所有的节点或者说神经元都被利用到,这些神经元即便删去,也不会影响最终的预测结果。因此我们认为,每个样本进来的时候,网络都只是利用了其中一部分的节点或者说通路来完成最终预测的。
我们的工作希望能够发掘出这些通路的特征或者说规律。在定义关键数据通路以前,我们首先要定义的是关键节点,因为关键数据通路实际上是由这些通路上的关键节点所组成的。比如像右面这张图显示的,共有三个卷积层,每一层红色代表的都是不重要的可以进行删除的节点,而绿色则代表的关键节点。通过连接每一层的关键节点,我们也就组成了所谓的关键数据通路。
所谓的关键节点,我们可以理解成输出的关键channel,比如像一个卷积层,它的输出是个三维的增量,在长宽两维上我们认为是一种空间上的信息保留,而channel维就是一个第三维的信息保留,我们认为它是包含了这种语义含义的,或者说是代表这种节点的概念。如果一个通道全部被置为零,对最终预测结果产生了很大影响的话,这个节点就是关键节点。
从方法上来说,我们首先引入了control gates(中文为控制门)的概念,这个想法受到过去的模型压缩、模型减枝方法的一些启发,channel-wise control gates说的是通道维上的每一维或者每一个通道都去关联一个 lambda(这个lambda是一个标量值,我们认为这个lambda就是一个control gates),一旦这个 lambda 为 0,最后的优化问题也同样显示为 0 的话,就默认它是一个不重要的节点,完全可以删除掉。如果它是一个带 0 的值,之后的值我们是不做限制的,因为值的大小代表了它在这一次预测中的重要性。
我们应该如何求解 lambda 的优化目标是什么呢?其实我们是借鉴了这个所谓“知识蒸馏”的概念(Hinton在2015年所提出),也就是说网络在进行预测的时候,它所输出的概率分布不只是包含预测结果,还包括了隐藏知识——网络里被认为包含其他类的概念有多少。我们的目标是要在删掉这些不重要的节点以后,网络的数据概率值能够尽量接近原始的网络数据概率值。
同一时间,我们要加上一定的正则项去约束control gate:一方面约束它大于0,非负数;另一方面则要约束它具备“稀疏”的特性。右边的优化目标表示的是第一部分花体 L 的 loss function,度量的是两次网络输出的概率分布距离。
第一项这个f_\theta(x),是原始网络在获得样本后的一个输出概率分布,是针对单样本来说的(每次只考虑一个样本)。第二项加了一个带有 lambda 的式子,代表的是引入了control gate后,“减枝”网络的输出概率分布和原始网络的输出概率分布的接近程度——L。L 实际上就是一个 cross entropy,衡量两个概率分布的距离。
接下来说一下lambda的约束限制。
第一项是要求它“非负”。lambda可以为 0,代表的是被完全抑制掉、删除掉(假设该值大于0,小于1,说明比原来的响应相对要小一点,要是大于 0 且大于 1,说明它比原来的响应要更高一点,有一点放大的作用),但是我们不能让它变为负数,因为负数相当于把整个 channel 的 activations 的全部正负号都交换了,相当于所有的值都取了一个相反数,我们认为这样对原始网络输出值的分布范围会有较大影响,且会对最终行为存在较大干扰。所以我们做网络可解释性的首要条件,是在保证尽量少改动的情况下去解释当前网络,一旦引入过多额外的干扰,你就很难保证说现在的解释对于原来的网络还是成立的。
第二项是要求它具有一定的稀疏性,这个和已有的一些“稀疏学习”的部分主张是吻合的,可以理解为越稀疏的模型,它将这种不同的属性都进行解耦并取了关键属性,就越发具备可理解性。
路径的表示
我们以上所说的是 distillation guided routing(DGR)的一个大致方法。接下来我再说一下,如何对最终寻找到的路径进行表示。
每次优化完以后,每层它都有一个contol gate value,由粗体的lambda表示(大K表示的是网络拥有K层这样一个概念),只要将所有的control gate value拼接成一个最终长的向量,就是我们对相关路径的一个表示。因为我们可以直接对长的向量使用tresholding这一种取阈值的方法,来获得最终的critical nodes。比如说我认为大于0.5的才是真正的critical nodes,小于0.5的则不是,那我们可以通过取义值,得到一个最终的二值mask,那么它就代表了哪些可以被删除,哪些可以被保留。
我们在后来的实验中发现,这一种表示包含了非常丰富的信息——如果不取义值,只将它原始优化出来的浮点值保留下来的话,网络在进行预测的时候,我们将发现更加丰富的功能性过程(可以把它视为一种新的activations,网络响应都是一层一层传到最高层,最高层的feature就可以看成一个响应,我们相当于侧面在channel维上去引入了新的特征表示)。
接下来我详细说一下这一页(PPT第4页)的优化问题,我们应该如何进行求解。
求解的方法其实很简单,就是通过梯度下降算法,每一次根据优化目标对control gate value进行求导(原始网络的权重值都是固定不变的)。所以我们解释一些已有模型(比如像VGG,Alexnet, ResNet),都是通过引入并求解control gate value,接下来当我们再去解释或者优化时就会非常简单,因为它需要更新的参数非常少,比如我们在实验中只需设置30个iteration,就能得到一个很好的解释结果。
在优化的过程当中,这些引入control gate value的网络预测,比如说top-1 prediction,也就是那个最大类别的响应,要和原始网络的预测保持一致。比如说原始网络它看图片预测出来是狗,那么新的网络也要保障它的预测结果是狗。至于其他类别的响应,我们则不做要求,因为既然是distillation,肯定就会存在一定程度的不同。总的来说,你在解释的网络的时候,不该改变网络的原始行为。
接下来说一下对抗样本检测,我们之所以会将该方法用到这个任务上去,是因为我们发现,我们所找到的这个feature对于对抗样本检测有很大的帮助。
首先什么叫对抗样本?非常简单,看下面这张图,第一个是大熊猫,它被输入进一个标准的网络里面,被显示为55.7%的一个预测信度,但是我在中间加了这个噪声图,最后得到一张新的图片,再把这张新的图片输入到网络里时,结果预测为“长臂猿”,同时拥有很高的信度,达到99.3%。从人的视角来看,新生成的图片跟原始图片并没有太大差别,这种现象我们就叫做对抗样本,也就是说新的图片对网络而言是具有“对抗性”或者说“攻击性”的。
对抗样本现象引发了人们对网络可理解性的关注,因为网络的“黑盒”特性使我们无从得知它为什么会预测正确或者预测错误,而且这种错误的特性还特别不符合人类的直觉,人类无法理解说这样一个噪声为何能够引起这么大的一个改变。因此现在有大量的工作就是在做对抗的样本攻击以及对抗的样本防御。我们的组在这方面之前也是做了很多工作,在去年的NIPS 2017年有一个对抗攻防比赛,我们的组在攻击和对抗方面都做到了第一。
我们接下来会利用关键数据通路去进行对抗样本检测。我们的思考是这样的,两种样本在输入端从人类的感觉上看来差别并不大,这也意味着前几层所走的网络关键路径按理来说差别不大。只是对抗样本的噪声越往高层走,它被干扰的程度不知因何被放大了,才导致路径开始偏离,最终走到另一个类别上去,导致预测结果完全不一样。
那么我们其实可以训练出某种分类器,专门用来检测真实样本与对抗样本的关键数据通路。如果查出来差别,就有一定的概率检测出它究竟是真实样本还是对抗样本。
接下来说一下实验的部分。
我们首先做了一个定量实验来检验方法的有效性,这个实验叫做post-hoc interpretation(中文是“事后解释”),就是针对网络最终的预测结果再做一次解释(一张图片只解释一个)。在实验中,数据集采用来自 ImagNet 的五万张 validation images,训练网络则用的AlexNet、VGG-16、ResNet-50等。
需要说明的是,实验只聚焦在卷积层,因为类似 VGG-16、ResNet 的 fully-connected layers,我们认为是一个最终的分类器,所以不考虑这一层面的关键数据通路。再者,ResNet 的网络层较深,我们也不可能将所有的卷积层都考虑进来,太冗余且没有必要。所以对于 ResNet,我们的处理方法就是只关注 ResBlocks 的输出,而这个 Block 的量相对较少,我们再根据这些 Block 的输出去观察它所利用到的关键节点。
给大家介绍这个实验,当我们找到关键节点以后,我们将有序地抑制掉一部分的关键节点,然后再观察它对网络最终造成多大程度的影响。
在操作上有两种方式,一种是先删除control gate value最大的,我们称作Top Mode,或者反过来,我们先删除control gate value最小的,这两种删除方式最后引起网络性能下降的一个曲线,在下面这两张图上展示。(注:control gate value越大,那么说明它的影响/重要性越大)
可以看下上边这张图,横坐标显示的是被抑制的关键节点比例,我们可以看到,只有1%的关键节点被抑制(通道置为0),原模型的top-1 acc还有top-5 acc就会面临非常剧烈的下降,分别是top-1 acc下降百分之三十多,top-5 acc下降百分之二十多。
也就是说,只要1%的关键节点,还不是所有节点(关键节点其实只占网络节点的百分之十左右)被删除的话,网络性能就会面临剧烈的下降。在某种程度上来说,这个结果证明了我们所寻找到的关键节点的有效性。
节点的语义含义
其实我们更重要的工作成果在这一部分,那就是我们所寻找的节点其实包含了一定的语义含义,这是网络可解释性领域一直在关注的。首先我们会关注层内的路由节点的语义含义,比如说一个样本进来,它经过每一层,我们会先看每层有哪些节点,然后再看它拥有什么样的语义含义。
我们在上方展示了5张图,每张图上有五万个点,对应的是五万张图片。不过我们都知道,网络里的channel维都是像512、256这样一个向量,我们怎么样可以把这五万个向量之间的相似性更直观的展示出来呢?我们最终采用的是t-SNE方法,类似于说将一些向量投影到二维平面上去。投影的结果就像下面5张图展示的,颜色代表类别,同样类别的图片所对应的点,颜色都是相同的。我们会看到,随着层数加深,它的点也随着变得更加稀疏起来,然而实际上点的数量是没有改变的,依然还是五万张,五万个点。
为什么会呈现这样一个稀疏或者分离的现象呢?因为同个类别的点都聚集在同一处,距离也就变得更加靠近,所以看起来中间有很多空白的部分。这也说明,在越高层的地方,同个类别所走过的节点或路径会越加相似,简单来说就是猫走猫的路径,狗走狗的节点。
这张图全面地展示了VGG-16里13个卷积层每一层关键节点的二维图,我们会看到,在底层里各个类别都混杂在一起,没有特别明显的区分,然而随着层数变高,颜色会开始有规律地聚集到同一个区域,说明这些类别开始各走各自的路径。越到高层越稀疏。
在知晓每层节点的语义情况下,我们想进一步了解由这些节点连接构成的关键数据路径,究竟具备什么样的语义特征。于是我们做了一个实验,针对类内样本(样本都是属于同一类的),我们将它们所有的CDRPs的特征表示拿去做一个层次化聚集聚类,看看它们的CDRPs表征究竟有什么相似性。
上面的树形图,表示每个样本之间的相似程度,越往底层,两个样本就越靠近,而越往高层,就越慢被聚到一起。纵坐标代表了两个样本的距离,里面的相似颜色代表的是他们被聚成一个子类了。我们在看这些图片的聚类情况会发现,如果图片特征很相似,那么他们的CDRPs聚类结果也是很相似的。
另外还有一个很有趣的发现,像左边这50张图,应该是某种鱼,鱼的图片有这样的一些分布规律:鱼处在中间位置,采用的是横拍模式,另外还有一类图片,则是垂钓爱好者手里捧着鱼蹲在地上拍照。我们发现,这两类图片都被归到鱼这个类别,然而实际上图片的特征存在很大的不同。
目前看来网络 features 是检验不出来这种差异的,因为它们最终都被预测为鱼这一个类别。然而我们的 CDRPs 表征就细致发现了其中的差异,就体现在两者所走的关键路径其实是不一样的。
像左边这张图有红框框起来的4张图,其实是通过 CDRPs 的所分析出来的类似 outliner 的图片。如果仔细看,会发现其中有一张图片是一个人抱着鱼,但是方向却被旋转了90度,按理来说这是一个类似于噪声一样的存在,然而我们的CDRPs却能把它归类到鱼的类别,只是所走的关键路径和其他样本有着不一样的特征,因此把它给聚类出来,变成一个发现。
像右面则是一个白头鹰,中间第二个的聚类都是聚焦于鹰的头部,而第三类则聚焦于鹰站在树上,而左边这个是单独的 outliner,都是一些非常不清晰的图像。
这里展示的是更多的一些结果。
对抗样本检测的应用
最后呢,我们尝试用来做对抗样本检,像我之前所说的,正常样本与对抗样本,从输入端来说没有太大差别,但是从最后的预测结果来说,是有很大区别的。在我们看来,是两张图片在网络里所走的关键路径逐渐有了分歧,导致了最终的分开。
我们先看上方左边这张图,这张图首先是一个正常样本,加了噪声以后,预测结果由猫变成了车轮。我们该如何体现这两种关键路径的区别呢?我们主要算的是这两个样本在不同层上所走的关键节点的相关性,我们先找到每一层各自的关键节点,然后有一个向量,然后根据这个向量去推算相关系数来表示两个路径的相似性。
上面这张图里的橘红线代表了这个相似程度,可以发现对抗样本对于正常样本的相似性是随着层数增高的,而大致趋势是逐渐下降的。简单来说,高层的相似性要比底层小得多。
我们又算了下对抗样本对于目标类别,它们这些样本所走的这些关键路径的相似性,接着计算车轮这一类别样本的路径相似性。我们找来车轮这一类别的50张图片,将这50张样本的每个路径都算一遍相关系数,上面这张图叫做violinplot,展示的就是这50个系数的分布展示情况。
由于每个样本之间存在差异,所有显示结果有的高有的低。最后发现,随着层数加深,目标类别的相似系数会越来越高。比如在最高层的地方,violinplot的最低点都要比原始橘红色的点要高。这也就是说,对抗样本在高层所走的路径和目标类别所走的路径是很相似的,后面几张图也是在阐述这样一个情况,具体的情况大家可以细致地去参考一下论文。
接着我们又去做对抗样本检测,检测方法是通过取一些正常的样本,比如说从 ImageNet 里挑出一千种类别,每一种类别取出1张图片(有些实验取出5张图片,有些取出10张图片等等),然后每一张图片我们都产生一个对抗样本(用的 FGSM 算法),然后作为训练集,接着用我们的算法去算它的 CDRPs 表征,再取一个二分类的分类器来检测和判断这个路径是属于正常样本还是对抗样本。
训练结束以后,我们就用这个分类器来做对抗样本检测,换句话说,我们自己构造了一个包含正常样本与对抗样本的数据集,然后用训练所得到的分类器来预测哪一个是正常样本,哪一个是对抗样本。
下面的表格展示了我们不同实验室的实验结果,这个值如果越高,越近于1,就说明这个分类越完美。随着训练样本的增加,分类结果变得越来越好之余,不同的二分类器所能达到的水准还是比较相似的(可能使用像 gradient boosting 或者 random forest 的方法会更好一些)。
结论
最后总结一下我今天所分享的内容,首先是我们提了一个全新的角度来进行网络可解释性,也就是通过寻找关键数据路径,我们会发现有一些语义含义包含在数据路径里头。包括像层内节点,它会有一定的区分能力,而且随着层数的增高,区分能力会逐渐加深。
同一时间,关键路径又体现出类内样本不同的输入特征,有助于帮助我们发现一些数据集当中的样本问题。
最后我们提了一个新的对抗样本检测算法,通过利用CDRPs的特征来检测它究竟是真实样本还是对抗样本。CDRPs反映出对抗样本在高层与正常样本的距离较远,在底层与正常样本距离较近这样一种特征模式,利用这种特征模式我们可以进行检测,达到一个很好的防御效果。
以上就是本期嘉宾的全部分享内容。更多公开课视频请到雷锋网AI研习社社区(https://club.leiphone.com/)观看。关注微信公众号:AI 研习社(okweiwu),可获取最新公开课直播时间预告。