可解释性机器学习中的局部解释

news2024/9/27 7:20:22

        可解释性机器学习可以被分成两大类,第一大类叫做局部的解释,第二大类叫做全局的 解释,如图 1 所示。局部的解释是,比如有一个图像分类器,输入一张图片,它会判断出 是一只猫,机器要回答问题是为什么它觉得这张图片是一只猫。根据某一张图片来回答问题, 这个叫做局部的解释。还有另外一类,称为全局解释。其指还没有给分类器任何图片,而直接 问对一个分类器而言,什么样的图片叫做猫。我们并不是针对任何一张特定的图片来进行分 析,我们是想要知道有一个模型它里面有一些参数的时候,对这些参数而言什么样的东西叫 作一只猫。

图1 可解释性机器学习的两大类别

        接下来我们先来看第一大类,第一大类是为什么你觉得一张图片是一只猫。再具体一点 些,给机器一张图片,它知道图片是一只猫的时候,到底是这个图片里面的什么东西让模型觉 得它是一只猫。或者讲的更宽泛一点,假设模型的输入叫做x,这个x可能是一张图片,可 能是一段文字,可能是一段音频,可能是一段视频,可能是一段时间序列的数据。其可以拆成 多个部分,x可以拆成x1到xn,这些部分对应起来可能是像素,也可能是文字,也可能是音 频的频谱,也可能是视频的每一帧,也可能是时间序列的每一个时间点。在这些部分里面,哪 一个对于机器做出最终的决断是最重要的?

如何知道一个部分的重要性呢?基本的原则是我们把所有的部分都拿出来,把每一个部 分做改造或者是删除。如果我们改造或删除某一个部分以后,网络的输出有了巨大的变化,就 知道这个部分没它不行,它很重要。我们再使用图像举例,想要知道一个图像里每一个区域的 重要性的时候,就将这个图片输入到网络里。接下来在这个图片里面不同的位置放上灰色的 方块,当这个方块放在不同的地方的时候,网络会输出不同的结果。比如一只狗的图片,当我 们把灰色的方块移动到狗的脸上的时候,我们网络就不觉得它看到一只狗;但如果把灰色的 方块放在狗的四周,这个时候机器就觉得它看到的仍然是狗。所以模型就知道它不是看到球, 觉得它看到狗,也不是看到地板、墙壁,才觉得看到的是狗,而是真的看到这个狗的面部。所 以这个是最简单的,知道每一个部分的重要性的方法。

        还有一个更进阶的方法,即计算梯度,如图 2所示。具体来讲,假设我们有一张图片, 我们把它写为x1 到xN。这边的每一个xi 代表一个像素。接下来我们去计算这张图片的损 失,损失用e来表示。这个e是把这张图片输入到模型中,模型输出的结果与正确答案的差 距(我们用交叉熵表示)。其数值越大,就代表现在识别的结果越差。如何知道每一个像素的 重要性呢?我们可以将每一个像素做一个小小的变化,加上一个∆x,再输入到模型里面看一 下损失会有什么样的变化。如果把某一个像素做小小的变化以后,模型输出的损失就有巨大 的变化,就代表这个像素对图像的识别是重要的,反之如果加了∆x,这个∆e趋近于零,就 代表这个位置,这个像素对于图像识别而言可能是不重要的。所以我们可以用∆e和∆x的 比值来代表这一个像素xN 的重要性。而事实上比值这一项,就是把xN 对你的损失做偏微 分,也就是 ∂e ∂x 。那这个比值越大,就代表xN 越重要。当我们把每一个图片里面每一个像素 它的这个比值都算出来后,我们就得到一个图,这个图就叫做显著图(saliencymap)。图18.2 中,上面是原始图片,下面黑色有亮白色点的就是显著图,越亮白色的点,就代表这个像素越 重要。举例来说,给机器看图 2中水牛的图片,它并不是看到草地觉得它看到牛,也不是 看到竹子觉得它看到牛,而是真的知道牛在这个位置。它觉得判断这张图片是什么样的类别, 对它而言最重要的是出现在这个位置的像素,也就是牛的位置。所以这个技术叫做显著图。

图 2 计算梯度进行重要性评判

        再举一个真实的案例,有一个基准语料库叫做PASCALVOC2007,里面有各式各样的 物体,有人、狗、猫、马、飞机等等。机器要学习做图像分类,当它看到图中这张图片它知道 是马,如图 3 所示。如果我们看显著图的话,就会发现机器觉得这张图片是马的原因,是 因为图片的左下角有一串英文,这串英文是来自于一个网站,这个网站里面有很多马的图片, 左下角都有一样的英文,所以机器看到左下角这一行英文就知道是马,它根本不需要学习马 是长什么样子。所以在这个真实的应用中,在基准语料库中,类似的状况也是会出现的。所以 这告诉我们,可解释性AI是一个很重要的技术,否则我们不知道机器是怎么判断的,我们就 不知道它是不是在作弊,或者是不是有什么问题。

图3 模型误判的显著图解释

        其实可以把可解释性机器学习的显著图画得更好,可以使用一种叫做SmoothGrad的方 法,如图 4 所示。这张图片是羚羊,所以我们希望机器会把它主要的精力集中在瞪羚身上。 那如果我们用刚才我们讲的方法直接画显著图的话,得到的结果可能是中间图的样子。其确 实在羚羊附近有比较多亮的点,但是在其他地方也有一些噪声让人看起来有点不舒服,所以 就有了SmoothGrad 这个方法。SmoothGrad 会让你的这个显著图,上面的噪声比较少,在这 个例子中就是多数的亮点都集中在羚羊身上。那SmoothGrad 这个方法是怎么做呢?其实就 是在图片上面加上各种不同的噪音,加不同的噪声就是不同的图片了。接着在每一张图片上 面都去计算显著图,所以有加100种噪声,就有100张显著图,平均起来就得到SmoothGrad 的结果。 

图4  显著图的SmoothGrad 方法 

        当然梯度并不是万能的,梯度并不完全能够反映一个部分的重要性,举一个例子以供参 考,如图 5 所示。横轴代表的是大象鼻子的长度,纵轴代表这个生物是大象的可能性。我 们都知道大象的特征是长鼻子,所以鼻子越长,这个生物是大象的可能性就越大。但是当鼻子 长到一定程度以后,再长鼻子也不会让这个生物变得更像大象了。所以生物鼻子的长度跟它 是大象的可能性的关系,也许一开始在长度比较短的时候随着长度越来越长,这个生物是大 象的可能性越来越大。但是当鼻子的长度长到一个程度以后,就算是更长,也不会变得更像大象。这个时候如果计算鼻子长度对是大象可能性的偏微分的话,在这个地方得到的偏微分可 能会趋近于0。所以如果仅仅看梯度,仅仅看显著图,可能会得到一个结论是鼻子的长度对是 不是大象这件事情是不重要的,鼻子的长度不是判断是否为大象的一个指标,因为鼻子的长 度的变化,对是大象的可能性的变化是趋近于0的。但是事实上,我们知道鼻子的长度是一 个很重要的指标,鼻子越长,这个生物是大象的可能性就越大。所以仅仅看梯度和偏微分的结 果,可能没有办法完全告诉我们一个部分的重要性。所以有其他的方法被提出,比如积分梯度 (integrated gradients)等等。

图5 梯度饱和问题 

        刚才我们是看网络输入的哪些部分是比较重要的,那接下来我们要问的下一个问题是当 我们给网络一个输入的时候,它到底是如何去处理这个输入的,并得到最终的答案的。这里也 有不同的方法,第一个方法最直觉的,就是人眼去看,看看网络到底是怎么处理这个输入的。 我们举一个语音的例子,如图 6所示。这个网络的功能是输入一小段声音,输出这个声音 是属于哪一个韵母,属于哪一个音标等等。假设该网络第一层有100个神经元,第二层也有 100 个神经元。那第一层和第二层的输出就可以看作是100 维的向量。通过这些分析这些向 量,也许我们就可以知道一个网络里面发生了什么事。但是100维的向量不容易分析,所以 我们可以把100维的向量把它降到二维,比如使用PCA或者t-SNE等等方法。把100维降 到二维以后就可以画在图上,就可以直接可视化它。这个时候我们就可以看到,这个网络到底 是怎么处理这个输入的,它到底是怎么把这个输入变成最后的输出的。

图6 网络处理输入的方法一

        再举一个语音的例子,那这个例子来自于一篇Hinton 的文章。首先我们把模型的输入, 就是声音特征,也就是MFCC拿出来把它降到二维,画在二维平面上,如图 7所示。这 个图上每一个点代表一小段声音信号,每一个颜色代表了某一个讲话的人。其实我们输入给 网络的数据有很多句子是重复的,比如A、B、C这三个人都说了Howareyou 这句话,很 多人说了一样的句子。但从声音特征上,就算是不同的人念同样的句子,我们从声音特征上 并不能分别出来不同的人。所以有的人就会觉得语音识别太难了,因为不同的人说同样的话, 声音特征都是一样的。但是当我们把网络拿出来可视化时候,结果就不一样了。右边的图是 第8个隐藏层的输出,我们会发现每一条代表同样内容的某一个句子,所以不同人说同样的 内容在MFCC上看不出来,但是它通过了8层的网络之后,机器知道说这些话是同样的内容 了,所以最后模型就可以得到精确的分类结果。

图7 语音中的网络特征

        除了用人眼观察可视化以外,还有另外一个技术叫做探针(probing)。简单来说,就是 用探针去插入这个网络,看看会发生什么事。举例来说,如图 8所示。假设我们想要知道 BERT 的某一层到底学到了什么东西,除了用肉眼观察以外,你还可以训练一个探针,其实就 是分类器。这个分类器是要根据一个特征向量决定现在这个词汇的词性,我们需要将BERT 的词嵌入输入到POS的分类器里面,这样就训练一个POS的分类器。这个分类器试图根据 这些嵌入,决定它们分别来自于哪一个词性的词汇,如果这个POS分类器的正确率高,就代 表说这些嵌入中有很多词性的信息;如果它正确率低,就代表这些嵌入中没有词性的信息。这 样我们就可以知道BERT的某一层到底学到了什么东西,这个方法就叫做探针。 

图8 探针方法的BERT实例化

        另一个角度,如果学习一个命名实体识别(NamedEntityRecognition,NER)的分类器, 这个分类器的输入是BERT的嵌入,输出是这个词汇是不是一个命名实体,属于人名还是地 名,还是任何专有名词等等。我们透过这个NER分类器的正确率就可以知道这些特征里面,有没有名字、地址和人名的信息等等。但是使用这个技术的时候,我们需要小心使用的分类器 的强度。假设分类器的正确率很低,真的一定保证它的输入的这些特征,即BERT的嵌入没 有我们要分类的信息吗?不一定的,因为有可能就是分类器训练的太差了,比如学习率没有调 整好等等。所以用探针模型的时候不要太快下结论,有时候我们得到一些结论只是因为分类 器没有训练好。当然也有可能训练得太好导致分类器的正确率没有办法当做评断的依据。

        其实探针也不一定要是分类器,这边再举一个语音领域中语音合成的例子,如图 9所 示。训练一个语音合成的模型,一般是先输入一段文字产生对应的声音信号,这个声音信号是 由一段一段的声音片段组成的,每一个声音片段都是由一段一段的音素组成的,我们这里输 入“你好”。对于语音合成的模型不是输入一段文字,而是将网络输出的嵌入作为输入,再去输 出一段声音信号。首先训练了一个音素的分类器,如图 9右侧所示,我们把某一个层的输 出输入到TTS 的模型里面来训练这个TTS模型。我们训练的目标是希望TTS模型可以去 复现网络的输入,即原是的声音信号。有人可能会问,我们训练这个TTS产生原来的声音信 号,那有什么意义呢?这个模型的输出和输入一模一样,有什么意义呢?这里有趣的是,假设 这个网络做的事情就是把讲述者的信息去掉,那对于这个TTS模型而言,这边第2层的输出 没有任何讲述者的信息。那它无论怎么努力都无法还原讲述者的特征。比如,虽然内容说的是 “你好”,是一个男生的声音,可能通过几个层以后,输入到TTS的模型这个产生出来的声音 会变成也是“你好”的内容,但是完全听不出来是谁讲的,所以它真的学到去抹去讲述者的特征 只保留内容的部分。

图9 探针方法的在语音领域的案例

        下面是两个真实的例子,如图 10所示,上图有一个5层的BiLSTM模型,它将声音 信息做为输入,输出是文字,这是一个语音识别的模型。给它一段女生的声音信息作为输入, 同时再给它听另外一个男生讲不一样的内容。接下来我们把这些声音输入到网络里面,再把 这个网络的嵌入用TTS的模型去还原回原来的声音。我们会发现第一层的声音信息有一点失 真,但基本上跟原来是差不多的。但通过了5层的BiLSTM以后就听不出来是谁讲的,模型 把两个人的声音都变成是一样的。另一个例子,输入的声音是有钢琴噪声的。网络是前面几 层使用CNN,后面几层使用BiLSTM。信号通过第一层CNN以后还是钢琴的声音,但是通 过了第一层BiLSTM 以后,钢琴的声音就变得很小了,也就是钢琴的噪声被过滤了,前面的 CNN 没有起到过滤噪声的工作。以上就是可解释机器学习中的局部解释。 

图10 通过语音合成分析模型中的隐表征 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2137788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微分方程人口模型以及Matlab代码实现

马尔萨斯模型 模型假设 1.设x(t)表示t时刻的人口数,且x(t)连续可微。 2.人口的增长率r是常数(增长率出生率-死亡率)。 3.人口数量的变化是封闭的,即没有人口迁移,且人口数量的增加与减少只取决于人口中个体的生育和死亡,且每一个体都具有同样的生育能力与死亡率。…

Parallels Desktop 20 for Mac中文版发布了?会哪些新功能

Parallels Desktop 20 for Mac 正式发布,完全支持 macOS Sequoia 和 Windows 11 24H2,并且在企业版中引入了全新的管理门户。 据介绍,新版本针对 Windows、macOS 和 Linux 虚拟机进行了大量更新,最大的亮点是全新推出的 Parallels…

项目升级必备!TS装饰器:简化代码、增加功能的利器 | TypeScript入门指南07

嘿,朋友!听说过TS里的装饰器没?就像给代码加了个‘魔法贴’,轻轻一点,功能升级,结构清晰。这篇文章,咱们聊聊这背后的魔法是怎么一回事! ts 入门指南系列 Ts vs Js 谁适合前端开发&a…

【笔记】位运算

文章目录 位运算简介与运算&或运算|异或运算^证明 取反~左移<<右移>> 位运算技巧判断奇偶性求出x二进制的第i位将二进制的第i位设置成1将二进制的第i位设置成0判断是否为2的若干次方获取x的最低位的1用lowbit运算统计1的个数例题 位运算简介 位运算&#xff1…

【吊打面试官系列-Redis面试题】使用过 Redis 分布式锁么,它是什么回事?

大家好&#xff0c;我是锋哥。今天分享关于【使用过 Redis 分布式锁么&#xff0c;它是什么回事&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 使用过 Redis 分布式锁么&#xff0c;它是什么回事&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资…

对目录的操作、获取文件信息

目录 一、目录操作 二、获取文件的相关信息 1、演示获取文件的相关信息 2、注意事项和细节 一、目录操作 需求&#xff1a; 1&#xff09;创建一级目录 d://aaa 2&#xff09;创建多级目录 d://bbb//ccc 3&#xff09;删除目录 d://aaa和d://bbb//ccc import os# 1&am…

自定义AI模型的调优、部署与评测

为了让大语言模型的AI能力更贴近业务需求&#xff0c;本文详细介绍了在阿里云百炼创建自定义模型的最佳实践。即便不清楚大模型的技术细节&#xff0c;您也能按照本篇的操作指引创建一个有效的自定义模型&#xff0c;从而轻松地为业务场景添加大模型服务能力。 自定义模型概述…

深度学习数据集交通类常见图像分类、目标检测、分割图像数据集(深度学习数据集 - 交通类解决方案)

深度学习数据集 - 交通类解决方案 引言&#xff1a; 随着自动驾驶技术的发展以及智能交通系统的普及&#xff0c;对于高质量、多样化的交通数据集的需求日益增长。我们提供一系列精心准备的数据集&#xff0c;旨在帮助研究人员和工程师解决实际问题&#xff0c;推动技术创新。…

arcgisPro修改要素XY容差

1、在arcgisPro中XY容差的默认值为1个毫米&#xff0c;及0.001米。为了更精细的数据&#xff0c;需要提高这个精度&#xff0c;如何提高呢&#xff1f; 2、如果直接在数据库下新建要素类&#xff0c;容差只能调至0.0002米。所以&#xff0c;需要在数据库下新建要素数据集。 3…

机房运维工作的核心:确保系统稳定与高效

在当今的信息化时代&#xff0c;运维工作成为了确保企业信息系统稳定运行的关键环节。运维团队肩负着监控系统性能、处理故障、优化系统配置等多重任务&#xff0c;以确保平台的持续、高效运行。本文将围绕运维工作的几个核心方面展开讨论&#xff0c;并以监控易一体化运维软件…

【Linux下的cpp】编译调试(gcc、g++、gdb)

【Linux下的cpp】编译调试&#xff08;gcc、g、gdb&#xff09; 文章目录 【Linux下的cpp】编译调试&#xff08;gcc、g、gdb&#xff09;简述gcc、g、gdb编译过程g 编译参数命令行编译演练1、直接编译2、生成库文件并编译链接静态库并生成可执行文件链接动态库生成可执行文件 …

vue vueUse利用useInfiniteScroll API 实现虚拟滚动

前言 中文网地址:开始使用 | VueUse 中文网 官网地址:VueUse 元素的无限滚动。 useInfiniteScroll 详细解析地址 效果 组件封装

7-14 电话聊天狂人(map)

输入样例: 4 13005711862 13588625832 13505711862 13088625832 13588625832 18087925832 15005713862 13588625832输出样例: 13588625832 3 代码&#xff1a; #include<iostream> #include<map> using namespace std; map<string,int>mp; string ansstr;…

华为OD机试 - 推荐多样性(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

nginx负载均衡(轮询与权重)

文章目录 1. nginx的介绍2. nginx使用场景3. nginx在windows的下载与安装4. nginx的简单使用5. nginx进行轮询测试6. nginx进行权重测试7. 总结 1. nginx的介绍 Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也是一个开源的、…

PASCAL VOC数据集语义分割:解决标签值错误与数据增强不同步问题的优化方案

创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; 错误原因分析&#xff1a; Assertion错误&#xff1a; 错误信息显示 Assertion t > 0 && t < n_classes failed.&#xff0c;这意味着在计算损失时&#xff0c;标签t的值不…

第四天旅游线路预览——从换乘中心到喀纳斯湖

第四天&#xff1a;从贾登峪到喀纳斯风景区入口&#xff0c;晚上住宿贾登峪&#xff1b; 换乘中心有4 路车&#xff0c;喀纳斯①号车&#xff0c;去喀纳斯湖&#xff0c;路程时长约5分钟&#xff1b; 将上面的的行程安排进行动态展示&#xff0c;具体步骤见”Google earth stu…

【devops】devops-git之github使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

继承和多态(详解)

&#x1f423;继承和多态 &#x1f31e; 继承&#x1f33b;1.引入&#x1f33b;2.访问父类成员&#x1f335;2.1 子类访问父类中的成员变量&#x1f335;2.2 子类访问父类中的成员方法 &#x1f33b;3.super关键字&#x1f33b;4.子类构造方法&#x1f33b;5.super和this&#…

java spring validation 自动、手动校验

目录 一、自动校验 第一步&#xff0c;导入依赖 第二步&#xff0c;统一异常处理 第三步&#xff0c;定义接口接收实体DTO 第四步&#xff0c;在Contoller接口中增加参数注解Validated 第五步&#xff0c;测试结果 二、手动校验 第一步&#xff0c;校验工具类 第二步&…