第六课.GNN的可解释性

CNN的可解释性

深度学习中的可解释性

Interpretability of CNN 即CNN的可解释性,研究者们希望看到CNN每一层所做的事情,截止目前,人们已经逐渐向CNN的可解释研究靠近,但没有完全解决;类似地,自然语言处理的重要模型RNN也存在没有完全解决可解释性的问题;深度学习是基于数据而驱动的,对比传统的算法,往往是基于各种判断条件,再依次执行计算;深度学习可以认为是数据归纳统计的结果,让机器在海量数据中学习分布,以概率形式输出结果,中间的计算过程犹如黑箱(Black Box),大部分人只关心调整参数获得一个可用的结果,没有过多关心内部发生的事情;
fig1
可以看出,在黑箱模输出后,需要可解释性的方法才能让人理解更多信息,另外,相比经典的机器学习算法,准确率上升的同时,可解释性逐渐下降;

关于深度学习与计算机视觉,计算机视觉出现的时期很早,而且在从前就较为成熟,只是在深度学习提出后,重新在计算机视觉领域掀起工业革命,从而淘汰了从前的很多旧算法,但是深度学习端到端的方式引起学者们的担忧,一味地设计网络,更改损失函数的模式总会步入瓶颈期,比如从2015年兴起的目标检测,从RCNN系列到YOLO系列,尤其是YOLO系列,总是在YOLO早期架构的基础上集成各种技巧,确实提升了模型的表现,但并没有再带来突破性的创新;为了从根本上寻找未来新方向,我们有必要深入研究模型内部的细节,即CNN的可解释性,我们希望做到将CNN的每一步都清晰展示出来;在数据驱动的思想下,目前CNN研究所关注的是模型提取出的大概率对象,人们忽视了其中丢失的小概率对象,但这些小概率对象在某些情况下也具有重要意义;

深度学习在医学领域受到一定的排斥,原因在于过度缺乏可解释性,如果不关注模型内部形成的小概率对象,会对医疗的诊断造成极大隐患;比如用深度学习模型分类医疗图像(判断是否是癌细胞),模型只能说是帮助医生作判断,但不能代替医生作决定,比如模型会指出属于癌细胞的概率大小,但不能让人信任地说明模型给出分类癌细胞概率大小的理由;

CNN可解释性的研究

对于一层卷积网络,通常会设计很多的filter,filter的数量越多,代表可检测到的特征越多;

现在假设每个filter的内容与计算模式都由研究者亲手设计,则我们可以明确我们想要检测的特征,我们也可以明确填充的意义,步长选择的意义,但这些不代表模型是可解释的,因为在实际训练中,关于CNN的层数,迭代次数,参数初始化,优化方法的选择,都是难以解释的,我们总是依靠经验进行调整;


扩展:与机器学习模型研究相关的可视化工具wandb,有利于论文写作的可视化表达:

https://wandb.ai/site

关于CNN可解释性的研究,分为两类:

1.参数的可视化:
fig2
2.特征的可视化,低层特征图可视化(9个通道):
fig3
高层特征图可视化(9个通道):
fig4

模仿人类视觉:This Looks Like That: Deep Learning for Interpretable Image Recognition

CNN可解释性研究的论文之一为"This Looks Like That: Deep Learning for Interpretable Image Recognition";人在判断图像时,会寻找主要特征,根据主要特征进行对比,从而分类一个对象;比如棕熊,大熊猫,北极熊,我们容易发现他们的主要特征为颜色;如果是分类大熊猫和小熊猫,则容易发现两者除了颜色外,还有形状是主要特征;

在机器的角度下,传统CNN完全根据像素进行研究,有些像素组成纹理特征,有些像素组成颜色特征,换言之,人类看事物是从大到小,而机器是从小到大;为了缩小机器与人的差异,提出ProtoPNet(原型机网络):
fig5
卷积层 f f f为传统CNN,比如(VGG,DenseNet),传统卷积层的输出特征 z = f ( i n p u t ) z=f(input) z=f(input)作为Prototype层的输入,Prototype层是 m m m个并行的卷积网络,每个卷积网络用于检测不同的特征,第 j j j个卷积的输出记为 p j p_{j} pj(在论文中,张量 p j p_{j} pj h e i g h t p height_{p} heightp w i d t h p width_{p} widthp大小均为1),使用 p j p_{j} pj( 1 × 1 × d e p t h 1\times 1\times depth 1×1×depth)与卷积 f f f的输出特征 z z z( h e i g h t z × w i d t h z × d e p t h height_{z}\times width_{z}\times depth heightz×widthz×depth)逐个点计算L2距离;反映在原图中,即为原图某个区域检测到第 j j j个特征的强度;现在可以得到一个矩阵( h e i g h t z × w i d t h z height_{z}\times width_{z} heightz×widthz),其元素代表特征 j j j在对应区域的强度,对矩阵进行maxpool,得到特征 j j j在原图中最大的响应值;

m m m个特征都进行以上操作,得到 m m m个特征在原图中的最大响应值, m m m个响应值反映了原图具备这 m m m个特征的程度;再对这组响应值( m × 1 m\times 1 m×1)进行全连接的线性变换,映射到分类所含的 c c c个类别上;

可以看出,ProtoPNet与传统CNN最大的不同在于Prototype层模仿了人类看图像的机制,取出特征在原图中逐个区域进行比较,再确认原图含有这个特征,经过多个特征与原图的比较,再得出分类结论;

ProtoPNet与传统CNN,其本质都是模式的匹配,CNN会连续地卷积,得到一组尺寸很小但深度很深的特征图,其实这已经得到了检测到的各种特征,但人在实际看一个物体时,不会把每个小细节特征都分析一遍,而是只关注较明显的特征(从另一个角度反映了注意力机制确实是有效的意义);ProtoPNet把 m m m个明显特征在低层特征图中对比,模仿人的同时还恢复了信息的完整性(低层特征图具有更多信息),相比CNN的模式匹配,这种思想更合理;

ProtoPNet的可解释性在于可以利用Prototype层指出各个特征在原图中的强度分布,如果更粗略一点,可以指出各个特征在原图中最具代表性的位置;

从参数角度研究:How Functions Evolve in Deep ConvolutionalNeural Network

另一篇CNN可解释性的论文"How Functions Evolve in Deep ConvolutionalNeural Network",从参数可视化的角度研究了CNN;通过测量训练CNN过程中filter的变化情况解释CNN的机制,论文对VGG和ResNet进行了分析,选择这两种网络的原因在于,VGG是连续的卷积,ResNet会包含残差信息,VGG和ResNet分别代表了两大卷积的类型;

对于VGG16,选择了两个滤波器,随着训练的进行,对滤波器可视化(一行代表一个滤波器的参数更新过程):
fig6
可以看出,有的滤波器变化较为平滑,有的又非常剧烈;进一步地,可视化分析两个网络在训练中的表现:
fig7
图a到图c分别为:

  • 相邻层之间滤波器的变化;
  • 每一层的变化强度,该比率表示一个滤波器中有多少参数发生了显著变化;
  • 通道发生变化的比率,代表有多少通道在训练中发生了显著变化;

结果反映了,VGG与ResNet相比,参数变化幅度抖动强烈,另外,两个网络都体现出一个问题,并不是所有参数都会发生明显变化,很多滤波器其实根本就不会参与计算,这可以作为简化模型的依据;

另外,选取filter进行可视化:
fig8
VGG和ResNet对应的两行分别是第0个epoch和第60000个epoch时,随机选取的5个filter在这两个epoch下的结果呈现。针对这两个epoch,resnet的滤波器变化不大,而VGG的滤波器变化很大;

Image到Graph的过渡:Interpreting CNN Knowledgevia An Explanatory Graph

关于CNN与图数据的可解释性联系,被论文"Interpreting CNN Knowledgevia An Explanatory Graph"提出,首先了解问题出现的背景:
fig9

在CNN的发展中,给一张图,现在CNN已经可以准确告诉我们,图像是"bird",只是现在希望CNN在检测特征时,可以准确找到自己该检测的位置;比如在检测鸟头的时候,不要错误地检测到鸟腿上,还认为这是鸟头,上图可视化了4个不同的filter在图像中出现的峰值(peak)区域,明显发现每个filter都出现了没有正确匹配到对应特征的现象;原因在于模型的filter表达不够清晰,是一种"混乱"的表达,虽然最终可以得到正确结果,但是在特征匹配的过程中,这些特征已经不是我们人类所理解或所想要看到的特征,论文认为这是CNN缺乏解释性的一种表现;

为了将CNN的filter尽量纠正到我们人可以理解的特征上,论文提出将filter重新组合,从而将混乱的表达拆分成人类可以理解的子模式,论文中的模型设计为:
fig10
其主要思想是:输入一张图像,然后进行卷积(在ImageNet上训练过的VGG)运算,进行特征提取,目标是在不同的卷积层上直接显示出语义信息(过去的研究表明CNN的每一层都具有对应的模式,低层CNN可能对应颜色,纹理,高层CNN对应复杂语义,比如眼睛,鼻子,嘴巴等模式,注意,每一层的模式表达一般都是混乱的,比如一层CNN既可以检测眼睛,又可以检测鼻子),现在将不同层下的模式拆分开,构建成节点,同一层的每个节点代表该模式下不同的语义(子模式);节点的特征向量直接选择对应区域下的特征图,可以认为,这个graph是对图像内各种语义的高度概括;

构建解释图的过程为无监督学习,通过聚类将同一层下的filter集合拆分开;不同的子集可以检测不同的子模式,经过无监督的学习,可视化同一模式(同一层)下各节点对应的区域峰值为:
fig11
可见,现在CNN的特征匹配更加具体,其检测到的特征让我们人类更容易理解,而不是模糊地说这是低层纹理特征,那是高层语义特征;

GNN的可解释性

GNN相比CNN更加抽象,GNN所处理的Graph本身就是抽象的,不论从参数或数据变换的可视化,都是让人难以直观理解的;图神经网络是目前深度学习领域最热门的话题,但其解释性问题并没有得到广泛关注,研究图神经网络可解释性的优势在于:

  • 提升GNN的可信赖程度;
  • 帮助研究者理解图本身的特性;

较为通用的一篇论文是"GNNExplainer: Generating Explanationsfor Graph Neural Networks";论文以两个方向为主:

  • 1.从宏观上了解GNN对每个特定的任务,哪些结构更重要;
  • 2.从微观角度考虑,对于具体的特征向量,哪些维度更重要;

fig12
上图给出如何对GNN预测的节点分类(Basketball和Sailing)的结果解释;针对节点 v i v_{i} vi及其类别"篮球",其邻居中很多人都喜欢球类也有一些喜欢非球类,GNNExplainer可以自动的找到邻居中都喜欢球类的这些人。 同样的,针对节点 v j v_{j} vj,GNNExplainer也可以发现其好友中同样喜欢水上或沙滩类运动的好友;

比如"篮球"节点,从宏观上看,我们需要判断其邻居哪些对它更重要,从微观上看,每个邻居的特征向量,哪些维度对节点分类更重要,即下图:
fig13

  • A图:哪些邻居更重要,绿色节点较重要,黄色节点不重要;
  • B图:各个重要邻居特征的哪些维度更重要,对绿色节点进行分析,红色标记的位置代表该维度不重要;

对于一个已经训练好的GNN模型,使用GNNExplainer的思想进行解释,论文指出,关于如何判断重要性,可以借助互信息(mutual information);


关于互信息,信息增益

信息量
离散型随机变量 Y 的概率分布如下:
fig14
其中, P ( Y = y i ) = p i P(Y=y_{i})=p_{i} P(Y=yi)=pi i ∈ [ 1 , 2 , . . . , n ] i\in [1,2,...,n] i[1,2,...,n]

随机变量 Y 取某个值的信息量与其对应的概率成反比,用公式表示如下:
I ( Y = y i ) = − l o g 2 [ P ( Y = y i ) ] = − l o g 2 ( p i ) I(Y=y_{i})=-log_{2}[P(Y=y_{i})]=-log_{2}(p_{i}) I(Y=yi)=log2[P(Y=yi)]=log2(pi)
一件事发生的概率越高,其信息量越小,当概率值为 1 时成为确定性事件,信息量为零。例如,太阳早上从东边升起属于确定性事件,这个消息的信息量为零。公式中的对数通常以 2 为底或以 e 为底,这时信息量的单位分别叫做比特或纳特。

信息熵
信息熵定义为信息量的数学期望,用公式表示如下:
H ( Y ) = ∑ i = 1 n P ( Y = y i ) I ( Y = y i ) = − ∑ i = 1 n p i l o g 2 ( p i ) H(Y)=\sum_{i=1}^{n}P(Y=y_{i})I(Y=y_{i})=-\sum_{i=1}^{n}p_{i}log_{2}(p_{i}) H(Y)=i=1nP(Y=yi)I(Y=yi)=i=1npilog2(pi)
其中, n n n代表随机变量 Y 的取值数量;

信息熵表示随机变量不确定性的大小,信息熵越大,不确定性越高。上面公式中的 Y 代表样本的类别,在解决分类问题时希望 Y 的不确定性越小越好,即信息熵越小越好;

最大熵定理
当随机变量 X X X所有取值的概率相等时,即 P ( X = x i ) P(X=x_{i}) P(X=xi)概率都相等时,信息熵可以取得最大值,随机变量具有最大的不确定性;

条件熵
条件熵 H ( Y ∣ X ) H(Y|X) H(YX) 表示已知随机变量 X 的条件下随机变量 Y 的不确定性,定义为 X 给定条件下 Y 的条件概率分布的熵对于 X 的数学期望,用公式表示如下:
H ( Y ∣ X ) = ∑ i = 1 n x p x , i H ( Y ∣ X = x i ) H(Y|X)=\sum_{i=1}^{n_{x}}p_{x,i}H(Y|X=x_{i}) H(YX)=i=1nxpx,iH(YX=xi)
其中, p x , i = P ( X = x i ) p_{x,i}=P(X=x_{i}) px,i=P(X=xi) i ∈ [ 1 , 2 , . . . , n x ] i \in [1,2,...,n_{x}] i[1,2,...,nx] n x n_{x} nx代表随机变量 X 的取值数量, H ( Y ∣ X = x i ) H(Y|X=x_{i}) H(YX=xi)代表随机变量 X = x i X=x_{i} X=xi条件下的随机变量 Y Y Y的子集的信息熵;

联合熵
多个联合变量的熵,也就是将熵的定义推广到多变量的范围:
H ( X , Y ) = − ∑ i = 1 n ∑ j = 1 m p i j l o g ( p i j ) H(X,Y)=-\sum_{i=1}^{n}\sum_{j=1}^{m}p_{ij}log(p_{ij}) H(X,Y)=i=1nj=1mpijlog(pij)
其中,记 p i j = P ( X = x i , Y = y j ) p_{ij}=P(X=x_{i},Y=y_{j}) pij=P(X=xi,Y=yj) i = 1 , 2 , . . . , n i=1,2,...,n i=1,2,...,n j = 1 , 2 , . . . , m j=1,2,...,m j=1,2,...,m,联合熵度量的是一个联合分布的随机系统的不确定度;

信息增益
信息增益(information gain)表示已知特征 X 的信息使得类别 Y 的不确定性减少的程度。从定义上容易得知:特征 X 的信息增益 = Y 的信息熵 - Y 的条件熵;即:
g ( Y , X ) = H ( Y ) − H ( Y ∣ X ) g(Y,X)=H(Y)-H(Y|X) g(Y,X)=H(Y)H(YX)
当信息熵和条件熵中的概率由数据估计(如极大似然估计)得到时,所对应的信息熵与条件熵分别称为经验熵和经验条件熵;

互信息
互信息 M I ( X , Y ) MI(X,Y) MI(X,Y)表示两个变量 X X X Y Y Y之间关系的强弱:
M I ( X , Y ) = H ( X ) − H ( X ∣ Y ) = H ( Y ) − H ( Y ∣ X ) = H ( X ) + H ( Y ) − H ( X , Y ) MI(X,Y)=H(X)-H(X|Y)=H(Y)-H(Y|X)=H(X)+H(Y)-H(X,Y) MI(X,Y)=H(X)H(XY)=H(Y)H(YX)=H(X)+H(Y)H(X,Y)

讨论互信息的时候,两个随机变量的地位是相同的;讨论信息增益的时候,是把一个变量看成减小另一个变量不确定程度的手段,但其实二者的数值是相等的;


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值