精华内容
下载资源
问答
  • Lua代码解释

    热门讨论 2016-08-24 10:04:01
    这个Lua解释器是我自己使用lua 5.1的源码编译的,我平时写lua程序就用这个运行,小巧轻便,可用来配置Sublime Text3的lua运行环境
  • 文章目录导读PyCharm下载安装配置使用 导读 PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性,目前PyCharm 安装使用教程网上很多,但针对最新版的较少,有稍许出入,所以小编来介绍一下 PyCharm 在 Windows...

    导读

    PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性,目前PyCharm 安装使用教程网上很多,但针对最新版的较少,有稍许出入,所以小编来介绍一下 PyCharm 在 Windows系统下下载、安装以及使用教程的。结合anaconda自带的python使用。

    PyCharm下载

    首先附上PyCharm 安装包的下载地址:http://www.jetbrains.com/pycharm/download/#section=windows
    在这里插入图片描述
    Professional 是专业版,功能强大,需要老师和学生使用教育邮箱来注册使用;Community 是社区版,任何人都可免费下载安装使用,所以推荐安装社区版,这对于python项目来讲是足够了。
    在这里插入图片描述
    在这里插入图片描述
    现在安装包下载好了,下面介绍安装教程

    安装

    点击安装步骤详细截图如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    我们安装成功了,下面请看配置教程

    配置

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    使用

    这里我们简单介绍下使用,如图配置成功
    在这里插入图片描述
    在这里插入图片描述
    注:小编在新电脑上重新安装配置成功,任何问题欢迎下方评论区留言,欢迎交流~~

    展开全文
  • 一文详解什么是可解释AI

    千次阅读 多人点赞 2021-03-03 11:43:08
    摘要:本文带来什么是可解释AI,如何使用可解释AI能力来更好理解图片分类模型的预测结果,获取作为分类预测依据的关键特征区域,从而判断得到分类结果的合理性和正确性,加速模型调优。 1. 为什么需要可解释AI? ...
    摘要:本文带来什么是可解释AI,如何使用可解释AI能力来更好理解图片分类模型的预测结果,获取作为分类预测依据的关键特征区域,从而判断得到分类结果的合理性和正确性,加速模型调优。

    1. 为什么需要可解释AI?

    在人类历史上,技术进步、生产关系逻辑、伦理法规的发展是动态演进的。当一种新的技术在实验室获得突破后,其引发的价值产生方式的变化会依次对商品形态、生产关系等带来冲击,而同时当新技术带来的价值提升得到认可后,商业逻辑的组织形态在自发的调整过程中,也会对技术发展的路径、内容甚至速度提出诉求,并当诉求得到满足时适配以新型的伦理法规。在这样的相互作用中,技术系统与社会体系会共振完成演进,是谓技术革命。

    近10年来,籍由算力与数据规模的性价比突破临界点,以深度神经网络为代表的联结主义模型架构及统计学习范式(以后简称深度学习)在特征表征能力上取得了跨越级别的突破,大大推动了人工智能的发展,在很多场景中达到令人难以置信的效果。比如:人脸识别准确率达到97%以上;谷歌智能语音助手回答正确率,在2019年的测试中达到92.9%。在这些典型场景下,深度学习在智能表现上的性能已经超过了普通人类(甚至专家),从而到了撬动技术更替的临界点。在过去几年间,在某些商业逻辑对技术友好或者伦理法规暂时稀缺的领域,如安防、实时调度、流程优化、竞技博弈、信息流分发等,人工智能(暨深度学习)取得了技术和商业上快速突破。

    食髓知味,技术发展的甜头自然每个领域都不愿放过。而当对深度学习商业化运用来到某些对技术敏感、与人的生存或安全关系紧密的领域,如自动驾驶、金融、医疗和司法等高风险应用场景时,原有的商业逻辑在进行技术更替的过程中就会遇到阻力,从而导致商业化(及变现)速度的减缓甚至失败。究其原因,以上场景的商业逻辑及背后伦理法规的中枢之一是稳定的、可追踪的责任明晰与分发;而深度学习得到的模型是个黑盒,无法从模型的结构或权重中获取模型行为的任何信息,从而使这些场景下责任追踪和分发的中枢无法复用,导致人工智能在业务应用中遇到技术和结构上的困难。

    举2个具体的例子:

    1. 在金融风控场景,通过深度学习模型识别出来小部分用户有欺诈嫌疑,但是业务部门不敢直接使用这个结果进行处理,因为难以理解结果是如何得到的,从而无法判断结果是否准确,担心处理错误;而且缺乏明确的依据,如果处理了,也无法向监管机构交代;
    2. 例2,在医疗领域,深度学习模型根据患者的检测数据,判断患者有肺结核,但是医生不知道诊断结果是怎么来的,不敢直接采用,而是根据自己的经验,仔细查看相关检测数据,然后给出自己的判断。从这2个例子可以看出,黑盒模型严重影响模型在实际场景的应用和推广。

    要解决模型的这些问题,就需要打开黑盒模型,透明化模型构建过程和推理机理。那么可解释AI是实现模型透明化的有效技术。

    2. 什么是可解释AI?

    可解释AI (eXplainable AI(XAI)),不论是学术界还是工业界都没有一个统一的定义。这里列举3种典型定义,供大家参考讨论:

    ①可解释性就是希望寻求对模型工作机理的直接理解,打破人工智能的黑盒子。

    ②可解释AI是为AI算法所做出的决策提供人类可读的以及可理解的解释。

    ③可解释的AI是确保人类可以轻松理解和信任人工智能代理做出的决策的一组方法。

    可见,关注点在于对模型的理解,黑盒模型白盒化以及模型的可信任。

    MindSpore团队根据自身的实践经验和理解,将可解释AI定义为:一套面向机器学习(主要是深度神经网络)的技术合集,包括可视化、数据挖掘、逻辑推理、知识图谱等,目的是通过此技术合集,使深度神经网络呈现一定的可理解性,以满足相关使用者对模型及应用服务产生的信息诉求(如因果或背景信息),从而为使用者对人工智能服务建立认知层面的信任。

    3. 可解释AI解决什么问题?

    按DARPA(美国国防部先进研究项目局)的说法,可解释AI的目的,就是要解决用户面对模型黑盒遇到问题,从而实现:

    ①用户知道AI系统为什么这样做,也知道AI系统为什么不这样做。

    ②用户知道AI系统什么时候可以成功,也知道AI系统什么时候失败。

    ③用户知道什么时候可以信任AI系统。

    ④用户知道AI系统为什么做错了。

    MindSpore实现的可解释AI计划主要解决如下两类问题:

    ①解决深度学习机制下技术细节不透明的问题,使得开发者可以通过XAI工具对开发流程中的细节信息进行获取,并通过获取到的可理解信息,帮助开发者进行模型故障排除或性能提升;

    ②提供深度学习技术与服务对象的友好的认知接口(cognitive-friendly interface),通过该接口,基于深度学习的服务提供者可以有合适工具对深度学习服务进行商业化逻辑的操作,基于深度学习的人工智能服务的消费者可以获得必要的释疑并建立信任,也可以为AI系统的审核提供能力支持。

    4. 实现可解释AI的方法

    从前面的介绍,大家可以感觉到可解释AI很高大上,那么具体如何实现呢?结合业界的研究成果,我们认为实现可解释AI主要有3类方法:

    第一类是基于数据的可解释性,通常称为深度模型解释,是最容易想到的一种方法,也是很多论文里面经常涉及的一类技术;主要是基于数据分析和可视化技术,实现深度模型可视化,直观展示得到模型结果的关键依据。

    第二类是基于模型的可解释性,这类方法也称为可解释模型方法,主要是通过构建可解释的模型,使得模型本身具有可解释性,在输出结果的同时也输出得到该结果的原因。

    第三类是基于结果的可解释性,此类方法又称为模型归纳方法,思路是将已有模型作为一个黑盒,根据给定的一批输入和对应的输出,结合观察到模型的行为,推断出产生相应的结果的原因,这类方法的好处是完全与模型无关,什么模型都可以用。

    5. MindSpore1.1版本的可解释AI能力

    MindSpore1.1开源版本,在MindInsight部件中集成了的可解释AI能力:显著图可视化(Saliency Map Visualization),也称为关键特征区域可视化。这部分归属于第一类基于数据的可解释性方法,后续我们将陆续开源更多的解释方法,除了第一类,还将包括第二类基于模型的可解释方法和第三类基于结果的可解释方法。

    当前显著图可视化主要是CV领域的模型解释,在1.1版本中,我们支持6种显著图可视化解释方法:Gradient、Deconvolution、GuidedBackprop、GradCAM、RISE、Occlusion。

    其中:Gradient、Deconvolution,、GuidedBackprop和GradCAM等4种方法属于基于梯度的解释方法。这种类型的解释方法,主要利用模型的梯度计算,来突显关键特征,效率比较高,下面简要介绍下这4种方法:

    • Gradient,是最简单直接的解释方法,通过计算输出对输入的梯度,得到输入对最终输出的“贡献”值;而Deconvolution和GuidedBackprop是对Gradient的延展和优化;
    • Deconvolution,对原网络中ReLU进行了修改使其成为梯度的ReLU,从而过滤负向梯度,仅关注对输出起到正向贡献的特征;
    • GuidedBackprop,是在原网络ReLU基础上对负梯度过滤,仅关注对输出起到正向贡献的且激活了的特征,能够减少显著图噪音;
    • GradCAM,针对中间激活层计算类别权重,生成对类别敏感的显著图,可以得到类别相关的解释。

    另外2种方法:Occlusion和RISE,则属于基于扰动的解释方法,该类型方法的好处是,仅需利用模型的输入和输出,可以做到模型无关,具体说明下:

    • RISE,使用蒙特卡洛方法,对随机掩码进行加权(权重为遮掩后的模型的输出)平均得到最终显著图;
    • Occlusion,通过遮掩特定位置的输入,计算模型输出的改变量来得到该位置的“贡献”,遍历全部输入,得到显著图。

    那么对于具体场景,该如何选择合适的解释方法来解释对应的模型呢?

    为了满足这个诉求,MindSpore1.1版本提供了可解释AI的度量框架,同时还提供了4种度量方法:Faithfulness、Localization、Class sensitivity、Robustness,针对不同解释方法的解释效果进行度量,帮助开发者或用户选择最合适的解释方法。简单描述下这4种度量方法:

    • Faithfulness,可信度。按照重要度从大到小移除特征,并记录特定标签概率的减少量。遍历所有特征之后,比较置信度减少量的分布和特征重要性的分布相似性。与黑盒模型越契合的解释,两个分布情况应当越相似,该解释方法具有更好的可信度。
    • Localization,定位性。基于显著图的解释具有目标定位的能力(即给定感兴趣的标签,显著图高亮图片中与标签相关的部分),localization借助目标检测数据集,对于同一图片同一个标签,通过显著图高亮部分和Ground Truth的重合度,来度量显著图的定位能力。
    • Class sensitivity,分类敏感度,不同分类对应的图中的对象的显著图高亮部分应该明显不同。将概率最大和最小标签的显著图进行比较,如果两个标签的显著图差异越大,解释方法的分类敏感度越好。
    • Robustness,健壮性。该指标反映解释方法在局部范围的抗扰动能力,Lipschitz值越小,解释收扰动影响越小,健壮性越强。

    下面结合MindSpore1.1版本中已支持的显著图可视方法的其中3种解释方法:Gradient 、GradCAM和RISE,介绍如何使用可解释AI能力来更好理解图片分类模型的预测结果,获取作为分类预测依据的关键特征区域,从而判断得到分类结果的合理性和正确性,加速模型调优。

    6、常见显著图可视解释方法介绍

    6.1 Gradient解释方法

    Gradient,是最简单直接的基于梯度的解释方法,通过计算输出对输入的梯度,得到输入对最终输出的“贡献”值,用于解释预测结果的关键特征依据。

    对深度神经网络,这个梯度计算可通过后向传播算法获得,如下图所示:

    Source:Understanding models via visualizations and attribution

    注:Gradient解释方法会遇到梯度饱和问题,即某个特征的贡献一旦达到饱和后,由于该特征不再对结果的变化产生影响,会导致该特征的梯度为0而出错。

    Gradient解释效果如下图所示:

    注:所有解释效果图片均来源于MindInsight截图

    从上面2张图中可以看出,Gradient的解释结果可理解性较差,显著图高亮区域成散点状,没有清晰明确的特征区域定位,很难从中获取到预测结果的具体特征依据。

    6.2 GradCAM解释方法

    GradCAM,是Gradient-weighted Class Activation Mapping的简写,一般翻译为:加权梯度的类激活映射,是一种基于梯度的解释方法;该解释方法通过对某一层网络各通道激活图进行加权(权重由梯度计算得到),得到影响预测分类结果的关键特征区域。

    GradCAM解释结果过程的概览,如下图:

    Source:Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization

    这里给出2个实际的例子,来看看GradCAM具体的解释效果:

    可以看到GradCAM的解释结果定位性和可理解性比较好,高亮区域集中在具体的特征上,用户可以通过高亮区域判断出和预测结果相关的特征。对于标签“路牌”,图像中的路牌被高亮,对于标签“飞机”,图像中的飞机被高亮,即GradCAM认为路牌区域和飞机区域是2个分类结果的主要依据。

    6.3 RISE解释方法

    RISE,是Randomized Input Sampling for Explanation的简写,即基于随机输入采样的解释,是一种基于扰动的解释,与模型无关;主要原理:使用蒙特卡洛采样产生多个掩码,然后对随机掩码进行加权(权重为遮掩后的模型的输出)平均得到最终显著图。

    RISE方法解释过程的概览图,如下:

    Source:RISE: Randomized Input Sampling for Explanation of Black-box Models

    同样给出2个示例,展示下解释效果:

    RISE采用遮掩的方法得到与分类结果相关的特征区域,解释结果的可理解性和定位性不错,和GradCAM类似,RISE准确地高亮了路牌区域和飞机区域。

    7、MindSpore解释方法如何解释图片分类模型?

    在实际应用中,上面介绍的3种解释方法的解释效果如何呢?根据预测结果和解释的有效性,我们将解释结果分为3类,并分别找几个典型的例子来看看实际的效果。

    说明:下面所有示例图中的解释结果,都是MindSpore的MindInsight部件中的模型解释特性展现出来的。

    7.1 预测结果正确,依据的关键特征合理的例子

    例7.1.1:上图预测标签是“bird”,右边给出依据的关键特征在鸟身上,说明这个分类判断依据是合理的。

    例7.1.2:上图预测标签是“bicycle”,右边解释的时候,将自行车车轮高亮,这个关键特征同样较为合理。

    7.2 预测结果正确,但给出的关键特征依据可能是错误的例子

    例7.2.1:原图中,有人,在预测标签中有1个标签是“person”,这个结果是对的;但是选择“person”标签,在查看右边解释的时候,可以看到高亮区域在马头上,那么这个关键特征依据很可能是错误的。

    例7.2.2:原图中,有一只鸟,预测结果“bird”是对的,但是右边解释的时候,高亮区域在树枝和树叶上,而不是鸟的身上,这个依据也很可能是错的。

    例7.2.3:上图中,有1艘小艇,有个标签是“boat”,这个没错。不过在右边针对标签“boat”的解释,高亮区域却在人身上,这个偏差有点大。

    仔细分析上面的3个例子,这种高亮标识出来作为分类依据的关键特征,出现错误的情况,一般出现在图像中存在多目标的场景中。根据调优经验,往往是因为在训练过程中,这些特征经常与目标对象共同出现,导致模型在学习过程中,错误将这些特征识别为关键特征。

    7.3 预测结果错误,结合依据的关键特征分析错因的例子

    例7.3.1:在上图中,有个预测标签为“boat”,但是原始图像中并没有船只存在,通过图中右侧关于标签“boat”的解释结果可以看到模型将水面作为分类的关键依据,得到预测结果“boat”,这个依据是错误的。通过对训练数据集中标签为“boat”的数据子集进行分析,发现绝大部分标签为“boat”的图片中,都有水面,这很可能导致模型训练的时候,误将水面作为“boat”类型的关键依据。基于此,按比例补充有船没有水面的图片集,从而大幅消减模型学习的时候误判关键特征的概率。

    例7.3.2:图中有一个分类预测结果是“aeroplane”,但图中并没有飞机。从标签“aeroplane”的解释结果看,高亮区域在鹰的身上。打开飞机相关的训练数据子集,发现很多情况下训练图片中飞机都是远处目标,与老鹰展翅滑翔很像,猜测可能是这种原因导致模型推理的时候,误将老鹰当做飞机了。模型优化的时候,可以考虑增加老鹰滑翔的图片比例,提升模型的区分和辨别能力,提高分类准确率。

    例7.3.3:这个例子中,有个预测标签是“person”,仔细看图中没有人。根据标签“person”的解释结果,高亮区域在摩托车的前部;在原图中,乍一看,还真像一个人趴着;猜测是分类模型推理的时候,误将这部分当做人了。

    8、如何部署和使用MindSpore解释方法?

    在MindSpore官网的模型解释教程中,详细介绍了如何部署和使用MindSpore提供的解释方法,链接请见:

    https://www.mindspore.cn/tutorial/training/zh-CN/r1.1/advanced_use/model_explaination.html

    下面,对部署和使用方法,做简要介绍:

    先使用脚本调用MindSpore 提供的python API进行解释结果的生成和收集,然后启动MindInsight对这些结果进行展示,整体流程如下图:

    具体步骤如下:

    8.1 准备脚本

    通过调用解释方法Python API对模型预测结果进行解释,已提供的解释方法可以在mindspore.explainer.explanation包中获取。用户准备好待解释的黑盒模型和数据,在脚本中根据需要实例化解释方法,调用API用于收集解释结果。

    MindSpore还提供mindspore.explainer.ImageClassificationRunner接口,支持自动化运行所有解释方法。用户事先将实例化的解释方法进行注册,即可在该接口调用后自动运行解释方法,生成及保存包含解释结果的解释日志。

    下面以ResNet50为例,介绍如何初始化explanation中解释方法,调用ImageClassificationRunner进行解释。其样例代码如下:

    ```
    import mindspore.nn as nn
    from mindspore.explainer.explanation import GradCAM, GuidedBackprop
    from mindspore.explainer import ImageClassificationRunner
      
    from user_defined import load_resnet50, get_dataset, get_class_names
      
      
    # load user defined classification network and data
    network = load_resnet50()
    dataset = get_dataset()
    classes = get_class_names()
    data = (dataset, classes)
      
    runner = ImageClassificationRunner(summary_dir='./summary_dir', network=network, activation_fn=nn.Sigmoid(), data=data)
      
    # register explainers
    explainers = [GradCAM(network, layer='layer4'), GuidedBackprop(network)]
    runner.register_saliency(explainers)
      
    # run and generate summary
    runner.run()
     ``` 

    8.2 使用MindInsight进行结果展示

    8.2.1 启动MindInsight

    启动MindInsight系统,在顶部选择进入“模型解释”模块。可以看到所有的解释日志路径,当日志满足条件时,操作列会有“显著图可视化”的功能入口。

    8.2.2 各项功能介绍

    显著图可视化用于展示对模型预测结果影响最为显著的图片区域,通常高亮部分可视为图片被标记为目标分类的关键特征。

    进入显著图可视化界面,如上图,会展现:

    • 用户通过Dataset的Python API接口设置的目标数据集。
    • 真实标签、预测标签,以及模型对对应标签的预测概率。根据具体情况,系统会在对应标签的左上角增加TP, FP,FN(含义见界面提示信息)的旗标。
    • 选中的解释方法给出的显著图。

    界面操作介绍:

    1.通过界面上方的解释方法勾选需要的解释方法;

    2.通过切换界面右上方的“叠加于原图”按钮,可以选择让显著图叠加于原图上显示;

    3.点击不同标签,显示对不同标签的显著图分析结果,对于不同的分类结果,通常依据的关键特征区域也是不同的;

    4.通过界面上方的标签筛选功能,筛选出指定标签图片;

    5.通过界面右上角的图片排序改变图片显示的顺序;

    6.点击图片可查看放大图。

     

    点击关注,第一时间了解华为云新鲜技术~

    展开全文
  • 机器学习模型可解释性的详尽介绍

    千次阅读 多人点赞 2019-11-26 12:22:00
    机器之心平台来源:腾讯技术工程模型可解释性方面的研究,在近两年的科研会议上成为关注热点,因为大家不仅仅满足于模型的效果,更对模型效果的原因产生更多的思考,这样的思考有助于模型和特征的优化,更能够帮助更...

    机器之心平台

    来源:腾讯技术工程

    模型可解释性方面的研究,在近两年的科研会议上成为关注热点,因为大家不仅仅满足于模型的效果,更对模型效果的原因产生更多的思考,这样的思考有助于模型和特征的优化,更能够帮助更好的理解模型本身和提升模型服务质量。本文对机器学习模型可解释性相关资料汇总survey。


    综述

    机器学习业务应用以输出决策判断为目标。可解释性是指人类能够理解决策原因的程度。机器学习模型的可解释性越高,人们就越容易理解为什么做出某些决定或预测。模型可解释性指对模型内部机制的理解以及对模型结果的理解。其重要性体现在:建模阶段,辅助开发人员理解模型,进行模型的对比选择,必要时优化调整模型;在投入运行阶段,向业务方解释模型的内部机制,对模型结果进行解释。比如基金推荐模型,需要解释:为何为这个用户推荐某支基金。

    机器学习流程步骤:收集数据、清洗数据、训练模型、基于验证或测试错误或其他评价指标选择最好的模型。第一步,选择比较小的错误率和比较高的准确率的高精度的模型。第二步,面临准确率和模型复杂度之间的权衡,但一个模型越复杂就越难以解释。一个简单的线性回归非常好解释,因为它只考虑了自变量与因变量之间的线性相关关系,但是也正因为如此,它无法处理更复杂的关系,模型在测试集上的预测精度也更有可能比较低。而深度神经网络处于另一个极端,因为它们能够在多个层次进行抽象推断,所以他们可以处理因变量与自变量之间非常复杂的关系,并且达到非常高的精度。但是这种复杂性也使模型成为黑箱,我们无法获知所有产生模型预测结果的这些特征之间的关系,所以我们只能用准确率、错误率这样的评价标准来代替,来评估模型的可信性。

    事实上,每个分类问题的机器学习流程中都应该包括模型理解和模型解释,下面是几个原因:

    • 模型改进:理解指标特征、分类、预测,进而理解为什么一个机器学习模型会做出这样的决定、什么特征在决定中起最重要作用,能让我们判断模型是否符合常理。一个深度的神经网络来学习区分狼和哈士奇的图像。模型使用大量图像训练,并使用另外的一些图像进行测试。90%的图像被准确预测,这值得我们高兴。但是在没有计算解释函数(explainer function)时,我们不知道该模型主要基于背景:狼图像通常有一个下雪的背景,而哈士奇的图像很少有。所以我们不知不觉地做了一个雪地探测器,如果只看准确率这样的指标,我们就不会看到这一点。知道了模型是如何使用特征进行预测的,我们就能直觉地判断我们的模型是否抓住了有意义的特征,模型是或否能泛化到其他样本的预测上。

    • 模型可信性与透明度:理解机器学习模型在提高模型可信度和提供审视预测结果透明度上是非常必要的,让黑箱模型来决定人们的生活是不现实的,比如贷款和监狱刑法。另一个对机器学习结果可信度提出质疑的领域是药品,模型结果会直接决定病人的生与死。机器学习模型在区分恶性肿瘤和不同类型的良性肿瘤方面是非常准确的,但是我们依然需要专家对诊断结果进行解释,解释为什么一个机器学习模型将某个患者的肿瘤归类为良性或恶性将大大帮助医生信任和使用机器学习模型来支持他们工作。长久来看,更好地理解机器学习模型可以节省大量时间、防止收入损失。如果一个模型没有做出合理的决定,在应用这个模型并造成不良影响之前,我们就可以发现这一点。

    • 识别和防止偏差:方差和偏差是机器学习中广泛讨论的话题。有偏差的模型经常由有偏见的事实导致,如果数据包含微妙的偏差,模型就会学习下来并认为拟合很好。一个有名的例子是,用机器学习模型来为囚犯建议定罪量刑,这显然反映了司法体系在种族不平等上的内在偏差。其他例子比如用于招聘的机器学习模型,揭示了在特定职位上的性别偏差,比如男性软件工程师和女性护士。机器学习模型在我们生活的各个层面上都是强有力的工具,而且它也会变得越来越流行。所以作为数据科学家和决策制定者来说,理解我们训练和发布的模型如何做出决策,让我们可以事先预防偏差的增大以及消除他们,是我们的责任。

    可解释性特质:

    • 重要性:了解“为什么”可以帮助更深入地了解问题,数据以及模型可能失败的原因。

    • 分类:建模前数据的可解释性、建模阶段模型可解释性、运行阶段结果可解释性。

    • 范围:全局解释性、局部解释性、模型透明度、模型公平性、模型可靠性。

    • 评估:内在还是事后?模型特定或模型不可知?本地还是全局?

    • 特性:准确性、保真性、可用性、可靠性,鲁棒性、通用性等。

    • 人性化解释:人类能够理解决策原因的程度,人们可以持续预测模型结果的程度标示。


    动机

    在工业界中,数据科学或机器学习的主要焦点是更偏“应用”的解决复杂的现实世界至关重要的问题,而不是理论上有效地应用这些模型于正确的数据。机器学习模型本身由算法组成,该算法试图从数据中学习潜在模式和关系,而无需硬编码固定规则。因此,解释模型如何对业务起作用总是会带来一系列挑战。有一些领域的行业,特别是在保险或银行等金融领域,数据科学家通常最终不得不使用更传统的机器学习模型(线性或基于树的)。原因是模型可解释性对于企业解释模型所采取的每个决策非常重要。

    残酷的现实是,如果没有对机器学习模型或数据科学pipeline如何运作的合理理解,现实中的项目很少成功。现实中的数据科学项目,通常会有业务和技术两方面。数据科学家通常致力于构建模型并为业务提供解决方案。但是,企业可能不知道模型如何工作的复杂细节。

    数据科学从业者将知道存在典型的模型可解释性与模型性能权衡。这里需要记住的一点是,模型性能不是运行时或执行性能,而是模型在决策中的准确程度。有几种模型,包括简单的线性模型甚至是基于树的模型,它们可以很容易地解释模型为获得特定的洞察力或预测而做出的决策,但是你可能需要牺牲模型性能,因为它们总是不能产生最好的结果是由于高偏差(线性模型)或高方差的固有问题,导致过度拟合(完全成长的树模型)。更复杂的模型,如集合模型和最近的深度学习模型系列通常会产生更好的性能,但被认为是黑盒模型,因为很难解释模型如何真正做出决定。

    理解模型可解释性

    模型解释作为一个概念仍然主要是理论和主观的。任何机器学习模型的核心都有一个响应函数,它试图映射和解释独立(输入)自变量和(目标或响应)因变量之间的关系和模式。当模型预测或寻找见解时,需要做出某些决定和选择。模型解释试图理解和解释响应函数所做出的这些决定,即what,why以及how。模型解释的关键是透明度,质疑能力以及人类理解模型决策的难易程度。模型解释的三个最重要的方面解释如下。

    1. 是什么驱动了模型的预测?我们应该能够查询我们的模型并找出潜在的特征交互,以了解哪些特征在模型的决策策略中可能是重要的。这确保了模型的公平性。

    2. 为什么模型会做出某个决定?我们还应该能够验证并证明为什么某些关键特征在预测期间驱动模型所做出的某些决策时负有责任。这确保了模型的可靠性。

    3. 我们如何信任模型预测?我们应该能够评估和验证任何数据点以及模型如何对其进行决策。对于模型按预期工作的关键利益相关者而言,这应该是可证明且易于理解的。这确保了模型的透明度。

    在比较模型时,除了模型性能之外,如果模型的决策比其他模型的决策更容易理解,那么模型被认为比其他模型具有更好的可解释性。

    可解释性的重要性

    在解决机器学习问题时,数据科学家往往倾向于关注模型性能指标,如准确性,精确度和召回等等(毫无疑问,这很重要!)。这在大多数围绕数据科学和机器学习的在线竞赛中也很普遍。但是,指标只能说明模型预测决策的部分故事。随着时间的推移,由于环境中的各种因素导致的模型概念漂移,性能可能会发生变化。因此,了解推动模型采取某些决策的因素至关重要。

    如果一个模型工作得很好,为什么还要深入挖掘呢?在解决现实世界中的数据科学问题时,为了让企业信任您的模型预测和决策,他们会不断提出“我为什么要相信您的模型?”这一问题,这一点非常有意义。如果一个人患有癌症或糖尿病,一个人可能对社会构成风险,或者即使客户会流失,您是否会对预测和做出决策(如果有的话)感到满意?也许不是,如果我们能够更多地了解模型的决策过程(原因和方式),我们可能会更喜欢它。这使我们更加透明地了解模型为何做出某些决策,在某些情况下可能出现的问题,并且随着时间的推移它有助于我们在这些机器学习模型上建立一定程度的信任。

    • 了解预测背后的原因在评估信任方面非常重要,如果计划基于预测采取行动,或者选择是否部署新模型,那么这是至关重要的。

    • 无论人类是直接使用机器学习分类器作为工具,还是在其他产品中部署模型,仍然存在一个至关重要的问题:如果用户不信任模型或预测,他们就不会使用它。

    这是我们在本文中多次讨论的内容,也是决定数据科学项目在行业中取得成功的关键区别之一。这推动了模型解释的必要性和重要性的紧迫性。

    可解释性的标准

    有一些特定的标准可用于分类模型解释方法。Christoph Molnar,2018年“可解释的机器学习,制作黑箱模型可解释指南”中提到了一个很好的指南。

    • 内在还是事后?内在可解释性就是利用机器学习模型,该模型本质上是可解释的(如线性模型,参数模型或基于树的模型)。事后可解释性意味着选择和训练黑匣子模型(集合方法或神经网络)并在训练后应用可解释性方法(特征重要性,部分依赖性图)。我们将更多地关注我们系列文章中的事后模型可解释方法。

    • 模型特定或模型不可知?特定于模型的解释工具非常特定于内在模型解释方法,这些方法完全依赖于每个模型的功能和特征。这可以是系数,p值,与回归模型有关的AIC分数,来自决策树的规则等等。与模型无关的工具与事后方法更相关,可用于任何机器学习模型。这些不可知方法通常通过分析(和输入的扰动)特征输入和输出对来操作。根据定义,这些方法无法访问任何模型内部,如权重,约束或假设。

    • 本地还是全局?这种解释分类讨论了解释方法是解释单个预测还是整个模型行为?或者如果范围介于两者之间?我们将很快谈论全球和地方的解释。


    可解释性的范围

    如何定义可解释性的范围和界限?一些有用的方面可以是模型的透明度,公平性和责任性。全局和局部模型解释是定义模型解释范围的明确方法。

    全局可解释:就是试图理解“模型如何进行预测?”和“模型的子集如何影响模型决策?”。要立即理解和解释整个模型,我们需要全局可解释性。全局可解释性是指能够基于完整数据集上的依赖(响应)变量和独立(预测变量)特征之间的条件交互来解释和理解模型决策。尝试理解特征交互和重要性始终是理解全球解释的一个很好的一步。当然,在尝试分析交互时,在超过两维或三维之后可视化特征变得非常困难。因此,经常查看可能影响全局知识模型预测的模块化部分和特征子集会有所帮助。全局解释需要完整的模型结构,假设和约束知识。

    局部解释:试图理解“为什么模型为单个实例做出具体决策?”和“为什么模型为一组实例做出具体决策?”。对于本地可解释性,我们不关心模型的固有结构或假设,我们将其视为黑盒子。为了理解单个数据点的预测决策,我们专注于该数据点并查看该点周围的特征空间中的局部子区域,并尝试基于该局部区域理解该点的模型决策。本地数据分布和特征空间可能表现完全不同,并提供更准确的解释而不是全局解释。局部可解释模型 - 不可知解释(LIME)框架是一种很好的方法,可用于模型不可知的局部解释。我们可以结合使用全局和局部解释来解释一组实例的模型决策。

    模型透明度:为试图理解“如何根据算法和特征创建模型?”。我们知道,通常机器学习模型都是在数据特征之上利用算法来构建将输入映射到潜在输出(响应)的表示。模型的透明度可能试图了解模型的构建方式以及可能影响其决策的更多技术细节。这可以是神经网络的权重,CNN滤波器的权重,线性模型系数,决策树的节点和分裂。但是,由于业务可能不太精通这些技术细节,因此尝试使用不可知的局部和全局解释方法来解释模型决策有助于展示模型透明度。

    可解释性的作用

    对于想要了解模型如何工作的数据科学家来说,评估模型的准确性通常是不够的。数据科学家通常想知道模型输入变量如何工作以及模型的预测如何根据输入变量的值而变化

    机器学习算法和模型的工程应用中用到最多的主要是树类模型(lgb,xgb)和神经网络(cnn, rnn),使用者往往习惯于很少去思考其中的含义和解释性。需要思考一个模型的哪些东西是可解释的?

    所以有几个问题值得讨论:

    • 哪些特征在模型看到是最重要的?

    • 关于某一条记录的预测,每一个特征是如何影响到最终的预测结果的?

    • 从大量的记录整体来考虑,每一个特征如何影响模型的预测的?

    为什么这些解释信息是有价值的呢:

    • 调试模型用
      一般的真实业务场景会有很多不可信赖的,没有组织好的脏数据。你在预处理数据时就有可能加进来了潜在的错误,或者不小心泄露了预测目标的信息等,考虑各种潜在的灾难性后果,debug的思路就尤其重要了。当你遇到了用现有业务知识无法解释的数据的时候,了解模型预测的模式,可以帮助你快速定位问题。

    • 指导工程师做特征工程
      特征工程通常是提升模型准确率最有效的方法。特征工程通常涉及到到反复的操作原始数据(或者之前的简单特征),用不同的方法来得到新的特征。有时候你完成FE的过程只用到了自己的直觉。这其实还不够,当你有上百个原始特征的时候,或者当你缺乏业务背景知识的时候,你将会需要更多的指导方向。如何创造出这样优秀的特征呢?如何找到最重要的特征的方法,并且可以发现两个特别相关的特征,当面对越来越多的特征的时候,这些方法就会很重要啦。

    • 指导数据采集的方向
      对于网上下载的数据集你完全控制不了。不过很多公司和机构用数据科学来指导他们从更多方面收集数据。一般来说,收集新数据很可能花费比较高或者不是很容易,所以大家很想要知道哪些数据是值得收集的。基于模型的洞察力分析可以教你很好的理解已有的特征,这将会帮助你推断什么样子的新特征是有用的。

    • 指导人们做决策
      一些决策是模型自动做出来的,虽然亚马逊不会用人工来决定展示给你网页上的商品,但是很多重要的决策是由人来做出的,而对于这些决定,模型的洞察力会比模型的预测结果更有价值。

    • 建立模型和人之间的信任
      很多人在做重要决策的时候不会轻易的相信模型,除非他们验证过模型的一些基本特性,这当然是合理的。实际上,把模型的可解释性展示出来,如果可以匹配上人们对问题的理解,那么这将会建立起大家对模型的信任,即使是在那些没有数据科学知识的人群中。


    方法

    模型效果评估指标图


    Confusion Matrix

    一个完美的分类模型就是,如果一个客户实际上属于类别 good,也预测成good,处于类别 bad,也就预测成 bad。实际上一些是 good 的客户,根据我们的模型,却预测他为 bad,对一些原本是 bad 的客户,却预测他为 good。我们需要知道,这个模型到底预测对了多少,预测错了多少,混淆矩阵就把所有这些信息,都归到一个表里:

    Sensitivity(覆盖率,True Positive Rate)= 正确预测到的正例数 / 实际正例总数;Recall (True Positive Rate,or Sensitivity) =true positive/total actual positive=d/c+d;

    PV+ (命中率,Precision, Positive Predicted Value) = 正确预测到的正例数 / 预测正例总数;Precision (Positive Predicted Value, PV+) =true positive/ total predicted positive=d/b+d;

    Specificity (负例的覆盖率,True Negative Rate) = 正确预测到的负例个数 / 实际负例总数;Specificity (True Negative Rate) =true negative/total actual negative=a/a+b;

    图中关于混淆矩阵结果理解:recall:0.54;precision:0.915;specificity:0.95;

    Lift

    它衡量的是,与不利用模型相比,模型的预测能力 “变好” 了多少。实质上它强调的是投入与产出比。不利用模型,我们只能利用 “正例的比例是 c+d/a+b+c+d” 这个样本信息来估计正例的比例(baseline model),而利用模型之后,我们不需要从整个样本中来挑选正例,只需要从我们预测为正例的那个样本的子集(b+d)中挑选正例,这时预测的准确率为 d/b+d。

    显然,lift(提升指数)越大,模型的运行效果越好。如果这个模型的预测能力跟 baseline model 一样,那么 d/b+d 就等于 c+d/a+b+c+d(lift 等于 1),这个模型就没有任何 “提升” 了(套一句金融市场的话,它的业绩没有跑过市场)。

    ROC曲线 & PR曲线 & KS曲线

    实际应用中,通常是先基于训练好的分类器得出测试样本的预测概率,然后将该测试样本的预测概率与给定的阈值进行比较,若该预测概率大于给定阈值,则将该测试样本划分为正类,反之则将其划分为反类。对于不同的分类任务,该分类阈值的取值也是不一样的。

    • ROC曲线(The Receiver Operating Characteristic Curve)给出的是不同分类阈值情况下真正率(TPr)和假正率(FPr)的变化曲线。PR曲线(Precision-Recall Curve)给出的是不同分类阈值情况下查准率(Precision)和查全率(Recall)的变化曲线。有文献指出,ROC曲线相比PR曲线有一个非常好的特性:就是当正负样本分布发生变化的时候,ROC曲线的形状能够基本保持不变,而PR曲线的形状会发生较剧烈的变化。为了使得ROC曲线之间能更好的进行比较,通常采用AUC,即ROC曲线下的面积来衡量一个分类算法的性能。其中,AUC的值越大,表明分类性能越好。

    • KS(Kolmogorov-Smirnov Curve)曲线横轴为不同的分类阈值,纵轴为真正率(TPr)和假正率(FPr)的变化曲线。KS值=max|TPr-FPr|,等价于ΔTPr=ΔFPr,这和ROC曲线上找最优阈值的条件一致。KS值常在征信评分模型中用于衡量区分预测正负样本的分隔程度。一般来说,KS值越大,表明正负样本区分的程度越好,说明模型区分度越高。但并非所有的情况KS值都是越高越好的,尤其在征信模型中,如正负样本完全分错的情况下,KS值依旧可以很高。征信模型最期望得到的信用分数分布为正态分布,如果KS值过大,如0.9,就可以认为正负样本分得过开了,不太可能是正态分布,反而比较可能是极端化的分布状态(如U字型),这样的分数就很不好,基本可以认为不可用。

    Cumulative gains chart

    横坐标表示:代表我们样本的百分比,假设有10000个样本,0.1代表1000个,1代表10000个样本。

    纵坐标表示:代表横轴所代表的那么多样本中,判断正确的比率。

    baseline表示:如果我们不用模型,那我们对每一个人的打分都是一样的,正率在所有样本空间都是一样的,连接起来就成为一条直线。

    曲线含义:采用模型进行预测。y值的分子代表模型预测且预测为正例的人数,分母是整个群体正例人数。

    Silhouette Analysis

    Silhouette指的是一种解释和验证数据集群内一致性的方法。该技术提供了每个对象分类的简洁图形表示。

    轮廓值是对象与其自身群集(内聚)相比与其他群集(分离)相似程度的度量。轮廓范围从-1到+1,其中高值表示对象与其自己的簇很好地匹配并且与相邻簇很不匹配。如果大多数对象具有高值,则群集配置是合适的。如果许多点具有低值或负值,则群集配置可能具有太多或太少的群集。

    图中通过Silhouette方法大致对数据集样本分类有了掌握,可以看到0/1类别大致比例。

    Learning Curve

    概念:学习曲线就是通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高或偏差过高,以及增大训练集是否可以减小过拟合。

    Bias是用所有可能的训练数据集训练出的所有模型的输出的平均值真实模型的输出值之间的差异。

    Variance不同的训练数据集训练出的模型输出值之间的差异。

    解读:当训练集和测试集的误差收敛但却很高时,为高偏差。左上角的偏差很高,训练集和验证集的准确率都很低,很可能是欠拟合。我们可以增加模型参数,比如,构建更多的特征,减小正则项。此时通过增加数据量是不起作用的。当训练集和测试集的误差之间有大的差距时,为高方差。当训练集的准确率比其他独立数据集上的测试结果的准确率要高时,一般都是过拟合。右上角方差很高,训练集和验证集的准确率相差太多,应该是过拟合。我们可以增大训练集,降低模型复杂度,增大正则项,或者通过特征选择减少特征数。理想情况是是找到偏差和方差都很小的情况,即收敛且误差较小。

    Permutation Importance

    一个最基本的问题大概会是什么特征对我模型预测的影响最大呢?这个东西就叫做“feature importance”即特征重要性。anyway,字面意思看着就很重要啦。我们有很多方法来衡量特征的重要性,这里呢,将会介绍一种方法:排列重要性。这种方法和其他方法比起来,优势有:

    • 计算速度快

    • 广泛使用和理解

    • 我们希望特征重要性与属性具有一致性

    工作原理:排列重要性,一定是在model训练完成后,才可以计算的。简单来说,就是改变数据表格中某一列的数据的排列,保持其余特征不动,看其对预测精度的影响有多大。大概三个步骤:

    • 训练好模型

    • 拿某一个feature column, 然后随机打乱顺序。然后用模型来重新预测一遍,看看自己的metric或者loss 。function变化了多少。

    • 把上一个步骤中打乱的column复原,换下一个column重复上一个步骤,直到所有column都算一遍。

    代码示例:

    from xgboost import XGBClassifier    
    from sklearn.model_selection import train_test_split
    import eli5   # python计算permutation importance工具包   
    from eli5.sklearn import PermutationImportance

    path = './census_income_dataset.csv'
    data = pd.read_csv(path)
    #...省略数据预处理过程
    X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state = 400)

    # 训练XGBoost模型
    model = xgb.XGBClassifier(
                            learning_rate =0.05,
                             n_estimators=100,
                             max_depth=3,
                             min_child_weight=1,
                             gamma=0.3,
                             subsample=0.8,
                             colsample_bytree=0.8,
                             objective= 'multi:softprob',
                             nthread=4,
                             scale_pos_weight=1,
                             num_class=2,
                             seed=27
                        ).fit(X_train, y_train)

    perm = PermutationImportance(model, random_state = 1).fit(X_test, y_test) # 实例化
    eli5.show_weights(perm, feature_names = X_test.columns.tolist())

    结果分析:

    • 靠近上方的绿色特征,表示对模型预测较为重要的特征;

    • 为了排除随机性,每一次 shuffle 都会进行多次,然后取结果的均值和标准差;

    • 部分特征出现负值,表示其 shuffle 之后,对精度反而有所提升。这通常出现在特征不那么重要的时候。当数据集较小的时候,这种情况更为常见;

    • “+ - ”之后的数字衡量的是一次重新洗牌后的表现如何变化;

    这个数据集是收入水平数据集,这个例子里,最重要的特征是“capital_gain”, 这看起来是合理的。

    PDP

    部分依赖图(PDP或PD图)显示特征对机器学习模型的预测结果的边际效应,可以展示一个特征是如何影响预测的。部分依赖图可以显示目标与特征之间的关系是线性的,单调的还是更复杂的。例如,当应用于线性回归模型时,部分依赖图总是显示线性关系。

    回归的部分依赖函数定义为:

    • xSxS是部分依赖图要画的特征集合

    • xCxC是其他特征

    通常,集合SS中有一到两个特征,这个集合中的特征我们想知道他们对预测的影响。在集合SS和集合CC中的特征并集组成了全部特征空间x。边际化机器学习模型输出在集合C的特征分布上。PDP的一个假设是,C中的特征与s中的特征不相关。如果违反这个假设,部分依赖图的平均值将包括非常不可能甚至不可能的数据点。

    边缘化概念
    边缘化是一种通过累加一个变量的可能值以判定另一个变量的边缘分布的方法。这听起来有点抽象,让我们看一个例子:

    假设我们想知道天气是如何影响英国人的幸福感的,也就是P(幸福感|天气)。假定我们具有衡量某人的幸福感所需的定义和设备,同时记录了某个英格兰人和某个苏格兰人所处位置的天气。可能苏格兰人通常而言要比英格兰人幸福。所以我们其实在衡量的是P(幸福感, 国|天气),即,我们同时考察幸福感和国。

    边缘化告诉我们,我们可以通过累加国家的所有可能值(英国由3国组成:英格兰、苏格兰、威尔士),得到想要计算的数字,即P(幸福感|天气) = P(幸福感, 国=英格兰|天气) + P(幸福感, 国=苏格兰|天气) + P(幸福感, 国=威尔士|天气)。

    部分函数f^xSf^xS通过计算在训练数据的平均值,即Monte Carlo方法:

    • x(i)CxC(i)是数据集中的真实特征值,这些特征是不关注的特征。

    特征重要性可以告诉你哪些特征是最重要的或者是不重要的。

    partial dependence图可以告诉你一个特征是如何影响预测的。

    PDP分析步骤如下:

    1. 训练一个Xgboost模型(假设F1 … F4是我们的特征,Y是目标变量,假设F1是最重要的特征)。

    2. 我们有兴趣探索Y和F1的直接关系。

    3. 用F1(A)代替F1列,并为所有的观察找到新的预测值。采取预测的平均值。(称之为基准值)

    4. 对F1(B)… F1(E)重复步骤3,即针对特征F1的所有不同值。

    5. PDP的X轴具有不同的F1值,而Y轴是虽该基准值F1值的平均预测而变化。

    PDP特别适合用来回答类似这样的问题:

    • 在所有的收入水平的特征中,年龄和学历是如何影响收入的?或者说,在不同的国家相同年龄的人群收入水平有多少相似呢?

    • 预测推荐基金时,投资偏好的不同会带来多大的影响?还是有其他更重要的影响因素?

    如果你对线性回归或者逻辑回归比较熟悉,那么partial dependence可以被类比为这两类模型中的“系数”。并且partial dependence在复杂模型中的作用比在简单模型中更大,抓出更复杂的特性。

    同样还是用census_income的数据集,不同的个体在各个方面都是不一样的。比如种族,年龄,受教育程度等等。一眼看过去,很难区分这些特征对结果的影响有多大。为了清晰的分析,我们还是先只拿出某一行数据,比如说这一行数据里,有种族White,45岁,Bachelors。我们将会用已有模型来预测结果,将这一行的某一个变量,反复的进行修改和重新预测,比如将年龄修改从45修改为60,等等。持续观察预测结果,在不同的年龄时有什么样的变化。

    这里的例子,只用到了一行数据。特征之间的相互作用关系通过这一行来观察可能不太妥当,那么考虑用多行数据来进行试验,然后根据平均值画出图像来。

    from pdpbox import pdp

    feature = 'age'
    # 创建好画图所需的数据
    pdp_goals = pdp.pdp_isolate(model, X_train, df.columns, feature)
    # 画出“age”这一特征的partial dependence plot
    pdp.pdp_plot(pdp_goals, feature)
    plt.show()

    第一:y轴是预测结果的变化量。
    第二:蓝色阴影区域代表了置信的大小。
    从这幅图可以看出,age的增加肯定可以增加高收入概率,但是增加到一定的时候,对这个概率影响不大了。

    置信区间概念

    给定置信水平,根据估计值确定真实值可能出现的区间范围,该区间通常以估计值为中心,该区间则为置信区间。

    feature = 'education_num'
    pdp_goals = pdp.pdp_isolate(model, X_train, df.columns, feature)
    pdp.pdp_plot(pdp_goals, feature)
    plt.show()

    从这副图可以看出,受教育程度对收入起积极作用,随着受的教育越多,收入越高,也符合常人理解。

    fig, axes, summary_df_1 = info_plots.target_plot_interact(
        df=dataset, features=['age', 'education_num'], feature_names=['age', 'education_num'], target='income_level'
    )

    在此图表中,气泡大小不太重要,因为它与观测数量(事件发生的次数)有关。最重要的见解来自气泡的颜色,较暗的气泡意味着更高的默认概率。这是一个强大的工具,因为它可以深入了解我们选择的两个变量对因变量的影响。

    features_to_plot = ['age', 'education_num']
    inter1  = pdp.pdp_interact(model, df, df.columns, features_to_plot)
    pdp.pdp_interact_plot(inter1, features_to_plot, plot_type='grid', x_quantile=True, ncols = 2, plot_pdp=True)
    plt.show()

    上图可以看出,受教育程度和年龄对收入水平有着正相关作用,且随着受教育程度增加,年龄从35-90,高收入的概率越来越大。

    fig, axes = pdp.pdp_interact_plot(
        inter1, ['age', 'education_num'], plot_type='contour', x_quantile=True, ncols=2, 
        plot_pdp=True
    )

    重要的是要记住,在该图中,较暗的颜色并不一定意味着较高的默认概率。在这里,我们绘制了受教育等级和年龄与收入等级概率。我们可以推断,在这两个自变量中,education_num起着更重要的作用,因为等高线图主要是垂直的,遵循x轴刻度标记(至少达到一个点)。

    ICE

    部分依赖图(PDP)和个体条件期望图(ICE)说明了一个或多个输入变量与黑盒模型的预测结果之间的关系。它们都基于可视化,模型不可知的技术。ICE图可以更深入地探索个体差异并识别模型输入之间的子组和相互作用

    另一方面,ICE图使得可以深入到单个观察的水平。它们可以帮助探索个体差异,并确定模型输入之间的子组和交互。可以将每个ICE曲线视为一种模拟,显示如果改变特定观察的一个特征,模型预测会发生什么。为避免可视化过载,ICE图一次只显示一个模型变量。

    可以将每个ICE曲线视为一种模拟,显示如果您改变特定观察的一个特征,模型预测会发生什么。如图9所示,通过在曲线变量的唯一值上复制个体观察并对每个重复进行评分,获得一个观察的ICE曲线。

    下图中的PD图结果基本上是平坦的,给人的印象是X1与模型的预测之间没有关系。

    当我们观察ICE图时,它们呈现出一幅截然不同的图:这种关系对于一次观察非常正面,但对另一次观察则非常负面。因此,与PD图告诉我们的情况相反,ICE图显示X1实际上与目标有关;。基本上,ICE图分离PD功能(毕竟是平均值)以揭示相互作用和个体差异。

    当对大数据集分析时,则可能需要进行一些调整。例如,可以对选定的变量进行分箱,也可以对数据集进行采样或分组。这些技术可以更快地提供实际图的合理近似值。

    如果想进一步了解PD和ICE图,Ray Wright写了一篇很好的论文,展示了PD和ICE图如何用于比较和获得机器学习模型的洞察力,特别是所谓的“黑盒”算法,如随机森林,神经网络和梯度增强。在他的论文中,他还讨论了PD图的局限性,并提供了有关如何为大数据生成可缩放图的建议。https://www.sas.com/content/dam/SAS/support/en/sas-global-forum-proceedings/2018/1950-2018.pdf

    LIME

    局部可解释不可知模型(LIME)是一种算法,它提供了一种新颖的技术,以可解释和可信任的方式解释任何预测模型的结果。它的工作原理是围绕想要解释的预测在本地训练可解释的模型。这个工作发表于2016年KDD的论文。工具学习地址。

    流程

    • 训练模型,模型(记作 ff)可以是LR、NN、Wide and deep、C4.5 Decision tree、Random forest、GBDT等任意模型。

    • 训练结束后我们需要解析模型,先选择一个待解析的样本,样本通过模型计算可以得到一个prediction(包含预测的label以及预测为1的probability),这时我们在这个样本的附近选择新的样本并用模型计算出多个prediction,这样样本组合新的样本集。

    • 然后使用新的可解析的特征和prediction作为label来训练新的简单模型(例如LR),然后使用简单模型的权重作为这些特征的重要性作为输出。

    通俗来说

    就是选择一个样本以及样本附近的点,然后训练一个简单模型来拟合,虽然简单模型不能在完整数据集上有效,但至少在这个点附近都是有效的,这个简单模型的特征是人类可解析的,而训练出的权重也可以表示特征重要性。

    论文中算法描述:

    为了更好地理解LIME的工作原理,让我们考虑两种不同类型的可解释性:

    • 全局可解释性:全局解释有助于我们理解由训练的响应函数建模的整个条件分布,但全局解释可以是近似的或基于平均值。

    • 局部可解释性:局部解释促进对单个数据点或分布的小范围的理解,例如一组输入记录及其相应的预测。由于小范围的条件分布很可能是线性的,因此局部解释可能比全局解释更准确。LIME旨在提供局部可解释性,因此对于特定决策或结果最为准确。

    我们希望解释器与模型无关,并且在局部可靠。局部可靠的解释捕获要解释的实例邻域中的分类器行为。为了学习局部解释,LIME使用可解释的模型近似分类器围绕特定实例的决策边界。LIME与模型无关,这意味着它将模型视为黑盒子,并且不对模型行为做出任何假设。这使得LIME适用于任何预测模型。

    LIME的核心在于三个方面:

    • 这里不对模型整体提供解释,而是局部对每一个样本单独进行解释

    • 即使机器学习模型训练过程会产生一些抽象的特征,但是解释基于当前输入数据的变量特征

    • 通过局部建立简单模型进行预测来对大多数重要特征进行解释

    LIME作用在单个样本上。

    首先,我们取出一个样本,并(permute)重复这个数据同时增加一些微小扰动,这样就得到了一个新的数据集,数据集中包含相似的样本,都基于取出来的那个样本。对于这个新数据集中的每一个样本,我们可以计算它跟取出的样本之间的相似性,即在permutation中它被调整了多大,所有的统计距离、相似性矩阵都可以用在这里,比如用指定宽度的指数内核将欧式距离转化为相似度。

    下一步,使用最初训练的复杂模型,在新数据上进行预测。正因为新数据样本间的细微差别,我们可以跟踪那些微小扰动对预测结果的影响。

    最后,我们在新数据上训练出一个简单模型(通常是线性模型),并使用最重要的特征进行预测。最重要的特征有不同的决定方法,在指定加入模型解释中的特征数量(通常在5到10附近)的前提下,可以

    • 选择在使用复杂模型进行预测时回归拟合上具有最高权重的特征

    • 运用正向选择,选择可以提高复杂模型的预测的回归拟合的变量

    • 在复杂的机器学习模型预测的基础上,选择正则化的收缩率最小的lasso预测拟合的特征

    • 使用不多于我们已经选择了的特征的节点数量来构建决策树

    ## 创建LIME解释器
    explainer = lime.lime_tabular.LimeTabularExplainer(X_train ,feature_names = features_name, class_names=['0','1'], categorical_features=data_cat_features, 
    categorical_names=cat_columns, kernel_width=3)
    predict_fn_xgb = lambda x: xgb.predict_proba(x).astype(float)
    exp = explainer.explain_instance(X_test[2], predict_fn_xgb, num_features=6)
    exp.show_in_notebook(show_all=False)

    上图给我们解释了对于一个样本的预测结果,是哪些特征决定样本被分类到类别0,哪些特征决定样本被分类到类别1,且具体列出样本在这些特征的数值大小。很直观和明确的解释为什么模型做这个决定。

    SHAP

    Shaply值由美国洛杉矶加州大学教授罗伊德·夏普利(Lloyd Shapley)提出,用于解决合作博弈的贡献和收益分配问题。N人合作中,单个成员的贡献不一样,收益分配也应该不一样。理想的分配方式是:贡献=收益;

    贡献和收益分配是否有可以量化的方法呢?

    Shapley方法就是这样一种方法:Shapley值:单个成员所得与自己的贡献相等。

    基于Shap值的模型解释是一种和模型无关的方法。如上图,模型预测和Shap值解释是两个并行流程,Shap对模型预测的结果进行解释。NIPS 论文地址:A Unified Approach to Interpreting Model Predictions,也可以参考这篇博客:One Feature Attribution Method to (Supposedly) Rule Them All: Shapley Values。

    原理:一个特征的shapley value是该特征在所有的特征序列中的平均边际贡献。

    优点:

    • 解决了多重共线性问题;

    • 不仅考虑单个变量的影响,而且考虑变量组的影响,变量之间可能存在协同效应;

    缺点:计算效率低。

    适用范围:

    • 计算个体的特征shapley value;

    • 所有个体的每个特征的shapley value的绝对值求和或求平均即为整体的特征重要性;

    Shap方法的两大特性

    • 特征归因(收益)一致性:

      定义

    • 模型改变(A->B),特征x的贡献不递减(增加或者保持现状),则归因(收益)也不递减;

      特点

    • 特征作用越大(小),重要度越高(低),和模型变化无关;

      全局特征一致性

    • mean(|Tree SHAP|): Shap值;

    • Gain : 特征用于划分时所带来的训练损失减益的平均值;

    • Split Count: 根据特征用于划分的次数计算重要性;

    • Permutation: 将特征的值随机排列,用排列前后的模型误差来计算重要性;

      局部样本(Fever=yes,cough=yes的样本)一致性

    • Saabas[5] : 树创建完成后,根据样本预测值,将父节点和子节点value的差异,作为父节点的特征重要性;

    • Tree SHAP : 基于Shap值矩阵(样本数*特征数),计算出Fever和Cough的重要性;

    • 特征归因(收益)可加性:

      解释性方法如果具有特征归因可加性,特征重要性和模型预测值可以通过特征贡献的线性组合来表示。简单模型最好的解释是它本身;复杂模型,直接进行解释并不容易,需要通过代理模型来解释。接下来引入代理模型(解释模型)来描述特征归因可加性。

    树模型Shap值的解

    • N为全体特征集合,S为N的一个排列子集(顺序相关)

    • 求和第一项:排列数

    • 求和第二项:对于任意子集S,特征i的贡献

    • 特征i的shap值可以理解为i的贡献归因

    详细内容参考论文。

    用Shap值识别特征交叉

    Shap方法计算两两特征交叉影响:

    通俗理解:交叉影响=两个人合作贡献增益,减去各自单干的贡献;

    单个特征的贡献

    Shap方法计算单个特征的贡献(剔除交叉影响):

    通俗理解:个人影响=个人合作贡献,减去其它N-1个人的贡献;下面还是以收入水平数据集进行案例分析:
    row_to_show = 5
    data_for_prediction = X_test.iloc[row_to_show]  # use 5 row of data here. Could use multiple rows if desired
    data_for_prediction_array = data_for_prediction.values.reshape(1, -1)

    # 计算model的shap值
    explainer = shap.TreeExplainer(model)
    # 计算样本数据的shap值
    shap_values = explainer.shap_values(data_for_prediction)

    shap.initjs()
    shap.force_plot(explainer.expected_value[1], shap_values[1], data_for_prediction)

    图形解释

    • Base value :模型在数据集上的输出均值:-0.1524

    • Output value:模型在单个样本的输出值:0.68

    • 起正向作用的特征:marital_status2、occupation3

    • 起负向作用的特征:capital_gain、education_num

    特征解释

    • 解释Output value(单个样本)和Base value(全体样本Shap平均值)的差异,以及差异是由哪些特征造成的

    • 红色是起正向作用的特征,蓝色是起负向作用的特征

    shap_values_b = explainer.shap_values(X_test)
    shap.force_plot(explainer.expected_value[0], shap_values_b[0], X_test, link="logit")

    特征解释

    • 解释Output value和Base value的差异,以及差异是由哪些特征造成的

    Summary Plots:

    shap_values = explainer.shap_values(X_test)
    shap.summary_plot(shap_values[1], X_test)


    图形解释

    • 每个点是一个样本(人),图片中包含所有样本

    • X轴:样本按Shap值排序-

    • Y轴:特征按Shap值排序

    • 颜色:特征的数值越大,越红

    特征解释

    • martial_status2这个特征最重要,且值越大,收入会相对更高,到达一定峰值,会明显下降

    • 年龄也是影响结果的重要特征,年龄小收入普遍低,但年龄到达一定程度,并不会增加收入,存在年龄小,收入高的人群。

    • 收入水平和capital_gain大致呈正相关。

    shap.summary_plot(shap_values[1],X_test, plot_type="bar")

    上图是特征重要性图谱,由上向下重要性依次减弱。

    shap_values = explainer.shap_values(df)
    shap.dependence_plot('age', shap_values[1], df, interaction_index="capital_gain")

    图形解释:

    • X轴:age

    • Y轴(左):一个样本的age对应的Shap值

    • 颜色:capital_gain越大越红

    特征解释:

    • 排除所有特征的影响,描述age和capital_gain的关系。

    • 年龄大的人更趋向于有大的资本收益,小部分年轻人有大的资本收益。


    RETAIN

    概述

    论文使用称为RETAIN的建模策略解决了这个限制,这是一种两级神经网络顺序数据的注意模型,提供对预测结果的详细解释保持与RNN相当的预测精度。为此,RETAIN依赖于关注机制被建模以表示在遭遇期间医生的行为。一个区别RETAIN的功能(参见图1)是利用注意力生成来利用序列信息机制,同时学习可解释的表示。并模仿医生的行为,RETAIN以相反的时间顺序检查患者的过去访问,从而促进更稳定的注意后代。因此,RETAIN会识别最有意义的访问次数并量化访问量有助于预测的功能。

    模型使用两套权重,一套是visit-level attention ,另外一套是variable-level attention。使用两个RNN网络分别产生。

    Step1:使用线性embedding
    Step2:产生visit-level attention。其中输入RNN中的数据采用时间逆序输入。对于稀疏的attention,使用Sparsemax而不是Softmax。
    Step3:产生variable-levelattention,其中输入RNN中的数据采用时间逆序输入。
    Step4:根据以上两步生成的attentionweight,生成context vector。Ci表示病人第i次visit。
    Step5:根据Context Vector生成预测结果。

    LRP

    逐层相关性传播(LRP)是一种通过在神经网络中运行反向传递来识别重要像素的方法。向后传递是保守的相关再分配过程,其中对较高层贡献最大的神经元从其获得最大相关性。LRP程序如下图所示。

    该方法可以在大多数编程语言中容易地实现并且集成到现有的神经网络框架中。当应用于深度ReLU网络时,LRP可以被理解为预测的深度泰勒分解。

    这里有如何实现LRP用于解释深度模型的代码教程,有兴趣可以动手实现,用于解释自己的深度模型。

    参考文献

    • Interpretable Machine Learning

      https://christophm.github.io/interpretable-ml-book/pdp.html

    • Partial dependence ——集成树的可解析性

      https://zhuanlan.zhihu.com/p/40356430

    • Machine Learning for Insights Challenge

      https://zhuanlan.zhihu.com/p/45898896

    • https://yyqing.me/post/2018/2018-09-25-kaggle-model-insights

    • http://rstudio-pubs-static.s3.amazonaws.com/283647_c3ab1ccee95a403ebe3d276599a85ab8.html

    • 《通向人类可理解、可解释的人工智能》

    • https://github.com/lopusz/awesome-interpretable-machine-learning

    • https://github.com/jphall663/awesome-machine-learning-interpretability

    • https://github.com/Henrilin28/awesome-Interpretable-ML

    • http://xiangruix.com/2018/07/31/lime/

    • https://www.jianshu.com/p/b52efa66154e

    • https://zhuanlan.zhihu.com/p/32891505

    • https://suensummit.github.io/intro-lime/#1

    • https://www.oreilly.com/learning/introduction-to-local-interpretable-model-agnostic-explanations-lime

    • https://github.com/slundberg/shap

    • http://km.oa.com/group/22630/articles/show/380452?kmref=search&from_page=1&no=1

    感谢 zizhewang(汪子哲) 同学协助整理本文,汇总对机器学习模型可解释性相关资料。

    推荐原创干货阅读:  

     聊聊近状, 唠十块钱的

    【Deep Learning】详细解读LSTM与GRU单元的各个公式和区别

    【手把手AI项目】一、安装win10+linux-Ubuntu16.04的双系统(全网最详细)

    【Deep Learning】为什么卷积神经网络中的“卷积”不是卷积运算?

    【TOOLS】Pandas如何进行内存优化和数据加速读取(附代码详解)

    【TOOLS】python3利用SMTP进行邮件Email自主发送

    【手把手AI项目】七、MobileNetSSD通过Ncnn前向推理框架在PC端的使用

    公众号:AI蜗牛车

    保持谦逊、保持自律、保持进步

    点个在看,么么哒!

    展开全文
  • 机器学习的可解释

    千次阅读 2020-12-09 19:00:00
    1.3 可解释性的分类 根据可解释性方法的作用时间、可解释性方法与模型的匹配关系、可解释性方法的作用范围,我们可以将机器学习的可解释性方法分为:本质可解释性和事后可解释性、针对特定模型的可解释性和模型无关...

    写在前面——

    这是一个正在建设的开源综述评论项目,旨在从海量AI论文中发掘最有价值的研究工作,并以团队形式定期开展各专题的研究进展梳理。

    我们会逐渐开展各个专题的整理工作,并随之组建各细分领域的兴趣社群,欢迎大家加入。

    欢迎关注我们的工作:

    Github:floatingCatty/BAAI-Monthly-

    可解释性研究群:(审核进入)

    本期贡献者

    熊宇轩     周寅张皓

    马瑞军    王光华

    本文为【知源月旦】团队完成的首篇综述,参考了Gilpin Leilani H.,et al. 发表在DSAA2018 上的文章[0]。后续我们会定期更新最新前沿研究进展,敬请关注。

    一、机器学习的可解释性研究概述

    随着机器学习模型在人们日常生活中的许多场景下扮演着越来越重要的角色,模型的「可解释性」成为了决定用户是否能够「信任」这些模型的关键因素(尤其是当我们需要机器为关系到人类生命健康、财产安全等重要任务给出预测和决策结果时)。在本章,我们将从机器学习可解释性的定义、研究意义、分类方法 3 个方面对这一话题展开讨论。

    1.1

     何为可解释性

    对于机器学习的用户而言,模型的可解释性是一种较为主观的性质,我们无法通过严谨的数学表达方法形式化定义可解释性。通常,我们可以认为机器学习的可解释性刻画了「人类对模型决策或预测结果的理解程度」,即用户可以更容易地理解解释性较高的模型做出的决策和预测。

     

    从哲学的角度来说,为了理解何为机器学习的可解释性,我们需要回答以下几个问题:首先,我们应该如何定义对事务的「解释」,怎样的解释才足够好?许多学者认为,要判断一个解释是否足够好,取决于这个解释需要回答的问题是什么。对于机器学习任务而言,我们最感兴趣的两类问题是「为什么会得到该结果」和「为什么结果应该是这样」。而理想状态下,如果我们能够通过溯因推理的方式恢复出模型计算出输出结果的过程,就可以实现较强的模型解释性。

     

    实际上,我们可以从「可解释性」和「完整性」这两个方面来衡量一种解释是否合理。「可解释性」旨在通过一种人类能够理解的方式描述系统的内部结构,它与人类的认知、知识和偏见息息相关;而「完整性」旨在通过一种精确的方式来描述系统的各个操作步骤(例如,剖析深度学习网络中的数学操作和参数)。然而,不幸的是,我们很难同时实现很强的「可解释性」和「完整性」,这是因为精确的解释术语往往对于人们来说晦涩难懂。同时,仅仅使用人类能够理解的方式进行解释由往往会引入人类认知上的偏见。

     

    此外,我们还可以从更宏大的角度理解「可解释性人工智能」,将其作为一个「人与智能体的交互」问题。如图 1 所示,人与智能体的交互涉及人工智能、社会科学、人机交互等领域。

           

         

    图 1:可解释的人工智能 

     

    1.2

    为什么需要可解释性

    在当下的深度学习浪潮中,许多新发表的工作都声称自己可以在目标任务上取得良好的性能。尽管如此,用户在诸如医疗、法律、金融等应用场景下仍然需要从更为详细和具象的角度理解得出结论的原因。为模型赋予较强的可解释性也有利于确保其公平性、隐私保护性能、鲁棒性,说明输入到输出之间个状态的因果关系,提升用户对产品的信任程度。下面,我们从「完善深度学习模型」、「深度学习模型与人的关系」、「深度学习模型与社会的关系」3 个方面简介研究机器学习可解释性的意义。

    (1)完善深度学习模型

    • 大多数深度学习模型是由数据驱动的黑盒模型,而这些模型本身成为了知识的来源,模型能提取到怎样的知识在很大程度上依赖于模型的组织架构、对数据的表征方式,对模型的可解释性可以显式地捕获这些知识。

    • 尽管深度学习模型可以取得优异的性能,但是由于我们难以对深度学习模型进行调试,使其质量保证工作难以实现。对错误结果的解释可以为修复系统提供指导。

    (2)深度学习模型与人的关系

    • 在人与深度学习模型交互的过程中,会形成经过组织的知识结构来为用户解释模型复杂的工作机制,即「心理模型」。为了让用户得到更好的交互体验,满足其好奇心,就需要赋予模型较强的可解释性,否则用户会感到沮丧,失去对模型的信任和使用兴趣。

    • 人们希望协调自身的知识结构要素之间的矛盾或不一致性。如果机器做出了与人的意愿有出入的决策,用户则会试图解释这种差异。当机器的决策对人的生活影响越大时,对于这种决策的解释就更为重要。

    • 当模型的决策和预测结果对用户的生活会产生重要影响时,对模型的可解释性与用户对模型的信任程度息息相关。例如,对于医疗、自动驾驶等与人们的生命健康紧密相关的任务,以及保险、金融、理财、法律等与用户财产安全相关的任务,用户往往需要模型具有很强的可解释性才会谨慎地采用该模型。

    (3)深度学习模型与社会的关系

    • 由于深度学习高度依赖于训练数据,而训练数据往往并不是无偏的,会产生对于人种、性别、职业等因素的偏见。为了保证模型的公平性,用户会要求深度学习模型具有检测偏见的功能,能够通过对自身决策的解释说明其公平。

    • 深度学习模型作为一种商品具有很强的社会交互属性,具有强可解释性的模型也会具有较高的社会认可度,会更容易被公众所接纳。

    1.3

    可解释性的分类

    根据可解释性方法的作用时间、可解释性方法与模型的匹配关系、可解释性方法的作用范围,我们可以将机器学习的可解释性方法分为:本质可解释性和事后可解释性、针对特定模型的可解释性和模型无关可解释性、局部可解释性和全局可解释性。

     

    其中,本质可解释性指的是对模型的架构进行限制,使其工作原理和中间结果能够较为容易地为人们所理解(例如,结构简单的决策树模型);事后可解释性则指的是通过各种统计量、可视化方法、因果推理等手段,对训练后的模型进行解释。

     

    由于深度模型的广泛应用,本文将重点关注深度学习的可解释性,并同时设计一些机器学习方法的解释。

    二、深度学习的可解释性

    对于深度学习模型来说,我们重点关注如何解释「网络对于数据的处理过程」、「网络对于数据的表征」,以及「如何构建能够生成自我解释的深度学习系统」。网路对于数据的处理过程将回答「输入为什么会得到相应的的特定输出?」,这一解释过程与剖析程序的执行过程相类似;网络对于数据的表征将回答「网络包含哪些信息?」,这一过程与解释程序内部的数据结构相似。下文将重点从以上三个方面展开讨论。

     

    2.1

    深度学习过程的可解释性

     

    常用的深度网络使用大量的基本操作来得出决策:例如,ResNet使用了约5×107个学习参数,1010个浮点运算来对单个图像进行分类。解释这种复杂模型的基本方法是降低其复杂度。这可以通过设计表现与原始模型相似但更易于解释的代理模型来完成(线性代理模型、决策树模型等),或者也可以构建显著性图(salience map),来突出显示最相关的一部分计算,从而提供可解释性。

     

    (1)线性代理模型(Proxy Models)

     

    目前被广泛采用的机器学习模型,大多仍然是「黑盒模型」。在根据预测结果规划行动方案,或者选择是否部署某个新模型时,我们需要理解预测背后的推理过程,从而评估模型的可信赖程度。一种可能的方法是,使用线性可解释的模型近似“黑盒模型”。

     

    Marco et. al [1]提出了一种新的模型无关的模型解释技术「LIME」,它可以通过一种可解释的、准确可靠的方式,通过学习一个围绕预测结果的可解释模型,解释任意的分类器或回归模型的预测结果。本文作者还通过简洁地展示具有代表性的个体预测结果及其解释,将该任务设计成了一种子模块优化问题。

     

    文中指出,一种优秀的解释方法需要具备以下几点特质:

    (1)可解释性:给出对输入变量和响应的关系的定性理解,可解释性需要考虑用户自身的限制。

    (2)局部保真:解释方法至少需要在局部是可靠的,它必须与模型在被预测实例附近的表现相对应。需要指出的是,在全局上重要的特征不一定在局部环境下仍然重要,反之亦然。

    (3)模型无关:解释方法需要能够解释各种各样的模型。

    (4)全局视角:准确度有时并不是一个很好的模型评价指标,解释器旨在给出一些具有代表性的对样本的解释。

     

    文中的方法可以基于对分类器局部可靠的可解释表征,来鉴别器模型的可解释性。LIME 会对输入样本进行扰动,识别出对于预测结果影响最大的特征(人类可以理解这些特征)。

     

                 

    图 2

    如图 2 所示,加粗的红色十字样本有待解释。从全局来看,很难判断红色十字和蓝色圆圈对于带解释样本的影响。我们可以将视野缩小到黑色虚线周围的局部范围内,在加粗红色十字样本周围对原始样本特征做一些扰动,将扰动后的采样样本作为分类模型的输入,LIME 的目标函数如下:

                 

     

    其中,f 为分类器,g 为解释器,π_x 为临近度度量,Ω(g) 为解释器 g 的复杂度,L 为损失函数。

           

    图 3

    因为代理模型提供了模型复杂度与可信度之间的量化方法,因此方法间可以互相作为参考,吸引了许多研究工作。

     

    (2)决策树方法

     

    另一种代理模型的方法是决策树。将神经网络分解成决策树的工作从1990年代开始,该工作能够解释浅层网络,并逐渐泛化到深度神经网络的计算过程中。

     

    一个经典的例子是Makoto et. al [2]。文中提出了一种新的规则抽取(Rule Extraction)方法CRED,使用决策树对神经网络进行分解,并通过c/d-rule算法合并生成的分支,产生不同分类粒度,能够考虑连续与离散值的神经网络输入输出的解释。具体算法如下:

    一.将网络输入变量按设定的特征间隔大小分成不同类别,并划分网络的目标输出和其他输出。

    二.建立输出隐藏决策树(Hidden-Output Decision Tree)每个结点使用预测目标的特征做区分,以此分解网络,建立网络的中间规则。

    三.对于2建立的每个节点,对其代表的每个函数建立输入隐藏决策树(Hidden-Input Decision Tree),对输入的特征进行区分,得到每个节点输入的规则。

    四.使用3中建立的输入规则替换结点的输出规则,得到网络整体的规则。

    五.合并结点,根据设定的规则,使表达简洁。

     

               

    图 4 :CRED算法

    DeepRED [3]将CRED的工作拓展到了多层网络上,并采用了多种结构优化生成树的结构。另一种决策树结构是ANN-DT[4],同样使用模型的结点结构建立决策树,对数据进行划分。不同的是,判断节点是采用正负两种方法判断该位置的函数是否被激活,以此划分数据。决策树生成后,通过在样本空间采样、实验,获得神经网络的规则。

     

    这阶段的工作对较浅的网络生成了可靠的解释,启发了很多工作,但由于决策树节点个数依赖于网络大小,对于大规模的网络,方法的计算开销将相应增长。

     

    (3)自动规则生成

     

    自动规则生成是另一种总结模型决策规律的方法,上世纪80年代, Gallant将神经网络视作存储知识的数据库,为了从网络中发掘信息和规则,他在工作[4]中提出了从简单网络中提取规则的方法,这可以被看作是规则抽取在神经网络中应用的起源。现今,神经网络中的规则生成技术主要讲输出看作规则的集合,利用命题逻辑等方法从中获取规则。

     

    Hiroshi Tsukimoto [6]提出了一种从训练完成的神经网络中提取特征提取规则的方法,该方法属于分解法,可以适用在输出单调的神经网络中,如sigmoid函数。该方法不依赖训练算法,计算复杂度为多项式,其计算思想为:用布尔函数拟合神经网络的神经元,同时为了解决该方法导致计算复杂度指数增加的问题,将算法采用多项式表达。最后将该算法推广到连续域,提取规则采用了连续布尔函数。

     

    Towell [7]形式化了从神经网络中提取特征的方法,文章从训练完成的神经网络中提取网络提取特征的方法,MoFN,该方法的提取规则与所提取的网络的精度相近,同时优于直接细化规则的方法产生的规则,更加利于人类理解网络。

     

    MoFN分为6步:1)聚类;2)求平均;3)去误差;4)优化;5)提取;6)简化。

    聚类采用标准聚类方法,一次组合两个相近的族进行聚类,聚类结束后对聚类的结果进行求平均处理,计算时将每组中所有链路的权重设置为每个组权重的平均值,接下来将链接权重较低的组去除,将留下的组进行单位偏差优化,优化后的组进行提取工作,通过直接将每个单元的偏差和传入权重转换成具有加权前因的规则来创建,最后对提取到的规则简化。MOFN的算法示例如下图所示。

           

    图5:MOFN 算法

    规则生成可以总结出可靠可信的神经网络的计算规则,他们有些是基于统计分析,或者是从模型中推导,在保障神经网络在关键领域的应用提供了安全保障的可能。

     

    (4)显著性图

     

    显著性图方法使用一系列可视化的技术,从模型中生成解释,该解释通常表达了样本特征对于模型输出的影响,从而一定程度上解释模型的预测。常见方法有反卷积、梯度方法等。Zeiler [8]提出了可视化的技巧,使用反卷积观察到训练过程中特征的演化和影响,对CNN内部结构与参数进行了一定的“解读”,可以分析模型潜在的问题,网络深度、宽度、数据集大小对网络性能的影响,也可以分析了网络输出特征的泛化能力以及泛化过程中出现的问题。

     

    用反卷积实现特征可视化

     

    为了解释卷积神经网络如何工作,就需要解释CNN的每一层学习到了什么东西。为了理解网络中间的每一层,提取到特征,论文通过反卷积的方法,进行可视化。反卷积网络可以看成是卷积网络的逆过程。反卷积可视化以各层得到的特征图作为输入,进行反卷积,得到反卷积结果,用以验证显示各层提取到的特征图。

    Eg:假如你想要查看Alexnet的conv5提取到了什么东西,就用conv5的特征图后面接一个反卷积网络,然后通过:反池化、反激活、反卷积,这样的一个过程,把本来一张13*13大小的特征图(conv5大小为13*13),放大回去,最后得到一张与原始输入图片一样大小的图片(227*227)。

    反池化过程

     

    池化是不可逆的过程,然而可以通过记录池化过程中,最大激活值的坐标位置。然后在反池化的时候,只把池化过程中最大激活值所在的位置坐标的值激活,其它的值置为0,当然这个过程只是一种近似,因为在池化的过程中,除了最大值所在的位置,其它的值也是不为0的。

               

    图 6 

     

    反激活

     

    在Alexnet中,relu函数是用于保证每层输出的激活值都是正数,因此对于反向过程,同样需要保证每层的特征图为正值,也就是说这个反激活过程和激活过程没有什么差别,都是直接采用relu函数。

     

    另一些可视化方法可视化方法主要是通过deconv的方法将某一层特征图的Top-k激活反向投射到原图像上,从而判断该激活值主要识别图像的什么部分。这就要求针对每一层都必须有对应的逆向操作。

    具体而言,对于MaxPooling层,在前馈时使用switch变量来记录最大值来源的index,然后以此近似得到Unpooling。对于Relu层,直接使用Relu层。而对于conv层,使用deconv,即使用原来卷积核的转置作为卷积核。通过可视化方法,对训练完成的模型在ImageNet的数据各层可视化后,可以得到不同结构的重建特征图,与原图进行对比能够直观地看到网络各层学习到的信息:

             

    图 7:第二层学习边缘,角落信息;第三层学到了一些比较复杂的模式,网状,轮胎;第四层展示了一些比较明显的变化,但是与类别更加相关了,比如狗脸,鸟腿;第五层则看到了整个物体,比如键盘,狗。

    同时,通过可视化,我们也可以发现模型的缺陷,例如某些层学习到的特征杂乱无章,通过单独训练,可以提升模型效果。另外的方法也被采用,例如使用遮挡的方法,通过覆盖输入的某部分特征,分析输出和模型计算的中间参数,得到模型对被遮挡部分的敏感性,生成敏感性图,或者用梯度方法得到输出对于输入图像像素的梯度,生成梯度热力图。

    总结性的工作来自ETH Zurch的Enea Ceolini [9]证明了基于梯度的归因方法(gradient-based Attribution methods)存在形式上\联系,文章证明了在一定情况下,诸如sigma-LRP[10]、DeepLIF[11]方法间存在的等价和近似关系,并基于统一的数学表达,提出了一个更普适的梯度归因方法框架Sensitivity-n,用于解释模型输入输出之间的关联。

     

    深度学习的归因分析用于解释输入的每个变量对于神经网络的贡献(contribution),或相关程度(relevance),严格来说,假设网络的输入为x = [x1, ..., xN ],C个输出神经元对应的输出为S(x) = [S1(x), ..., SC (x)],归因分析的目标便是找到xi对于每个神经元输出的贡献,Rc = [Rc 1 , ..., Rc N ]。

    基于梯度的方法可以被看作直接使用输出对输出的特征求梯度,用梯度的一定变换形式表示其重要性,工作中展示的考虑不同大小特征区域热力图如下:

           

    图 8

    文章分析了不同方法的效果差异:

            

    图 9

     

    通过证明,得到通用的梯度方法表示为:

                 

    基于上述推导,作者得以提出了sensitivity-n方法,总结了相似的梯度方法,并使后续工作可以在更广泛的框架下讨论。

    2.2

    深度网络表示的可解释性

     

    尽管存在大量神经网络运算,深度神经网络内部由少数的子组件构成:例如,数十亿个ResNet的操作被组织为约100层,每层计算64至2048信息通道像素。对深层网络表示的解释旨在了解流经这些信息瓶颈的数据的作用和结构。可以按其粒度划分为三个子类:基于层的解释,将流经层的所有信息一起考虑;基于神经元的解释,用来说明单个神经元或单个filter通道的情况;此外基于(其他)表示向量的解释,例如概念激活向量(CAV)[12]是通过识别和探测与人类可解释概念一致的方向来解释神经网络表示,用单个单元的线性组合所形成的表示向量空间中的其他方向作为其表征向量。

     

    (1)基于层的解释

    Bengio等人[13]分析了在图片分类任务中,不同层的神经网络的功能和可迁移性,以及不同迁移方法对结果的影响。从实验的角度分析了神经网络不同层参数具有的一些性质,证明了模型迁移方法的普遍效果。作者验证了浅层神经网络在特征抽取功能上的通用性和可复用性,针对实验结果提出了可能的解释,表明影响迁移学习效果的因素有二:

     

    1) 共同训练变量的影响

    通过反向传播算法训练的神经网络,结点参数并非单独训练,其梯度计算依赖于一系列相关结点,因此迁移部分结点参数会引起相关结点的训练困难。

     

    2) 迁移参数的通用性能和专用性

    网络中较浅层网络的功能较为通用,而高层网络与网络的训练目标更加相关。若A、B任务不想关,则专用于A的参数迁移后会影响对B任务的学习。

           

    图10

    实验结果发现,在不同的实验条件下,两种因素会不同程度决定迁移学习的效果。例如,当迁移较深层网络并固定参数时,高层参数的专用性会导致在迁移到的任务上表现不佳,但这时共同训练的变量影响会减小,因为大部分参数都被迁移获得;当迁移自身的参数并固定时,在层数较小的情况下出现了性能下降,这说明了共同训练的变量对表现的影响。另外,实验发现完全不相关的任务对应的迁移,在经过充分微调后仍然能提升模型的性能,这证明了参数迁移是一个通用的提升模型性能的方法。

     

    牛津大学Karen Simonyan等人[14]为解决深层卷积神经网络分类模型的可视化问题,提出了两种方法:第一种生成图像使得类得分最大化,再将类可视化;第二种计算给定图像和类的类显著性映射,同时还证明了这种方法可以使用分类转换网络的弱监督对象分类。整个文章主要有三个贡献:证明了理解分类CNN模型可以使用输入图像的数值优化;提出了一种在图像中提取指定类别的空间表征信息(image-specific class saliency map)的方法(只通过一次back-propagation),并且这种saliency maps可以用于弱监督的物体定位。证明gradient-based的可视化方法可以推广到deconvolutional network的重构过程。

     

    在第一类方法中,文中采用公式(1)进行图像分类模型的可视化操作,其中表示c的分数,由ConvNet的分类层对图像I计算得到,是正则化参数。可视化过程与ConvNet训练过程类似,不同之处在于对图像的输入做了优化,权重则固定为训练阶段得到的权重。图1所示为使用零图像初始化优化,然后将训练集的均值图像添加到结果中的输出图。

                   (1)

           

    图 11 

    在第二类方法中,给定一张图像I0,在I0附近使用一阶泰勒展开的线性函数来近似Sc(I):,其中w即为Sc对于图像I的导数在I0点的值:

     

    在给定的图像I0(m行n列)和对应的类别c中,要求得它对应saliency map M (M∈Rmxn),首先按照上述公式利用back-propagation 可以求得导数w,然后对w元素进行重新排列即可得到Saliency Map。Saliency Map是利用训练好的CNN直接提取的,无需使用额外的标注,而且对于某个特定类别的image-specific saliency map的求解是很快的,只需要一次back-propagation。可视化结果如图2所示

           

    图 12

    在第二类方法中得到的Saliency Map编码了给定图像中特定类别的物体位置信息,所以它可以被用来进行物体定位(尽管它在分类任务上得到训练,弱监督学习)。给定一张图像和其对应的Saliency Map,可以使用GraphCut颜色分割模型来得到物体分割mask。要使用颜色分割模型主要是因为Saliency Map只能捕捉到一个物体最具有区分性的部分,它无法highlight整个物体,因此需要将threshold map传递到物体的其他区域,本文使用colour continuity cues来达到这个目的。前景和背景模型都被设置为高式混合模型,高于图像Saliency distribution 95%的像素被视为前景,Saliency低于30%的像素被视为背景。标记了前景和背景像素之后,前景像素的最大连接区域即为对应物体的分割mask(使用GraphCut算法),效果如图3所示。

     

    图 13

    此外,Zhang et. al. 的工作[15]发现网络浅层具有统计输入信息的功能,并发现其和共享的特征信息一样,对迁移带来的性能提升起到了帮助。通过从相同checkpoint训练,发现参数迁移,可以使模型损失每次都保持在相同的平面内(basin),具有相似的地形,但随机初始化的参数每次损失所在的训练平面不同。文章支持了高层、低层网络具有的不同功能,发现高层网路对于参数的改变更加敏感。

     

    (2)基于神经元的解释

     

    香港中文大学助理教授周博磊的工作[16]为 CAM 技术的奠定了基础,发现了 CNN 中卷积层对目标的定位功能。在改文中,作者对场景分类任务中训练 CNN 时得到的目标检测器展开了研究。由于场景是由物体组成的,用于场景分类的 CNN 会自动发现有意义的目标检测器,它们对学到的场景类别具有代表性。作者发现,单个网络可以支持多个级别的抽象(如边缘、纹理、对象、场景),同一个网络可以在无监督环境下,在单个前向传播过程中同时完成场景识别和目标定位。

           

    图 14:估计每个神经元的感受野

    针对每个神经元,作者估计出了其确切地感受野,并观察到激活区域倾向于随着层的深度增加而在语义上变得更有意义(这是启发后来一系列计算机视觉神经网络框架的理论基础)。

     

    周博磊CVPR 2017[17]提出了一种名为“Network Disp”的通用框架,假设“单元的可解释性等同于单元的随机线性结合”,通过评估单个隐藏单元与一系列语义概念间的对应关系,来量化 CNN 隐藏表征的可解释性。

    这种方法利用大量的视觉概念数据集来评估每个中间卷积层隐藏单元的语义。这些带有语义的单元被赋予了大量的概念标签,这些概念包括物体、组成部分、场景、纹理、材料和颜色等。该方法揭示 CNN 模型和训练方法的特性,而不仅仅是衡量他们的判别能力。

    论文发现:人类可解释的概念有时候会以单一隐藏变量的形式出现在这些网络中;当网络未受限于只能用可解释的方式分解问题时,就会出现这种内部结构。这种可解释结构的出现意味着,深度神经网络也许可以自发学习分离式表征(disentangled representations)。

    众所周知,神经网络可以学习某种编码方式,高效利用隐藏变量来区分其状态。如果深度神经网络的内部表征是部分分离的,那么检测断分离式结构并读取分离因数可能是理解这种机制的一种方法。同时该论文指出可解释性是与坐标轴对齐(axis-aligned)的,对表示(representation)进行翻转(rotate),网络的可解释能力会下降,但是分类性能不变。越深的结构可解释性越好,训练轮数越多越好。而与初始化无关dropout会增强可解释性而Batch normalization会降低可解释性。

      图 15

    麻省理工大学CSAIL的Jonathan Frankle和Michael Carbin论文[18]中指出神经网络剪枝技术可以将受过训练的网络的参数减少90%以上,在不影响准确性的情况下,降低存储要求并提高计算性能。

    然而,目前的经验是通过剪枝产生的稀疏架构很难从头训练,也很难提高训练性能。作者发现标准的剪枝技术自然而然地可以得到子网络,它们能在某些初始化条件下有效地进行训练。在此基础之上,作者提出了彩票假设:任何密集、随机初始化的包含子网络(中奖彩票)的前馈网络 ,当它们被单独训练时,可以在相似的迭代次数内达到与原始网络相当的测试精度。

     

    具体而言,作者通过迭代式而定剪枝训练网络,并剪掉最小的权重,从而得到「中奖彩票」。通过大量实验,作者发现,剪枝得到的中奖彩票网络比原网络学习得更快,泛化性能更强,准确率更高。剪枝的主要的步骤如下:

     

    (1)随机初始化一个神经网络        

    (2)将网络训练 j 轮,得到参数      

    (3)剪掉 中 p% 的参数,得到掩模 m

    (4)将剩余的参数重置为中的值,生成中奖彩票 

    图 16:虚线为随机才应该能得到的稀疏网络,实现为中奖彩票。

     

    此外,加利福尼亚大学的ZHANG  Quanshi和ZHU  Song-chun 综述了近年来神经网络可解释性方面的研究进展[19]。文章以卷积神经网络(CNN)为研究对象,回顾了CNN表征的可视化、预训练CNN表征的诊断方法、预训练CNN表征的分离方法、带分离表示的CNN学习以及基于模型可解释性的中端学习。

    最后,讨论了可解释人工智能的发展趋势,并且指出了以下几个未来可能的研究方向:1)将conv层的混沌表示分解为图形模型或符号逻辑;2)可解释神经网络的端到端学习,其中间层编码可理解的模式(可解释的cnn已经被开发出来,其中高转换层中的每个过滤器代表一个特定的对象部分);3)基于CNN模式的可解释性表示,提出了语义层次的中端学习,以加快学习过程;4)基于可解释网络的语义层次结构,在语义级别调试CNN表示将创建新的可视化应用程序。

     

    网络模型自身也可以通过不同的设计方法和训练使其具备一定的解释性,常见的方法主要有三种:注意力机制网络;分离表示法;生成解释法。基于注意力机制的网络可以学习一些功能,这些功能提供对输入或内部特征的加权,以引导网络其他部分可见的信息。分离法的表征可以使用单独的维度来描述有意义的和独立的变化因素,应用中可以使用深层网络训练显式学习的分离表示。在生成解释法中,深层神经网络也可以把生成人类可理解的解释作为系统显式训练的一部分。

    2.3

    生成自我解释的深度学习系统

    网络模型自身也可以通过不同的设计方法和训练使其具备一定的解释性,常见的方法主要有三种:注意力机制网络;分离表示法;生成解释法。基于注意力机制的网络可以学习一些功能,这些功能提供对输入或内部特征的加权,以引导网络其他部分可见的信息。分离法的表征可以使用单独的维度来描述有意义的和独立的变化因素,应用中可以使用深层网络训练显式学习的分离表示。在生成解释法中,深层神经网络也可以把生成人类可理解的解释作为系统显式训练的一部分。

    (1)注意力机制网络

     

    注意力机制的计算过程可以被解释为:计算输入与其中间过程表示之间的相互权重。计算得到的与其他元素的注意力值可以被直观的表示。

    在Dong Huk Park 发表于CVPR2018的[20]一文中,作者提出的模型可以同时生成图像与文本的解释。其方法在于利用人类的解释纠正机器的决定,但当时并没有通用的包含人类解释信息与图像信息的数据集,因此,作者整理了数据集ACT-X与VQA-X,并在其上训练提出了P-JX(Pointing and Justification Explanation)模型,检测结果如图所示。

           

    图 17:P-JX模型检测结果

    模型利用「attention」机制得到图像像素的重要性,并据此选择输出的视觉图,同时,数据集中的人类解释文本对模型的预测作出纠正,这样模型可以同时生成可视化的解释,亦能通过文字说明描述关注的原因。例如在上图中,对问题「Is this a healthy meal」,针对图片,关注到了热狗,因此回答「No」,图片的注意力热力图给出了可视化的解释,同时文本亦生成了对应的文本解释。作者认为,利用多模态的信息可以更好地帮助模型训练,同时引入人类的知识纠错有利于提高模型的可解释性。

     

    由于类别之间只有通过细微局部的差异才能够被区分出来,因此「fine-grained」分类具有挑战性,在Xiao et. al. 的[21]中,作者将视觉「attention」应用到「fine-grained」分类问题中,尽管注意力的单元不是出于可解释性的目的而训练的,但它们可以直接揭示信息在网络种的传播地图,可以作为一种解释。由于细粒度特征不适用bounding box标注,因此该文章采用「弱监督学习」的知识来解决这一问题。

     

    该文章中整合了3种attention模型:「bottom-up」(提供候选者patch),「object-level top-down」(certain object相关patch),和「part-level top-down 」(定位具有分辨能力的parts),将其结合起来训练「domain-specific深度网络」。

                 

    图 18:Domain-specific深度网络结构示意图

    domain-specific深度网络结构示意图如图 18 所示:实现细粒度图像分类需要先看到物体,然后看到它最容易判别的部分。通过bottom-up生成候选patches,这个步骤会提供多尺度,多视角的原始图像。

    如果object很小,那么大多数的patches都是背景,因此需要top-down的方法来过滤掉这些噪声patches,选择出相关性比较高的patches。寻找前景物体和物体的部分分别采用「object-level」和「part-level」两个过程,二者由于接受的patch不同,使其功能和优势也不同。在object-level中对产生的patches选出包含基本类别对象的patch,滤掉背景。part-level分类器专门对包含有判别力的局部特征进行处理。

    有的patch被两个分类器同时使用,但该部分代表不同的特征,将每幅图片的object-level和part-level的分数相加,得到最终的分数,即分类结果。

     

    (2)分离表示法

     

    分离表示目标是用高低维度的含义不同的独立特征表示样本,过去的许多方法提供了解决该问题的思路,例如PCA、ICA、NMF等。深度网络同样提供了处理这类问题的方法。

     

    Chen et. al. 在加州大学伯克利分校的工作[22]曾被 OpenAI 评为 2016 年 AI 领域的五大突破之一,在 GAN 家族的发展历史上具有里程碑式的意义。对于大多数深度学习模型而言,其学习到的特征往往以复杂的方式在数据空间中耦合在一起。如果可以对学习到的特征进行解耦,就可以得到可解释性更好的编码。对于原始的 GAN 模型而言,生成器的输入为连续的噪声输入,无法直观地将输入的维度与具体的数据中的语义特征相对应,即无法得到可解释的数据表征。为此,InfoGAN 的作者以无监督的方式将 GAN 的输入解耦为两部分:

    (1)不可压缩的 z,该部分不存在可以被显式理解的语义信息。

    (2)可解释的隐变量 c,该部分包含我们关心的语义特征(如 MNIST 数据集中数字的倾斜程度、笔画的粗细),与生成的数据之间具有高相关性(即二者之间的互信息越大越好)。

          

     

    若 c 对生成数据 G(z,c)的可解释性强,则 c 与 G(z,c) 之间的交互信息较大。为了实现这一目标,作者向原始 GAN 的目标函数中加入了一个互信息正则化项,得到了如下所示的目标函数:

          

     

    然而,在计算新引入的正则项过程中,模型难以对后验分布 P(C|X) 进行采样和估计。因此,作者采用变分推断的方法,通过变分分布 Q(C|X) 逼近 P(C|X)。最终,InfoGAN 被定义为了如下所示的带有变分互信息正则化项和超参数 λ 的 minmax 博弈:

           

    图 19:InfoGAN 框架示意图

    张拳石团队的[23]一文中,提出了一种名为「解释图」的图模型,旨在揭示预训练的 CNN 中隐藏的知识层次。

     

    在目标分类和目标检测等任务中,端到端的「黑盒」CNN模型取得了优异的效果,但是对于其包含丰富隐藏模式的卷积层编码,仍然缺乏合理的解释,要对 CNN 的卷积编码进行解释,需要解决以下问题:

    • CNN 的每个卷积核记忆了多少种模式?

    • 哪些模式会被共同激活,用来描述同一个目标部分?

    • 两个模式之间的空间关系如何?

            

    图 20:解释图结构示意图

     

    解释图结构示意图表示了隐藏在 CNN 卷积层中的知识层次。预训练 CNN 中的每个卷积核可能被不同的目标部分激活。本文提出的方法是以一种无监督的方式将不同的模式从每个卷积核中解耦出来,从而使得知识表征更为清晰。

     

    具体而言,解释图中的各层对应于 CNN 中不同的卷积层。解释图的每层拥有多个节点,它们被用来表示所有候选部分的模式,从而总结对应的卷积层中隐藏于无序特征图中的知识,图中的边被用来连接相邻层的节点,从而编码它们对某些部分的共同激活逻辑和空间关系。将一张给定的图像输入给 CNN,解释图应该输出:(1)某节点是否被激活(2)某节点在特征图中对应部分的位置。由于解释图学习到了卷积编码中的通用知识,因此可以将卷积层中的知识迁移到其它任务中。

             

    图 21:解释图中各部分模式之间的空间关系和共同激活关系图

     

    解释图中各部分模式之间的空间关系和共同激活关系。高层模式将噪声滤除并对低层模式进行解耦。从另一个层面上来说,可以将低层模式是做高层模式的组成部分。

     

    另外,张拳石[24]认为在传统的CNN中,一个高层过滤器可能会描述一个混合的模式,例如过滤器可能被猫的头部和腿部同时激活。这种高卷积层的复杂表示会降低网络的可解释性。针对此类问题,作者将过滤器的激活与否交由某个部分控制,以达到更好的可解释性,通过这种方式,可以明确的识别出CNN中哪些对象部分被记忆下来进行分类,而不会产生歧义。

    模型通过对高卷积层的每个filter计算loss,种loss降低了类间激活的熵和神经激活的空间分布的熵,每个filter必须编码一个单独的对象部分,并且过滤器必须由对象的单个部分来激活,而不是重复地出现在不同的对象区域。

           

    图 22

    Hinton的胶囊网络 [25],是当年的又一里程碑式著作。作者通过对CNN的研究发现CNN存在以下问题:1) CNN只关注要检测的目标是否存在,而不关注这些组件之间的位置和相对的空间关系;2) CNN对不具备旋转不变性,学习不到3D空间信息;3)神经网络一般需要学习大量案例,训练成本高。为了解决这些问题,作者提出了「胶囊网络」,使网络在减少训练成本的情况下,具备更好的表达能力和解释能力。

     

    「胶囊(Capsule)」可以表示为一组神经元向量,用向量的长度表示物体「存在概率」,再将其压缩以保证属性不变,用向量的方向表示物体的「属性」,例如位置,大小,角度,形态,速度,反光度,颜色,表面的质感等。

    和传统的CNN相比,胶囊网络的不同之处在于计算单位不同,传统神经网络以单个神经元作为单位,capsule以一组神经元作为单位。相同之处在于,CNN中神经元与神经元之间的连接,capsNet中capsule与capsule之间的连接,都是通过对输入进行加权的方式操作。

    胶囊网络在计算的过程中主要分为四步:

    • 输入向量ui的W矩阵乘法;

    • 输入向量ui的标量权重c;

    • 加权输入向量的总和;

    • 向量到向量的非线性变换。

    网络结构如下图所示,其中「ReLI Conv1」是常规卷积层;「PrimaryCaps」构建了32个channel的capsules,得到6*6*8的输出;「DigiCaps」对前面1152个capules进行传播与「routing」更新,输入是1152个capsules,输出是10个capules,表示10个数字类别,最后用这10个capules去做分类。

           

    图23:胶囊网络网络结构示意图

    (3)生成解释法

     

    除了上文介绍的诸多方法外,在模型训练的同时,可以设计神经网络模型,令其产生能被人类理解的证据,生成解释的过程也可被显式地定义为模型训练的一部分。

     

    Wagner 2019[26]首次实现了图像级别的细粒度解释。文中提出的「FGVis」,避免了图像的可解释方法中对抗证据的问题,传统方法采用添加正则项的方式缓解,但由于引入了超参,人为的控制导致无法生成更加可信的,细粒度的解释。文中的FGVis方法基于提出的「对抗防御(Adversarial Defense)」方法,通过过滤可能导致对抗证据的样本梯度,从而避免这个问题。该方法并不基于任何模型或样本,而是一种优化方法,并单独对生成解释图像中的每个像素优化,从而得到细粒度的图像解释,检测示意图如图[24] 所示。

           

    图24:FGVis检测结果示意图

     

    另一个视觉的例子来自Antol et. 的Vqa[27],文章将视觉问题的「回答任务(Vqa)」定义为给定一个图像和一个开放式的、关于图像的自然语言问题,并提出了Vqa的「基准」和「回答方法」,同时还开发了一个两通道的视觉图像加语言问题回答模型。

    文章首先对Vqa任务所需的数据集进行采集和分析,然后使用baselines为「基准」对「方法」进行评估,基准满足4个条件:1) 随机,2)答案先验, 3)问题先验,4)最近邻。

    「方法」使用文中开发的两个视觉(图像)通道加语言(问题)通道通过多层感知机结合的模型,结构图如图所示。视觉图像通道利用 VGGNet最后一层隐藏层的激活作为 4096- dim 图像嵌入,语言问题通道使用三种方法嵌入:

    • 构建「词袋问题(BoW Q)」;

    • 「LSTM Q 」具有一个隐藏层的lstm对1024维的问题进行嵌入;

    • 「deeper LSTM Q」。最终使用softmax方法输出K个可能的答案。

           

    图 25:deeper LSTM Q + norm I 结构图

     

    三. 总结

    为了使深度学习模型对用户而言更加「透明」,研究人员近年来从「可解释性」和「完整性」这两个角度出发,对深度学习模型得到预测、决策结果的工作原理和深度学习模型本身的内部结构和数学操作进行了解释。至今,可解释性机器学习领域的研究人员在「网络对于数据的处理过程」、「网络对于数据的表征」,以及「如何构建能够生成自我解释的深度学习系统」三个层次上均取得了可喜的进展:

    • 就网络工作过程而言,研究人员通过设计线性代理模型、决策树模型等于原始模型性能相当,但具有更强可解释性的模型来解释原始模型;此外,研究人员还开发出了显著性图、CAM 等方法将于预测和决策最相关的原始数据与计算过程可视化,给出一种对深度学习模型的工作机制十分直观的解释。

    • 就数据表征而言,现有的机器学习解释方法涉及「基于层的解释」、「基于神经元的解释」、「基于表征向量的解释」三个研究方向,分别从网络层的设计、网络参数规模、神经元的功能等方面探究了影响深度学习模型性能的重要因素。

    • 就自我解释的深度学习系统而言,目前研究者们从注意力机制、表征分离、解释生成等方面展开了研究,在「视觉-语言」多模态任务中实现了对模型工作机制的可视化,并且基于 InfoGAN、胶囊网络等技术将对学习有不同影响表征分离开来,实现了对数据表征的细粒度控制。

     

    然而,现有的对机器学习模型的解释方法仍然存在诸多不足,面临着以下重大的挑战:

    • 现有的可解释性研究往往针对「任务目标」和「完整性」其中的一个方向展开,然而较少关注如何将不同的模型解释技术合并起来,构建更为强大的模型揭示方法。

    • 缺乏对于解释方法的度量标准,无法通过更加严谨的方式衡量对模型的解释结果。

    • 现有的解释方法往往针对单一模型,模型无关的解释方法效果仍有待进一步提升。

    • 对无监督、自监督方法的解释工作仍然存在巨大的探索空间。

    推荐阅读

    [0] Gilpin, Leilani H., et al. "Explaining explanations: An overview of interpretability of machine learning." 2018 IEEE 5th International Conference on data science and advanced analytics (DSAA). IEEE, 2018.

    [1] Ribeiro, Marco Tulio, Sameer Singh, and Carlos Guestrin. "'Why should I trust you?' Explaining the predictions of any classifier." Proceedings of the 22nd ACM SIGKDD international conference on knowledge discovery and data mining. 2016.

    [2] Sato, Makoto, and Hiroshi Tsukimoto. "Rule extraction from neural networks via decision tree induction." IJCNN'01. International Joint Conference on Neural Networks. Proceedings (Cat. No. 01CH37222). Vol. 3. IEEE, 2001.

    [3] Zilke, Jan Ruben, Eneldo Loza Mencía, and Frederik Janssen. "Deepred–rule extraction from deep neural networks." International Conference on Discovery Science. Springer, Cham, 2016.

    [4] Schmitz, Gregor PJ, Chris Aldrich, and Francois S. Gouws. "ANN-DT: an algorithm for extraction of decision trees from artificial neural networks." IEEE Transactions on Neural Networks 10.6 (1999): 1392-1401.

    [5] Gallant, Stephen I. "Connectionist expert systems." Communications of the ACM 31.2 (1988): 152-169.

    [6] Tsukimoto, Hiroshi. "Extracting rules from trained neural networks." IEEE Transactions on Neural networks 11.2 (2000): 377-389.

    [7] Towell, Geoffrey G., and Jude W. Shavlik. "Extracting refined rules from knowledge-based neural networks." Machine learning 13.1 (1993): 71-101.

    [8] Zeiler, Matthew D., and Rob Fergus. "Visualizing and understanding convolutional networks." European conference on computer vision. Springer, Cham, 2014.

    [9] Ancona, Marco, et al. "Towards better understanding of gradient-based attribution methods for deep neural networks." arXiv preprint arXiv:1711.06104 (2017).

    [10] Bach, Sebastian, et al. "On pixel-wise explanations for non-linear classifier decisions by layer-wise relevance propagation." PloS one 10.7 (2015): e0130140.

    [11] Shrikumar, Avanti, Peyton Greenside, and Anshul Kundaje. "Learning important features through propagating activation differences." arXiv preprint arXiv:1704.02685 (2017).

    [12] Kim, Been, et al. "Tcav: Relative concept importance testing with linear concept activation vectors." (2018).

    [13] Yosinski, Jason, et al. "How transferable are features in deep neural networks?." Advances in neural information processing systems. 2014.

    [14] Simonyan, Karen, Andrea Vedaldi, and Andrew Zisserman. "Deep inside convolutional networks: Visualising image classification models and saliency maps." arXiv preprint arXiv:1312.6034 (2013).

    [15] Neyshabur, Behnam, Hanie Sedghi, and Chiyuan Zhang. "What is being transferred in transfer learning?." Advances in Neural Information Processing Systems 33 (2020).

    [16] Zhou, Bolei, et al. "Object detectors emerge in deep scene cnns." arXiv preprint arXiv:1412.6856 (2014).

    [17] Bau, David, et al. "Network disp: Quantifying interpretability of deep visual representations." Proceedings of the IEEE conference on computer vision and pattern recognition. 2017.

    [18] Frankle, Jonathan, and Michael Carbin. "The lottery ticket hypothesis: Training pruned neural networks." arXiv preprint arXiv:1803.03635 2 (2018).

    [19] Zhang, Quan-shi, and Song-Chun Zhu. "Visual interpretability for deep learning: a survey." Frontiers of Information Technology & Electronic Engineering 19.1 (2018): 27-39.

    [20] Huk Park, Dong, et al. "Multimodal explanations: Justifying decisions and pointing to the evidence." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.

    [21] Xiao, Tianjun, et al. "The application of two-level attention models in deep convolutional neural network for fine-grained image classification." Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.

    [22] Chen, Xi, et al. "Infogan: Interpretable representation learning by information maximizing generative adversarial nets." Advances in neural information processing systems. 2016.

    [23] Zhang, Quanshi, et al. "Interpreting cnn knowledge via an explanatory graph." arXiv preprint arXiv:1708.01785 (2017).

    [24] Zhang, Quanshi, Ying Nian Wu, and Song-Chun Zhu. "Interpretable convolutional neural networks." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.

    [25] Sabour, Sara, Nicholas Frosst, and Geoffrey E. Hinton. "Dynamic routing between capsules." Advances in neural information processing systems. 2017.

    [26] Wagner, Jorg, et al. "Interpretable and fine-grained visual explanations for convolutional neural networks." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.

    [27] Antol, Stanislaw, et al. "Vqa: Visual question answering." Proceedings of the IEEE international conference on computer vision. 2015.

          

     关注Github,持续更新最新论文


    点击左下角“阅读原文”,加入【知源月旦】团队!

    展开全文
  • 1.pycharm选择python解释器;2.pycharm配置环境变量
  • 模型可解释性-LIME

    千次阅读 多人点赞 2020-09-08 19:25:24
    模型可解释性 LIME的原理 LIME的想法很简单, 我们希望使用简单的模型来对复杂的模型进行解释. 这里简单的模型可以是线性模型, 因为我们可以通过查看线性模型的系数大小来对模型进行解释. 在这里,LIME只会对每一...
  • 机器学习的可解释性(总结)

    千次阅读 2020-07-18 01:08:38
    目录背景什么是可解释性可解释性的分类ante-hoc可解释性post-hoc可解释性可解释性与安全性展望解释方法设计解释方法评估 论文 机器学习模型可解释性方法、应用与安全研究综述. 背景 近年来,机器学习在计算机视觉、...
  • 模型可解释性-SHAPE

    千次阅读 2020-09-09 20:37:33
    SHAP, 全称是 SHapley Additive exPlanation,属于模型事后解释的方法,可以对复杂机器学习模型进行解释,其中各个单词的意义为: SHapley:代表对每个样本中的每一个特征变量,都计算出它的 Shapley Value。 ...
  • 编译执行和解释执行

    万次阅读 多人点赞 2021-01-06 21:52:20
    一、编译和解释 编译:将源代码一次性转换成目标代码的过程 类似英语中的全文翻译。 执行编译过程的程序叫做编译器。 解释:将源代码逐条转换成目标代码同时逐条运行的过程。 类似英语中的同声传译。 ...
  • 简单代码解释

    2012-03-17 15:49:18
    简单代码解释
  • C++ 编写一个解释

    千次阅读 2019-11-21 20:12:02
    进入解释器 $ ./autumn eval 然后你就可以在控制台编写一些命令或函数啦! 3 一些酷炫的例子 3.1 map let map = fn ( arr , f ) { let iter = fn ( arr , accumulated ) { if ...
  • 汇编、编译与解释

    千次阅读 2019-02-24 16:33:51
    B和C都是先将源程序翻译成中间代码,再对中间代码进行解释执行,它们的区别在于中间代码的级别,在C方式下,解释程序采用的中间代码更接近于机器语言。 编译与解释的比较 (1) 效率。编译比解释方式可能取得更...
  • Tcl解释器-8.5 for windows

    热门讨论 2012-08-31 21:32:46
    ActiveTcl8.5.12.0.296033-win32-ix86-threaded.exe tcl最新版解释
  • 解释器模式-Interpreter Pattern

    千次阅读 2019-07-04 16:27:34
    解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向 对象语言构成一个简单的语言解释器。在某些情况下,为了更好地描述某一些特定类型的问 题,我们可以创建一种新的语言,这种语言...
  • arduino GCode_Interpreterdc G代码解释器 也可以当做c语言g代码解释器参考 不坑爹
  • 人工智能算法的可解释性方法研究

    千次阅读 2020-06-07 16:24:07
    同时,这篇文章将可解释性方法按进行的过程划分为如下三类:在建模之前的可解释性方法、建立本身具备可解释性的模型和建模后使用可解释性方法对模型作出解释,下面对这三大类方法分别作介绍。 三、建模前:在建模...
  • 解释图神经网络:5个GNN解释方法

    千次阅读 2021-06-17 08:58:17
    解释人工智能又向前迈进了一步,以及为什么现有的解释方法难以适用于gnn 可解释性是深度学习中的一个大课题,因为它可以实现更可靠和可信的预测。 由于图结构的不规则性,现有的解释方法难以适用于图神经网络。 ...
  • 解释器模式这个模式和前面的访问者模式比较像,当然,我说的比较像是难的比较像,以及使用率是真的比较低,基本上没有使用的场景,访问者模式还有点使用场景,解释器模式,我们又不写解释器,这玩意 JVM 都帮我们...
  • 深度学习可解释性学习资料汇总

    千次阅读 2020-02-27 20:08:37
    一、著名的大佬课题组 ...按照可解释性方法进行的过程进行划分的话,大概可以划分为三个大类: 在建模之前的可解释性方法,建立本身具备可解释性的模型,在建模之后使用可解释性方法对模型作出解释。 【网址】 ...
  • 解释的机器学习

    千次阅读 2019-07-02 17:34:34
    在机器学习的场景中,可解释性(interpretability)就表示模型能够使用人类可认知的说法进行解释和呈现。[Finale Doshi-Velez] 来自:可解释的机器学习 机器学习模型被许多人称为“黑盒”。这意味着虽然...
  • 模型可解释

    千次阅读 多人点赞 2019-03-06 23:27:02
    模型可解释性:使用机器学习可解释性工具解释心脏病原因 四部分内容: 简介 数据 模型 解释 总结 1. 介绍 纵观机器学习的所有应用,当使用黑盒子模型去进行重要疾病诊断时总是难以让人信服。如果诊断模型的输出是...
  • 机器学习7 -- 可解释学习

    万次阅读 2020-09-01 10:45:03
    1 为什么需要可解释学习 可解释学习是一个比较大的话题,本文也仅仅是抛砖引玉。深度学习大多数情况下,我们关注的都是模型的指标,如ACC、F1、Bleu等,一般较少关注模型的可解释性。深度学习模型是一个黑盒,模型...
  • CNN可视化/可解释

    万次阅读 多人点赞 2019-05-21 19:10:56
    guided Grad-CAM: Grad-CAM 还可以与其他经典的模型解释方法如导向反向传播相结合,得到更细致的解释。 扩展 其实无论是CAM还是Grad-CAM,除了用来对模型的预测结果作解释外,还有一个非常重要的功能:就是...
  • LIME算法:模型的可解释性(代码实现)

    千次阅读 多人点赞 2020-05-12 15:45:24
    ” Explaining the Predictions of Any Classifier》中介绍的局部可解释性模型算法。该算法主要是用在文本类与图像类的模型中。 1.算法主要用途 在算法建模过程中,我们一般会用测试集的准确率与召回率衡量一个模型...
  • JAVA设计模式--解释器模式

    万次阅读 2017-02-25 14:51:01
    目录 一、什么是解释器模式 ...给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 所谓“语言”,指的是使用规定格式和文法的一类字符组合。 ...
  • 本文长度为10000字,建议阅读10+分钟对于信任和管理我们的人工智能“合作伙伴”,可解释AI则至关重要。目录1.1 可解释的重要性1.2 可解释性的范围1.2.1. 算法透明度(Alg...
  • 设计模式 | 解释器模式及典型应用

    千次阅读 2019-01-13 23:47:54
    微信原文:设计模式 | 解释器模式及典型应用 博客原文:设计模式 | 解释器模式及典型应用 本文主要介绍解释器模式,在日常开发中,解释器模式的使用频率比较低 解释器模式 解释器模式(Interpreter Pattern):定义一...
  • 计算机网络名词解释

    万次阅读 多人点赞 2019-01-05 17:53:05
    名词解释 ADSL Asymmetric Digital Subscriber Line,即非对称数字用户线,用数字技术对现有模拟电话用户线进行改造,使其能够承载宽带数字业务。 AN Acess Network,即接入网,用来把用户接入...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,109,977
精华内容 1,243,990
关键字:

解释