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

        可解释性机器学习可以被分成两大类,第一大类叫做局部的解释,第二大类叫做全局的 解释,如图 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.xdnf.cn/news/1535720.html

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

相关文章

浅谈Spring Cloud:认识微服务

SpringCloud就是分布式微服务架构的一站式解决方案,是微服务架构落地的多种技术的集合。 目录 微服务远程调用 Eureka注册中心 搭建Eureka Server 注册组件 服务拉取 当各种各样的服务越来越多,拆分的也越来越细,此时就会出现一个服务集…

速通GPT:《Improving Language Understanding by Generative Pre-Training》全文解读

文章目录 速通GPT系列几个重要概念1、微调的具体做法2、任务感知输入变换3、判别式训练模型 Abstract概括分析和观点1. 自然语言理解中的数据问题2. 生成预训练和监督微调的结合3. 任务感知输入变换4. 模型的强大性能 Introduction概括分析和观点1. 自然语言理解的挑战在于对标…

Android源码导入Android Studio

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 前言 需要先把 Android 源码编译一遍 然后执行下面指令就可以导入android源码了 关于 Android 源码编译可以参考这篇文章【LineageOS源码下载和编译&#xf…

【检索快,IEEE独立出版】2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024)

大会简介: 2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024)将于2024年9月27日至29日在中国延吉举行。会议由长春理工大学主办,延边大学、长春理工大学电子信息工程学院、长春理工大学计算机科学技术学院、长春理工大学…

蛋白质原子坐标平移、旋转、缩放示例代码

在处理蛋白质结构时,常常需要对原子的坐标进行几何变换,如平移、旋转和缩放。这些变换在模拟、可视化和结构比较中非常有用。 以下是对这些操作的介绍以及示例代码。 1. 平移 (Translation) 平移就是将所有原子的坐标沿着某个方向进行移动。平移可以通过向每个原子的坐标加…

解锁4款专业的中英翻译工具,让你畅行双语世界。

中英翻译工具在国际化交流越来越频繁的今天还是起着巨大的作用的,它能够促进很多知识的传播和共享,也能够便利大家的工作,学习和生活。今天我就要跟大家分享4个我一直都在用的中英翻译工具。 1、福昕中英翻译网站 直达:https://f…

LeetCode 第415场周赛个人题解

目录 Q1. 数字小镇中的捣蛋鬼 原题链接 思路分析 AC代码 Q2. 最高乘法得分 原题链接 思路分析 AC代码 Q3. 形成目标字符串需要的最少字符串数 I 原题链接 思路分析 AC代码 Q4. 形成目标字符串需要的最少字符串数 II 原题链接 思路分析 AC代码 Q1. 数字小镇中的捣…

数据库全攻略:从类型到安全与优化

数据库全攻略:从类型到安全与优化 一、数据库类型大观 (一)关系型数据库 关系型数据库以表格形式存储数据,通过 SQL 语言进行操作,数据之间存在关联关系,适合复杂查询和事务处理。常见的关系型数据库有 …

springboot瑜伽课约课小程序-计算机毕业设计源码87936

摘要 本文详细阐述了一个基于SpringBoot框架的瑜伽课约课小程序的设计与实现过程。随着现代生活节奏的加快,越来越多的人开始关注身心健康,瑜伽作为一种集健身、放松、减压于一体的运动方式,受到了广泛的欢迎。为满足瑜伽爱好者的课程预约和学…

Ubuntu 22.04.5 LTS 发布下载 - 现代化的企业与开源 Linux

Ubuntu 22.04.5 LTS (Jammy Jellyfish) - 现代化的企业与开源 Linux Ubuntu 22.04.5 发布,配备 Linux 内核 6.8 请访问原文链接:https://sysin.org/blog/ubuntu-2204/,查看最新版。原创作品,转载请保留出处。 作者主页&#xf…

Recyclerview实现滑动居中缩放菜单

最近项目中需要的一个滑动菜单效果:要求当前居中选项放大、滑动时有缩放效果、点击两边的选项滑动到屏幕中央、停止滑动选项停留在屏幕中间(类似viewPager的效果),为了直观,先上最终实现效果图: 大体思路: Recyclerview item头尾添加空数据,让第一个和最后一个item也能…

c++题目_【模板】最小生成树Prim

题目描述 这是一道最小生成树Prim的模板题,本题与【模板】最小生成树Kruskal,仅仅只有nn和mm的大小不同 给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入 第一行输入2个正整数n,mn,m,代表…

数据可视化pyecharts——数据分析(柱状图、折线图、饼图)

安装 首先确保已经安装了pyecharts库,如果没有,可以通过pip install pyecharts进行安装。 柱状图 从pyecharts.charts导入Bar,从pyecharts导入options。准备数据(如类别数据x_data和对应的数值数据y_data)。创建Bar对…

解决win11 使用wsl工具,不能使用systemctl

使用systemctl命令出现报错: System has not been booted with systemd as init system (PID 1). Can‘t operate. 默认情况下并不启用 systemd,而是使用了其他轻量级的初始化系统(SysV init初始化系统)。这导致一些需要 system…

力扣最热一百题——螺旋矩阵

目录 题目链接:54. 螺旋矩阵 - 力扣(LeetCode) 题目描述 示例 提示: 解法一:模拟 1. 边界初始化 2. 循环遍历矩阵 3. 从左到右遍历上边界 4. 从上到下遍历右边界 5. 从右到左遍历下边界 6. 从下到上遍历左边…

【GPU版】Windows下PyTorch入门深度学习环境安装与配置

如果电脑有NVIDIA GPU显卡,看【GPU版本】;否则,看【CPU版本】 聊聊PyTorch和Tensorflow 它们都是python的库/包 pip3是给python3使用的,由于现在用的python基本上都是3以上版本,所以pip和pip3没有区别 聊聊Anacond…

DNC Server 开发

每个工厂里面的机床系统类型各式各样,程序传输DNC 功能可以提高技术人员的工作效率,怎样兼容每种系统是个难题,如果是做工厂信息化的工程师也是比较头疼,下面给出一个解决方案,抛砖引玉 我们可以使用一种框架 满足插件式开发,主程序负责管理插件,具体的上传 下载 删除 查询等具…

第108集《大佛顶首楞严经》

请打开讲义241面。我们讲到嗅报,鼻根当中嗅的功能。 本根发相 发明二相:一者通闻,被诸恶气,熏极心扰。二者塞闻,气掩不通,闷绝于地。 以鼻根造业到无间地狱以后,他有二种受苦的相状&#xf…

Java数据结构——Set和Map

掌握 Map/Set 及实际实现类 HashMap/TreeMap/HashSet/TreeSet 的使用。掌握 TreeMap 和 TreeSet 背后的数据结构搜索树的原理和简单实现。掌握 HashMap 和 HashSet 背后的数据结构哈希表的原理和简单实现。 目录 1.搜索 1.1概念及场景 1.2模型 2. Map的使用 2.1关于Map的说…

【5G QoS】详解5G QoS端到端工作机制

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。 博客内容主要围绕…