社区所有版块导航
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学习  »  机器学习算法

原创 | 机器学习模型的可解释性(三)

数据派THU • 4 周前 • 37 次点击  
图片
作者:宋雨婷
本文约4300字,建议阅读8分钟
本文带你理解在CNN内部是如何区别捕捉图形信息。


文章的第二部分“机器学习模型的可解释性(二)”中对LIME、SHAP、Kernel SHAP 和Deep SHAP作了详细解读。


随着深度卷积网络现在成为大规模图像识别的首选架构,理解在CNN内部是如何区别捕捉图形信息变得尤为重要。


现有一个图像分类任务,给定一个训练好的卷积网络、一个图像I和一个感兴趣的类别c,我们希望从这个类别出发,探索它最感兴趣的特征。显著图是如何做的呢?


image.png是卷积网络的分类层为图像I计算的对于类别c的分数。在训练完网络之后,我们先初始化I为零图像,接着,以image.png为目标函数,不断迭代I,直至收敛到最大值点。在这里加入L2正则项的原因是为了防止图像I的像素值一味增大忽略任务的要求。在训练完成之后,会得到每个类别的显著图,如下:


 image.png


单单得到每个类目的显著图是不够的,我们还想要知道,对于每一个样本,模型将其判断为某一个类别或不判断为另一个类别的原因。给定图像image.png、类别c和针对类别c的分数函数1749607706978.png 的卷积神经网络,我们希望根据像素对1749607773997.png分数的影响对image.png的像素进行排序。


从例子开始,考虑类别c的线性分数模型:image.png,其中图像I以向形式表示,image.pngimage.png分别是模型的权重向量和偏差。在这种情况下,很容易看出元素image.png的大小定义了I中相应像素对类别c的重要性。


然而,在卷积神经网络中,类别分数1749607706978.png是I的高度非线性函数,因此上一段的推理不能立即应用,我们需要先利用泰勒展开对他进行一阶展开,image.png,其中,image.png


1. 基于原型层的事后解释方法


对于一个黑箱,他的这些参数是怎么来的呢?不难发现,都是通过训练集数据加之以反向求导更新迭代而来的。一个自然而然的问题就是,我们能否在训练数据这个层面去解释这个黑箱呢?问题就自然而然地变为了, 哪些训练点对这个预测是影响最大的?我们想知道,去掉哪个点,对的改变最大?如果我们把某个数据乘以权重,结果会如何变化?


把这个问题量化,设原先的image.png 是由目标函数image.png,现在,我们把某一个数据点z的损失函数前面的权重拉大image.png,那么,现在的损失函数为image.png,我们想知道的是,在拉大这个权重之和,模型在测试集上面的改变会有多少?即image.png。为了解决上面那个问题(哪些训练点对这个预测是影响最大的),我们必须要去固定image.pngimage.png,去遍历训练集上面的所有的点,训练一个新的网络,那么,一共需要训练n次网络,这是一个很麻烦的过程,我们应该去尽量避免,对此,Pang Wei Koh提出了用影响函数去解决这个问题。


1.1. 增加训练点权重对损失的影响函数


我们想知道的是,当image.png时,image.png如何变化?Cook & Weisberg先前提出,增加z的权重对模型参数的影响由下式给出:


 image.png


其中,image.png是海瑟矩阵(并假定它正定),接着,考虑增加z的权重对测试点image.png 的损失的影响,有:

 

image.png


1.2. 训练输入扰动对损失的影响函数


假设我们不是增加训练点的权重,而是通过一个小量扰动image.png训练输入x,即我们考虑image.png。我们将image.png从z移动到image.png,新的参数估计值为:

 

image.png


增加image.png的权重(同时减少z的权重)对参数image.png的影响由下式给出:

 

image.png


如果x是连续的并且1749609753740.png很小,我们可以进一步近似为:

 

image.png


接下来,我们考虑这种扰动对测试点image.png的损失的影响。通过链式法则,我们有:

 

image.png


代入的表达式,我们得到:

 

image.png


如果我们令1749609753740.png指向image.png的方向,那么image.png将达到最大值。


在计算影响函数时,我们通常会碰到三个问题:Computational efficiency、Smoothness、Finding the ERM.


  • Computational efficiency


我们想要计算影响函数则必须要计算黑塞矩阵的逆,然而对于大规模数据集和复杂模型,这通常非常耗时的操作。为了解决这个问题,我们不直接计算矩阵的逆,取而代之的是,先利用Pearlmutter trick计算海瑟矩阵与v(loss的梯度)的点乘,这个过程基本是在线性时间内完成的。然后再用共轭梯度法或泰勒展开去近似计算image.png。这个过程避免了显式地计算海森矩阵,大大降低了计算复杂度和内存需求。

 

image.png


  • Smoothness


如果损失函数在某处不可微呢?我们MNIST 任务上训练了一个SVM模型。SVM 的损失函数涉及到 hinge 损失Hinge(s)=max(0,1-s),这是一个分段线性函数,会导致不可微性。我们将 hinge 处的导数设置为 0 并计算image.png。结果不准确,二阶导数无法提供关于支持向量z与 hinge 的接近程度的信息,因此的二次近似是线性的,这导致image.png高估了z的影响。


 image.png


那如何去解决这个问题呢?一个常见的的思想是找到一个平滑的函数去代替原先的hinge函数,我们用image.png函数来近似,并分别设置t=0.1和0.001来比较预测值与真实值的差异,结果如下图,在用SmoothHinge替代Hinge之后,预测结果好了很多。

 

image.png


  • Finding the ERM


我们的分析都是基于找到了一个全局最优解image.png,然而,在大多数情况下, 函数是非凸的,导致它不一定会收敛到全局最小值上。假如影响函数收敛到了局部最小值上面,应该如何处理呢?这里的核心思想是:从找到的局部最小值开始重新训练模型,分析影响函数与真实值之间的大小关系。

 

image.png


结果发现,尽管模型处于非收敛且非凸的困难设置下,但令人惊讶的是,预测的损失变化image.png和实际的损失变化仍然高度相关。这说明影响函数在实际复杂的训练场景中(如非凸优化和非收敛情况)具有一定的鲁棒性。


2. 反事实解释


在现实情境中,借贷公司常作出如下表述:“鉴于您的年收入仅为 30000 元,本公司将不予提供贷款;若您的年收入达 45000 元,本公司则会考虑放款。”此论述具有反事实属性,即探讨被观测个体应如何进行改变,以促使期望结果的达成。


反事实情形通常具有多元性特征。就该实例而言,欲使借贷公司的决策由拒绝转变为接受,并非仅能通过提升年收入这一途径实现,学历、住房面积、年龄等因素的变动亦可能产生相同效果。


我们也可以通过考虑反事实中主体属性的变化对决策的影响来评估算法是否公平。同样在这个例子中,假如我们发现一个反事实情况:如果一个少数族裔申请人的种族属性被改变为多数族裔(其他条件不变),其贷款申请就会被批准。那么,这个算法存在潜在的不公平性,因为它对种族这一变量存在明显的依赖。


在这个情形下,若年收入提升至 50000 元,无疑亦会致使决策发生改变。然而,在一般情形下,人们往往倾向于探寻达成模型决策改变所需的最小变动,即通过最易于实现的目标改变来影响目标值。 


Sandra Wachter首次提出了反事实解释,在他的理论中,我们需要在保证目标决策会改变的情况下最小化距离度量,则将该问题转化成了一个带约束的最小化问题,如下:

 

image.png


对于带约束的优化问题,常见的思路是将其转化成无约束优化问题来求解,因此,原式被转化为:

 

image.png


这个公式的目标是找到一个image.png,使得在最大化image.png的情况下,表达式image.png的值最小。表达式中的image.png部分通常用于衡量预测值image.png与目标值image.png之间的差异,并且通过image.png来调节这个差异的权重。image.png部分则用于衡量 image.png与另一个数据点image.png之间的距离。 


其中,image.png的计算公式如下:

 

image.png


其中,分子为曼哈顿距离,分母为:

 

image.png


L1 范数加权逆中位数绝对偏差具有捕捉数据空间内在波动性、对异常值更稳健和诱导稀疏解等优点,使反事实解释更易于理解和传达。具体来说,如果一个特征在数据集中变化很大(即较大),那么在计算距离时,该特征的权重相对较小;反之,如果一个特征变化较小(较小),其权重相对较大。


在机器学习文献中,生成反事实解释的技术与 “对抗性扰动” 密切相关。对抗性扰动是指通过计算使现有分类器产生不同分类结果的合成数据点。反事实解释在尝试寻找一种改变,使得决策结果发生改变,这和对抗性扰动的思路是相似的。在当前对抗性扰动的相关研究中,针对距离函数的选取存在一定缺陷。具体而言,现有的对抗性扰动往往倾向于多变量出现小幅度变化的情况,而并非聚焦于生成那些稀疏的、便于人类理解的解决方案。然而,对于反事实解释来说,距离函数的选择起着至关重要的作用,因为不同的距离函数会引导出不一样的反事实解释结果。


回到上文提及的反事实情况:如果一个少数族裔申请人的种族属性被改变为多数族裔(其他条件不变),其贷款申请就会被批准。但是,人的种族是很难更改的,尽管两向量之间的距离相比于修改其他因素的值要小。同时,为了得到更可行的解释,我们在做扰动的时候,应该只在可行域内进行。


在BERK USTUN的研究中,用损失函数cost替代距离d,并且将扰动之后的向量约束在可行域范围内。即:


image.png


这个公式的目的是在因果可行的反事实集合A中,找到一个x’,使得它与x的成本(cost(x,x’))最小,同时满足f(x’)=y’,即经过函数f作用后得到目标值y’。


这里A是根据给定的结构因果模型(SCM)所允许的因果可行反事实的集合。


但是,如果我们无法获取结构因果模型会怎样?这意味着在实际操作中,如果没有结构因果模型A来确定反事实的可行性集合,那么上述的优化问题就无法直接求解。因为A是依赖于结构因果模型的,没有它就无法确定哪些反事实是因果可行的。


为解决这个问题,Sahil Verma提出构建变分自编码器来将输入实例映射到潜在空间,在潜在空间中搜索反事实之后,使用解码器将其映射回输入空间。数据在高维空间中往往集中在一个低维流形上,反事实也应该在这个数据所在的流形上才有意义。与此同时,在潜在空间中进行搜索可能更容易,因为潜在空间通常具有更低的维度,且数据在潜在空间中的分布可能更规则。在找到潜在空间中的反事实后,需要通过解码器将其转换回原始的数据输入空间,这样就能得到在原始数据空间中有意义的反事实。


不妨看下面这张图:

 

image.png


对蓝色的点X进行反事实操作,即使红色的点CF1与X更近,然而由于它不处于数据流型之中,模型会更倾向于用绿色的点CF2来进行解释。


在CNN内部,基于原型层的事后解释和反事实解释是两种基本的解释方法,在后续文章中将进一步详细解读机器学习模型的可解释性。


编辑:于腾凯
校对:林亦霖




b9b7aa7504c640e28b6d3d3351bc8ff.jpg欢迎大家扫码加入粉丝群(任选其一即可)





欢迎在评论区留言与本文作者互动交流!



作者简介

宋雨婷,苏州大学,未来科学与工程学院数据科学与大数据技术专业在读,对可解释性机器学习、计算机视觉等领域感兴趣。

数据派研究部介绍




数据派研究部成立于2017年初,以兴趣为核心划分多个组别,各组既遵循研究部整体的知识分享实践项目规划,又各具特色:


算法模型组:积极组队参加kaggle等比赛,原创手把手教系列文章;

调研分析组:通过专访等方式调研大数据的应用,探索数据产品之美;

系统平台组:追踪大数据&人工智能系统平台技术前沿,对话专家;

自然语言处理组:重于实践,积极参加比赛及策划各类文本分析项目;

制造业大数据组:秉工业强国之梦,产学研政结合,挖掘数据价值;

数据可视化组:将信息与艺术融合,探索数据之美,学用可视化讲故事;

网络爬虫组:爬取网络信息,配合其他各组开发创意项目。


点击文末“阅读原文”,报名数据派研究部志愿者,总有一组适合你~



转载须知


如需转载,请在开篇显著位置注明作者和出处(转自:数据派THUID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

未经许可的转载以及改编者,我们将依法追究其法律责任。





关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。



图片


新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

点击“阅读原文”拥抱组织


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