主要内容

使用梯度归因技术研究分类决策

这个例子展示了如何使用梯度归因图来研究图像的哪些部分对深度神经网络做出的分类决策最重要。

深度神经网络看起来就像黑盒决策者——它们在复杂问题上给出了出色的结果,但很难理解为什么网络给出了特定的输出。随着深度网络在更多应用中的应用,可解释性变得越来越重要。要考虑网络是可解释的,必须清楚网络使用哪些部分输入数据来做出决策,以及这些数据对网络输出的贡献有多大。

有一系列可视化技术可用于确定网络是否使用输入数据的合理部分来做出分类决策。除了本例中显示的梯度归因方法外,还可以使用梯度加权类激活映射(Grad-CAM)和遮挡敏感性等技术。例如,请参见

本例中探索的梯度归因方法提供了像素分辨率地图,显示哪些像素对网络的分类最重要。它们计算类分数相对于输入像素的梯度。直观地,地图显示了哪些像素在改变时对类分数影响最大。梯度归因方法产生的地图分辨率比Grad-CAM或遮挡敏感性更高,但往往更嘈杂,因为训练有素的深度网络并不强烈依赖于特定像素的确切值。使用梯度归因技术来找到图像中对分类很重要的广泛区域。

最简单的梯度归因图是预测类的类分数相对于输入图像[1]中每个像素的梯度。这显示了哪些像素对类分数的影响最大,因此哪些像素对分类最重要。这个例子展示了如何使用梯度归因和两种扩展方法:引导反向传播[2]和集成梯度[3]。这些技术的使用存在争议,因为目前还不清楚这些扩展可以为模型[4]提供多少洞察力。

负载预训练网络和图像

加载预训练的GoogLeNet网络。

Net = googlenet;

提取图像的输入大小和网络的输出类。

inputSize = net.Layers(1).InputSize(1:2);classes = net.Layers(end).Classes;

加载图像。这张照片是一只名叫莱卡的狗。将图像大小调整为网络输入大小。

Img = Img“laika_grass.jpg”);img = imresize(img,inputSize);

对图像进行分类,并显示预测的类别和分类分数。

[YPred, scores] = classified (net, img);[score, classsidx] = max(scores);predClass = classes(classsidx);imshow (img);标题(sprintf (“% s (% .2f)”字符串(predClass),分数));

该网络将莱卡归类为微型贵宾犬,这是一个合理的猜测。她是贵宾犬和可卡犬的杂交品种。

使用自动分化计算梯度属性图

梯度归因技术依赖于找到预测分数相对于输入图像的梯度。梯度归因图的计算公式如下:

W xy c 年代 c xy

在哪里 W xy c 表示像素在位置上的重要性 x y 对班级的预测 c 年代 c 那门课的软分数是多少 xy 图像是否在像素位置 x y [1].

将网络转换为adlnetwork这样你就可以用自动微分来计算梯度。

lgraph = layerGraph(net);lgraph = removeLayers(lgraph,lgraph. layers (end).Name);Dlnet = dlnetwork(lgraph);

指定softmax层的名称,“概率”

softmaxName =“概率”;

要使用自动微分,将莱卡图像转换为adlarray

dlImg = darray (single(img));SSC的);

使用dlfevalgradientMap函数(定义在金宝app支持功能节)来计算导数 年代 c xy .的gradientMap函数通过网络向前传递图像以获得类分数,并包含对dlgradient评估分数相对于图像的梯度。

dydI = dlfeval(@gradientMap,dlnet,dlImg,softmaxName, classsidx);

归因图dydI是一个227 × 227 × 3的数组。每个通道中的每个元素对应于原始RGB图像的该通道的输入图像的类分数梯度。

有很多方法可以可视化这张地图。直接将梯度归因图绘制为RGB图像可能会不清楚,因为该地图通常非常嘈杂。相反,沿着通道维度对每个像素的绝对值求和,然后在两者之间重新缩放01.使用具有255种颜色的自定义颜色映射来显示渐变属性映射0对白色和1为黑色。

map = sum(abs(extractdata(dydI)),3);Map = rescale(Map);Cmap = [linspace(1,0,255)' linspace(1,0,255)'];imshow(地图,“Colormap”,提出);标题(“梯度归因图(”+ string(predClass“)”);

地图上最暗的部分以狗为中心。这张地图非常嘈杂,但它确实表明网络正在使用图像中的预期信息来执行分类。狗的像素比草地背景的像素对分类分数的影响要大得多。

使用引导反向传播锐化梯度属性图

通过修改网络在ReLU层中的反向传递,可以获得更清晰的梯度归因图,这样梯度元素中小于零的元素和ReLU层输入元素中小于零的元素都被设置为零。这被称为引导反向传播[2]。

引导反向传播后向函数为:

戴斯。莱纳姆: dZ X > 0 * 戴斯。莱纳姆: dZ > 0 * 戴斯。莱纳姆: dZ

在哪里 l 是损失, X 是ReLU层的输入, Z 是输出。

您可以使用非标准的反向传递编写自定义层,并将其与自动微分一起使用。自定义图层类CustomBackpropReluLayer在本例中,实现此修改的文件作为支持文件包含。金宝app当自动微分反向传播通过CustomBackpropReluLayer对象,则使用自定义层中定义的修改后的引导反向传播函数。

使用辅助功能金宝appreplaceLayersOfType(定义见金宝app支持功能的所有实例reluLayer在网络中有实例CustomBackpropReluLayer.设置BackpropMode各自的性质CustomBackpropReluLayer“guided-backprop”

customRelu = CustomBackpropReluLayer();customRelu。BackpropMode =“guided-backprop”;lgraphGB = replaceLayersOfType(lgraph,“nnet.cnn.layer.ReLULayer”, customRelu);

转换包含CustomBackpropReluLayers成一个dlnetwork

dlnetGB = dlnetwork(lgraphGB);

利用引导反向传播计算并绘制网络的梯度属性图。

dydIGB = dlfeval(@gradientMap,dlnetGB,dlImg,softmaxName, classsidx);mapGB = sum(abs(extractdata(dydIGB)),3);mapGB = rescale(mapGB);imshow (mapGB“Colormap”,提出);标题(“引导反向传播(”+ string(predClass“)”);

你可以看到,引导反向传播技术更清楚地突出了狗的不同部位,比如眼睛和鼻子。

您还可以使用Zeiler-Fergus技术通过ReLU层[5]进行反向传播。对于Zeiler-Fergus技术,后向函数为:

戴斯。莱纳姆: dZ 戴斯。莱纳姆: dZ > 0 * 戴斯。莱纳姆: dZ

设置BackpropMode的性质CustomBackpropReluLayer实例“zeiler-fergus”

customReluZF = CustomBackpropReluLayer();customReluZF。BackpropMode=“zeiler-fergus”;lgraphZF = replaceLayersOfType(lgraph,“nnet.cnn.layer.ReLULayer”, customReluZF);dlnetZF = dlnetwork(lgraphZF);dydIZF = dlfeval(@gradientMap,dlnetZF,dlImg,softmaxName, classsidx);mapZF = sum(abs(extractdata(dydIZF)),3);mapZF = rescale(mapZF);imshow (mapZF“Colormap”,提出);标题(”Zeiler-Fergus(“+ string(predClass“)”);

使用Zeiler-Fergus反向传播技术计算的梯度属性图比使用引导反向传播计算的梯度属性图清晰得多。

使用集成梯度评估对图像变化的灵敏度

集成梯度方法计算集成类分数相对于图像像素的梯度,这些图像是在基线图像和感兴趣的原始图像[3]之间线性插值的。集成梯度技术被设计为对集成过程中像素值的变化非常敏感,因此,如果像素值的变化影响到类分数,则该像素在地图中具有非零值。网络中的非线性,如ReLU层,可以在简单的梯度归因技术中阻止这种敏感性。

综合梯度属性图计算为

W xy c xy - xy 0 α 0 1 d α 年代 c xy α xy α

在哪里 W xy c 映射的值为class吗 c 在像素位置 x y xy 0 是一个基线图像,和 xy α 图像在远处吗 α 沿着基线图像与输入图像之间的路径:

xy α xy 0 + α xy - xy 0

在这个例子中,积分梯度公式被简化为对一个离散指标求和, n ,而不是积分 α

W xy c xy - xy 0 n 0 N 年代 c xy n xy n

xy n xy 0 + n N xy - xy 0

对于图像数据,选择基线图像为0的黑色图像。找到原始图像和基线图像之间的差值。在这种情况下,differenceImg与原始图像相同,基线图像为零。

baselineImg = 0 ([inputSize, 3]);differenceImg = single(img) - baselineImg;

沿着从基线图像到原始输入图像的线性路径,创建对应于离散步骤的图像数组。大量的图像将提供更平滑的结果,但需要更长的计算时间。

numPathImages =25;pathImgs = 0 ([inputSize 3 numPathImages-1]);n=0:numPathImages-1 pathImgs(:,:,:,n+1) = baselineImg + (n)/(numPathImages-1) * differenceImg;结束图;imshow (imtile(重新调节(pathImgs)));标题(“整合路径上的影像”);

将小批路径图像转换为dlarray.使用格式格式化数据“SSCB”为两个空间,一个通道和一个批次维度。每个路径图像都是迷你批处理中的单个观测值。计算沿路径生成的图像批次的梯度图。

dlPathImgs = darray (pathImgs,“SSCB”);dydIIG = dlfeval(@gradientMap, dlnet, dlPathImgs, softmaxName, classsidx);

对于每个通道,对mini-batch中所有观测值的梯度求和。

dydIIGSum = sum(dydIIG,4);

将求和的梯度属性图的每个元素与的对应元素相乘differenceImg.要计算综合梯度归因图,对每个通道求和并重新缩放。

dydIIGSum = differenceImg .* dydIIGSum;mapIG = sum(extractdata(abs(dydIIGSum)),3);mapIG = rescale(mapIG);imshow (mapIG“Colormap”,提出);标题(“综合梯度(”+ string(predClass“)”);

计算图显示,神经网络更强烈地关注狗的脸,作为决定其类别的一种手段。

这里演示的梯度归因技术可用于检查您的网络在进行分类时是否关注图像的预期部分。为了更好地了解模型的工作方式和解释分类决策,您可以在一系列图像上执行这些技术,并找到对特定类有重要贡献的特定特征。未经修正的梯度归因技术可能是解释网络决策的更可靠的方法。虽然引导反向传播和集成梯度技术可以生成最清晰的梯度图,但尚不清楚这些技术可以为模型如何工作提供多少见解。

金宝app支持功能

梯度映射函数

这个函数gradientMap对于指定的类,计算分数相对于图像的梯度。该函数接受单个图像或一小批图像。在本例中,函数gradientMap在这部分介绍了什么使用自动分化计算梯度属性图

函数dydI = gradientMap(dlnet, dlImgs, softmaxName, classsidx)计算一个类别分数相对于一个或多个输入的梯度%的图像。dydI = darray (0 (size(dlImgs)));i=1:size(dlImgs,4) i= dlImgs(:,:,:, 1);scores = predict(预测)“输出”, {softmaxName});classScore = scores(classsidx);dydI(:,:,:,i) = dlgradient(classScore, i);结束结束

Replace Layers命令功能

replaceLayersOfType函数用新层的实例替换指定类的所有层。新图层的命名与原始图层相同。在本例中,函数replaceLayersOfType在这部分介绍了什么使用引导反向传播锐化梯度属性图

函数lgraph = replaceLayersOfType(lgraph, layerType, newLayer)%替换layergraphlgraph中指定类型的图层% layerType与新图层的副本。i = 1:长度(lgraph.Layers)如果isa (lgraph.Layers(我),layerType)旧层和新层之间的名称匹配。layerName = lgraph.Layers(i).Name;newLayer。Name = layerName; lgraph = replaceLayer(lgraph, layerName, newLayer);结束结束结束

参考文献

[1] Simonyan, Karen, Andrea Vedaldi和Andrew Zisserman。深层卷积网络:可视化图像分类模型和显著性图。ArXiv: 1312.6034 (Cs)2014年4月19日。http://arxiv.org/abs/1312.6034。

b[2] springberg, Jost Tobias, Alexey Dosovitskiy, Thomas Brox和Martin Riedmiller。《追求简单:全卷积网络》ArXiv: 1412.6806 (Cs)2015年4月13日。http://arxiv.org/abs/1412.6806。

[3] Sundararajan, Mukund, Ankur Taly和Qiqi Yan。“深度网络的公理归因”第34届国际机器学习会议论文集(PMLR)70 (2017): 3319-3328

[4]阿德巴约,朱利叶斯,贾斯汀·吉尔默,迈克尔·穆利,伊恩·古德费罗,莫里茨·哈特和金。“显著性地图的完整性检查。”[c] [c]; [c];, 2018年10月27日。http://arxiv.org/abs/1810.03292。

[5] Zeiler, Matthew D.和Rob Fergus。“卷积网络的可视化和理解。”在计算机视觉- ECCV 2014。计算机科学课堂讲稿(8689,由D. Fleet, T. Pajdla, B. Schiele, T. Tuytelaars编辑。bbbb10, Cham, 2014。

另请参阅

|||||||

相关的话题