社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【深度学习】只需一次向前推导,深度神经网络可视化方法来了!(ECCV Workshops 2022)

机器学习初学者 • 2 年前 • 340 次点击  
转载自 | 极市平台
作者 | Ziyang Li


论文链接:https://arxiv.org/abs/2209.11189


1

『写在前面的话』

类激活图(CAM)致力于解释卷积神经网络的“黑盒”属性。本文首次提出可学习的类激活方法,通过设计适当损失来迫使注意机制学习有效CAM输出,并只需一次前向推理。在ImageNet上与流行类激活方法比较,取得了优异且有趣的实验结果。最后针对分类错误的情况,作者等人进行了细致而全面的分析。


2

『类激活方法与Motivation简述』

深度卷积神经网络对相关决策的可解释性不强,这种“黑盒”属性影响了该技术在安全、医疗等领域的商业应用。由类激活图(CAM)生成的显著图SM(saliency map)描述了对模型决策贡献最大的图像区域,因此是一种为“黑盒”提供可解释理论的方法。

以往的CAM方法分为基于梯度基于扰动两种,如下图所示:

图1. (a)是基于梯度的CAM方法,(b)和(c)是基于扰动的方法。

在图1 (a) 中,基于梯度的方法使用从outputs反向传播的梯度计算最后一个卷积层中特征权重,并将特征图加权聚合得到CAM,explanation代表由CAM产生的SM。(常见的有Grad-CAM、GradCAM++)

在图1 (b) 中,基于扰动的方法通常选取模型中不同深度的特征图,或随机扰动图(图1 (c) ),作为掩码与输入图像点乘,得到扰动输入,最后通过前向传递扰动输入来生成SM。(常见方法有SIDU、Score-CAM、SISE、ADA-SISE、RISE)

然而这些方法要么基于反向传播梯度,要么在推理阶段需要多次前向传递,因此引入了大量的计算开销。另外,这些方法在关注模型解释的同时,忽略了对训练集的有效利用。

因此本文提出了一种仅需一次前向传递的方法,同时引入注意机制,用可学习的方法,使训练集得到了充分利用。


3

『可学习注意机制的理论推导——通俗易懂』

首先确定我们要研究的问题以及变量表述,这里令代表黑盒模型,任务类别数为,输入图像为,由经过得到的预测值标签为,模型中最后一层的个特征图被表述为( 均代表对应特征图的维度):

因此任务目标是利用A得到CAM,并生成相应的SM,从而可视化的显著图像区域,达到解释黑盒的效果。

接着给定注意机制,通过训练集中的图像与对应标签来训练,从而生成对应的CAM输出可表述为如下过程:

其中是由对应输入图像与标签生成的CAM,分别为该注意机制的权重和偏置向量。

接着,为有效训练注意机制的参数,将注意机制放在模型的最后卷积层的输出位置,并提出以下两种不同的学习方式,如图2和图3:

图2. l-cam-fm图示。
  1. 由注意机制得到的CAM与最后一次特征图元素点乘(做乘法前先用sigmoid归一化),以重新加权对应特征图的元素,其作用相当于一个自注意的“遮罩”,用来罩住或露出相应特征图的决策影响区域。
图3. l-cam-img图示。
  1. 由注意机制得到的CAM被缩放到与输入图片一致的维度,sigmoid + 点乘运算后,其结果作为扰动图前向传递,相当于CAM被应用到了每个特征图的每个通道。

最后是本文方法的核心,上述两种方案通过梯度下降算法进行参数更新,在训练注意机制时,冻结原模型,即仅训练注意机制,从而使该方法适用于大部分卷积神经网络。在训练过程中,作者等人应用了所提出的以下损失函数:

其中是交叉熵损失,分别代表total、average变异算子,其计算公式如下:

上述公式中,均为正则化参数,该损失函数的优化目标是:使总损失最小化,同时使不同的损失分量处于相同的数量级,从而确保所有损失分量对损失函数的贡献相似。在推理阶段,本文方法仅需一次前向传递,得到CAM后,与其他类激活方法一致,通过最小-最大归一化算子导出SM。


4

『效果展示』

对比方法基于VGG-16和ResNet-50两种模型,数据集为ImageNet。正则化参数皆凭在训练集上的经验选择,实验结果展示如下表:

表1. 实验结果展示。

两个常用的性能评价指标:置信度增加 (IC) ,越大越好。平均下降 (AD),越小越好。一个复杂度评价指标:推理阶段的前向传递次数FW。

一些可视化的比较结果如下图所示:

图4. 可视化比较结果。


5

『错误类分析』

在表1中可以明显看出本文方法在有些时候并非最优,然而一次前向推理的复杂度成为最大亮点。作者等人对该方法的错误分类原因进行了详细的探讨。

首先,ImageNet中许多类别实例在语义、外观上都非常接近,如下图所示:

图5. ImageNet中的一些相关类。

如“goose”与“drake”,“coach”与“minibus”,这种情况下,本文方法得到的SM与真实标签所对应的SM是极其相似的,因此本文所提出的注意机制会聚焦于相同的图像区域,进而推断对应标签。

其次,单标签数据集ImageNet的某些图片包含了多个类别标签,而且这些标签在ImageNet的其他图片中已经确定存在。如下图所示:

图6. ImageNet中含多标签的图像。

比如图6中第一列,该图片对应的标签为“tennis ball”,然而在先前的训练中,本文方法已经确定了在ImageNet中存在的“Tibetan Terrier”这一标签,从而导致分类错误。

最后,ImageNet中的某些类别存在一些细微的偏差,如下图所示:

图7. ImageNet中的一些偏差图像。

这种情况下,尽管真实标签为“rugby ball”,但由于分类器已经确定或学会了“rugby match”这一预测,因此在分类时会更偏向后者这一更广泛的标签。


6

『思考与总结』

本文为进一步解释“黑盒”模型,提出了一种可学习的CAM方法,并产生了具有竞争性的实验结果。但是有两个问题笔者不得其解。

第一个问题就是,本文方法通过训练集大量训练获得四个经验下的正则化参数,那么相比其他方法,是否存在额外增加了实现成本?另外,如果将此参数应用于其他数据集上是否能保持原有性能,到时候如果不能是不是又要重新从训练集中获取呢?

第二,对于ImageNet中的某些包含多标签图像,错误分类的原因是分类器已经对某些类别形成既定的学习认知。那么假如没有训练这个环节,是不是就能减少对某些已确定类别的错误识别呢,或者说,有没有其他方法能减少这种情况的发生呢。

感谢大家抽出宝贵的时间来阅读,希望这篇文章能给大家提供一定帮助~

往期精彩 回顾




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/148245
 
340 次点击