这个例子展示了如何使用梯度属性图来研究图像的哪些部分对深度神经网络的分类决策是最重要的。
深层神经网络看起来就像黑盒决策者——它们能在复杂问题上给出出色的结果,但很难理解为什么一个网络会给出特定的输出。随着深度网络在更多应用中的应用,可解释性越来越重要。要考虑一个可解释的网络,必须清楚网络使用哪些部分输入数据来做出决策,以及这些数据对网络输出的贡献有多大。
一系列可视化技术可用来确定网络是否使用输入数据的合理部分来进行分类决策。除了本例中显示的梯度归因方法外,您还可以使用梯度加权类激活映射(grade - cam)和遮挡敏感性等技术。有关示例,请参见
在这个例子中探索的梯度属性方法提供像素分辨率地图,显示哪些像素对网络的分类最重要。它们计算类得分相对于输入像素的梯度。直观地,地图显示了当改变类得分时,哪些像素影响最大。梯度归因方法生成的地图的分辨率比梯度cam或遮挡敏感度更高,但往往更有噪声,因为训练良好的深度网络并不强烈依赖特定像素的准确值。使用梯度属性技术找到图像中对分类很重要的广阔区域。
最简单的梯度属性图是预测类得分相对于输入图像[1]中的每个像素的梯度。这显示了哪些像素对分类得分的影响最大,因此哪些像素对分类最重要。这个例子展示了如何使用梯度属性和两种扩展方法:引导反向传播[2]和集成梯度[3]。这些技术的使用还在争论中,因为还不清楚这些扩展能为[4]模型提供多少洞察力。
加载预先训练好的GoogLeNet网络。
网= googlenet;
提取网络的图像输入大小和输出类别。
inputSize = net.Layers (1) .InputSize (1:2);类= net.Layers . class(结束);
加载图像。这张照片是一只名叫莱卡的狗。将图像调整为网络输入的大小。
img = imread (“laika_grass.jpg”);img = imresize (img, inputSize);
对图像进行分类,并显示预测的类别和分类得分。
[YPred, scores] = classification (net, img);[score, classIdx] = max(scores);predClass =类(classIdx);imshow (img);标题(sprintf (“% s (% .2f)”字符串(predClass),分数));
网络将莱卡分类为迷你贵宾犬,这是一个合理的猜测。她是贵宾犬和可卡犬的杂交品种。
梯度属性技术依赖于找出预测分数相对于输入图像的梯度。梯度属性图的计算公式如下:
在哪里 表示像素在位置上的重要性 到班级的预测 , 那门课的softmax分数是多少 图像是否在像素位置 [1]。
将网络转换为dlnetwork
这样你就可以用自动微分来计算梯度。
lgraph = layerGraph(净);lgraph = removeLayers (lgraph lgraph.Layers(结束). name);dlnet = dlnetwork (lgraph);
指定softmax层的名称,“概率”
.
softmaxName =“概率”;
采用自动分异的方法,将莱卡图像转换为adlarray
.
dlImg = dlarray(单(img),SSC的);
使用dlfeval
和gradientMap
函数(在金宝app支持功能)来计算导数
.的gradientMap
函数通过网络向前传递图像以获得类得分,并包含对的调用dlgradient
来评估分数相对于图像的梯度。
dydI = dlfeval (@gradientMap dlnet、dlImg softmaxName, classIdx);
属性映射dydI
是一个227乘227乘3的数组。每个通道中的每个元素都对应于类分数相对于原始RGB图像的该通道的输入图像的梯度。
有许多方法可以将这张地图形象化。直接绘制梯度属性图作为RGB图像可能会不清晰,因为地图通常是相当嘈杂的。相反,沿着通道维度求和每个像素的绝对值,然后在其之间重新缩放0
和1
.显示渐变属性地图使用自定义颜色地图255颜色映射值0
白色和1
为黑色。
地图=总和(abs (extractdata (dydI)), 3);地图=重新调节(地图);Cmap = [linspace(1,0,255)' linspace(1,0,255)'];imshow(地图,“Colormap”,提出);标题(“梯度属性贴图(”字符串(predClass) + +")");
地图上最黑暗的部分是以狗为中心的部分。这张图的噪声非常大,但它确实表明网络正在利用图像中的预期信息进行分类。狗的像素比草背景的像素对分类评分的影响更大。
你可以通过修改网络的反向通过ReLU层来获得一个更清晰的梯度属性映射,这样梯度的元素和ReLU层的输入元素都被设置为0。这被称为引导反向传播[2]。
引导反向传播反向函数为:
在哪里 的损失, 是ReLU层的输入,并且 是输出。
您可以使用非标准的反向传递来编写自定义层,并使用它进行自动区分。自定义层类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, classIdx);mapGB =总和(abs (extractdata (dydIGB)), 3);mapGB =重新调节(mapGB);imshow (mapGB“Colormap”,提出);标题(“引导反向传播(“字符串(predClass) + +")");
你可以看到,引导反向传播技术更清楚地突出了狗的不同部位,比如眼睛和鼻子。
你也可以使用zeiller - fergus技术通过ReLU层[5]进行反向传播。对于zeiller - fergus法,其倒向函数为:
设置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, classIdx);mapZF =总和(abs (extractdata (dydIZF)), 3);mapZF =重新调节(mapZF);imshow (mapZF“Colormap”,提出);标题(”Zeiler-Fergus(“字符串(predClass) + +")");
使用Zeiler-Fergus反向传播技术计算的梯度归因图远没有使用引导反向传播技术计算的清晰。
综合梯度方法计算与图像像素相关的分类分数梯度,这些图像是在基线图像和感兴趣的[3]原始图像之间线性插值的。集成梯度技术被设计为对集成中的像素值的变化非常敏感,这样,如果一个像素值的变化影响到类得分,该像素在映射中有一个非零值。在简单的梯度归因技术中,网络中的非线性,如ReLU层,可以防止这种敏感性。
综合梯度归属图计算为
,
在哪里 映射的值是class吗 在像素位置 , 是基线图像,和 图像是否有一定距离 沿着基线图像与输入图像之间的路径:
.
在这个例子中,积分梯度公式通过对一个离散指标求和来简化, ,而不是积分 :
,
与
.
对于图像数据,选择基线图像为零的黑色图像。找出原始图像和基线图像之间的差异。在这种情况下,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 = dlarray (pathImgs,“SSCB”);dydIIG = dlfeval(@gradientMap, dlnet, dlPathImgs, softmaxName, classIdx);
对于每个通道,将小批处理中所有观测值的梯度相加。
dydIIGSum = (dydIIG, 4)之和;
将梯度归因图的每个元素与对应的元素相乘differenceImg
.要计算综合梯度属性图,对每个通道求和并重新比例尺。
dydIIGSum = differenceImg .* dydIIGSum;mapIG =总和(extractdata (abs (dydIIGSum)), 3);mapIG =重新调节(mapIG);imshow (mapIG“Colormap”,提出);标题(“综合梯度(“字符串(predClass) + +")");
计算出的地图显示,该网络更强烈地关注狗的脸,以此来决定狗的等级。
这里演示的梯度属性技术可以用来检查在进行分类时,你的网络是否聚焦在图像的预期部分。为了更好地了解模型的工作方式并解释分类决策,您可以在一系列图像上执行这些技术,并找到对特定类有很大贡献的特定特征。未修改的梯度属性技术可能是解释网络决策的更可靠的方法。虽然有指导的反向传播和集成梯度技术可以生成最清晰的梯度图,但这些技术对模型的工作原理能提供多少洞察力还不清楚。
这个函数gradientMap
为指定的类计算分数相对于图像的梯度。该函数接受单个图像或一小批图像。在本例中,函数gradientMap
章节里有介绍吗利用自动分异计算梯度归属图.
函数dydI = gradientMap(dlnet, dlImgs, softmaxName, classIdx)%计算一个类分数相对于一个或多个输入的梯度%的图像。dydI = dlarray(0(大小(dlImgs)));为i=1:size(dlImgs,4) i= dlImgs(:,:,:,i);成绩=预测(dlnet,我,“输出”, {softmaxName});classScore =分数(classIdx);dydI(::,:,我)= dlgradient (classScore,我);结束结束
的replaceLayersOfType
函数将指定类的所有层替换为新层的实例。新图层的名称与原始图层相同。在本例中,函数replaceLayersOfType
章节里有介绍吗锐化梯度属性地图使用引导反向传播.
函数lgraph = replaceLayersOfType(lgraph, layerType, newLayer)%在layerGraph lgraph中替换指定类型的层% layerType与层的副本newLayer。为i = 1:长度(lgraph.Layers)如果isa (lgraph.Layers(我),layerType)匹配旧层和新层之间的名称。layerName = lgraph.Layers(我). 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。
斯普林斯伯格,约斯特·托拜厄斯,阿列克谢·多索维茨基,托马斯·布鲁克斯和马丁·里德米勒。《追求简单:全卷积网络》ArXiv: 1412.6806 (Cs)2015年4月13日。http://arxiv.org/abs/1412.6806。
Sundararajan, Mukund, Ankur Taly和Qiqi Yan。深层网络的公理归因第34届机器学习国际会议论文集(PMLR)70 (2017): 3319 - 3328
abdebayo, Julius, Justin Gilmer, Michael Muelly, Ian Goodfellow, Moritz Hardt, Been Kim。“显著性地图的健全检查。”ArXiv: 1810.03292 (Cs,统计)2018年10月27日。http://arxiv.org/abs/1810.03292。
马修·d和罗伯·费格斯。“可视化和理解卷积网络。”在计算机视觉- ECCV 2014。计算机科学8689课堂讲稿, D. Fleet, T. Pajdla, B. Schiele, T. Tuytelaars编辑。施普林格可汗,2014。
dlarray
|dlfeval
|dlgradient
|dlnetwork
|googlenet
|gradCAM
|imageLIME
|occlusionSensitivity