在前面的学习之中,我们已经学习了很多的模型,它能够针对特定的任务,接受我们的输入并产生目标的输出。但我们并不满足于此,我们甚至希望机器告诉我们,它是如何得到这个答案的,而这就是可解释的机器学习。

Why we need Explainable ML

首先我们要明确,即使我们训练出来的模型能够得到一个正确的输出,但是这并不代表它真正学习到了内核的规律所在,因此我们总是希望能够知道为什么机器给出这个答案,在一些特定的场景也是如此:

  • 例如将机器学习用于医疗诊断,那我们希望机器做出来的决策是有根据的
  • 将机器学习用于法律,那我们也希望看到机器学习做出判定背后的原因,是否存在歧视问题等

而且如果我们能够拥有可解释性的机器学习,那么在模型的效果不好的时候,我们便能够知道是哪部分出现了问题,可直接调整解决。

而对于可解释性的机器学习,它的评价标准来说一直很难定夺,因为一个理由的可解释是因人而异的

可解释性VSPowerful

对比一下线性模型、深度学习网络、决策树这三个模型的特点:

  • 线性模型的可解释性比较强,我们能够通过各个权重和偏置来简单地理解线性模型之间各个变量的关系;但是线性模型其拟合未知函数的能力较弱
  • 深度学习网络的能力很强大,能够完成非常多复杂的任务,但是它的可解释性比较差, 我们很难理解其内部的含义
  • 单颗决策树的可解释性很强,并且决策森林的拟合能力也是很好的。但是如果决策森林中决策树的数目很多的话,其可解释性也一样会变差

因此并没有模型能够简单地完美解决拟合能力和可解释性的问题

Explainable ML

假设模型是根据一张图片做出其所属的分类,那么可解释性的机器学习大致可以分为两大类:

  • Local Explanation:它要回答的问题是机器为什么会觉得这张图片是属于这一类
  • Global Explanation:它要回答的问题是你觉得这一类的图片应该长什么样子,这个类别的模型比较特殊,没有针对某张图片而是针对整个类。

Local Explanation:Explain the Decision

这个类别的模型,我们可以把问题转换成更具体一点:是输入中的哪一个部分让机器觉得它属于这个类别呢?例如对于输入x来说可以写成多个组成部分\(\{x_1,...,x_n,...,x_N\}\),例如在图片中每一个就代表一个像素,在句子中每一个就代表一个词汇等等。那么如果我们希望找到哪个对结果影响最大的组成部分,可行的办法是逐个改变或删除组成部分,看看在改变哪一个的时候机器的输出会发生变化,例如下图的例子:

上面代表在每一张图片中使用一个灰色方块去不断遮挡某一部分,当遮挡到蓝色部分的时候就会发现机器无法做出正确预测

那么还有一个更进阶的想法叫做Saliency Map,即将输入表示成一个向量\(\{x_1,...,x_n,...,x_N\}\),那么该输入对应的输出与真正的输出之间就可以计算损失Loss。那么具体的想法就是不断尝试改变每一个分量的值为\(x_n=x_n+\Delta x\),那么相应的Loss也变化,因此我们可以从Loss变换的程度来看这个变量对于结果的影响性有多大,即:

\[\vert \frac{\Delta L}{\Delta x_n} \vert=\vert \frac{\partial L}{\partial x_n}\vert
\]

相当于梯度的值越大,该值对于结果的影响力就越大,该变量就越重要,如下图:

但这个方法也存在一定的局限性, 或者说在某些场景中表现也不是很好,例如下图的中间图片,虽然它将羚羊的大致轮廓表达了出来,但是另外区域的杂讯还是特别的多;因此我们可以用SmoothGrad来尝试解决,得到右边的图,可以看到效果更好:

那么SmoothGrad的做法是为原始的图片重复多次,每次加入随机产生的杂讯来影响每一个像素点,然后对于每一次得到的图像都画Saliency Map,最后再将其平均起来即可

而上述的通过梯度计算然后画出对应Saliency Map的方法也存在一定的局限性,就是在梯度上产生了问题,例如下面的例子为某种生物鼻子的长度的变化所引起该生物是否是大象的概率的变化:

可以看到在鼻子长度较大的点处,此处因为是大象的概率已经很高了,因此其梯度很小,那我们如果直接计算其梯度的话就会得到结果说鼻子的长度对是否是大象的概率没有影响,这显然是不符合逻辑的!

那么还有另外一个能够认识到模型各个模块相关功能的办法,具体可以用一个语音辨认的例子来解释:假设我们当前的语音辨识模型有很多层,那我们训练一个模型将向量转换为语音的输出,那么就可以对每一层输出的Embedding都放入这个转换为语音的模型中得到输出,我们再听每一层对应的语音输出,就可以明确每一层对声音的处理起到了什么作用

Global Explaination:Explain the Whole Model

对于这个类别的可解释性模型来说,它并不是告诉我们一个特定的样本长什么样子、属于什么分类,而是根据模型内的参数来理解说为什么某一个类的样本会长这个样子,可以简单理解为我们要机器告诉我们它心理想象的猫长什么样子

下面通过一个图像检测的例子来说明我们对于这种问题的解决思路。

对于图中的每一个filter,可以看成它是对上一层所输出的图像的某一块区域的监测,如果监测到它希望得到的信息,那么它的值就会比较大。但是现在Global Explaination的任务不是针对特定样本而言,也就是说我们没有样本来生成各层的图像。而为了知道每一层的每一个filter它想要监测什么内容,我们可以来创造图像,即如上图所示,我们创造一个图片对应的向量,使得它输出进入能够使得我们当前观察的这个filter最大,即

\[X^*=argmax_X \sum_i\sum_j a_{ij}
\]

那么我们再来观测\(X^*\)对应的图像,我们就可以知道这个filter它想检测什么样的类型了,如下图:

例如上图就有的filter检测横条纹、竖条纹等等等等。

那么上述的思路,我们能否将其直接用于输出层呢?例如我们直接让:

\[X^*=argmax_X~y_i
\]

也就是说我们找一张图片,让这个图片通过机器后输出某一个类别的概率最大,那么有可能实现吗?实际上效果很差!例如在手写数字的识别例子中:

为什么会这样呢?这其中的解释大概可以说成:因为机器它不一定是看到某个数字的样子才会输出对应的类别,它可能真的没有学习到这个规律,只是学习到从一堆杂讯中寻找到它认为是某个类别的信息。那么如果真的要用这个方法,需要根据我们对于图像的深层次理解加上一大堆的假设,并且好好调整参数才可能得到,如下图:

那么为了避开上述这么多的约束呢,我们还有一个办法就是引入生成器来帮助。即我们假设已经通过很多的图片训练完成了一个生成器(用GAN、VAE等),然后我们将生成器接到原分类模型之前,即:

那现在我们的目标就转换成:

\[z^*=argmax_z ~y_i
\]

即找到一个z的向量,生成图片之后能够使得y对该图片的分类的信心分数最大。那么我们要得到可解释性的东西,就再将向量\(z^*\)转换成图片即可,即:

\[X^*=G(z^*)
\]

这样得到的效果可能是很好的。

【机器学习】李宏毅——Explainable ML(可解释性的机器学习)的更多相关文章

  1. 预见未来丨机器学习:未来十年研究热点 量子机器学习(Quantum ML) 量子计算机利用量子相干和量子纠缠等效应来处理信息

    微软研究院AI头条 https://mp.weixin.qq.com/s/SAz5eiSOLhsdz7nlSJ1xdA 预见未来丨机器学习:未来十年研究热点 机器学习组 微软研究院AI头条 昨天 编者 ...

  2. 手把手教你集成华为机器学习服务(ML Kit)人脸检测功能

    当给自己拍一张美美的自拍照时,却发现照片中自己的脸不够瘦.眼睛不够大.表情不够丰富可爱-如果此时能够一键美颜瘦脸并且添加可爱的贴纸的话,是不是很棒? 当家里的小孩观看iPad屏幕时间过长或者眼睛离屏幕 ...

  3. ML(1)——机器学习简述

    简述 机器学习是人工智能的一种实现方式:深度学习是一种实现机器学习的技术,或者说是一种特殊的机器学习方法,可以说广义上的机器学习也包括了深度学习,三者的关系如下图所示: 从判别垃圾邮件到无人驾驶技术, ...

  4. 机器学习00:如何通过Python入门机器学习

    我们都知道机器学习是一门综合性极强的研究课题,对数学知识要求很高.因此,对于非学术研究专业的程序员,如果希望能入门机器学习,最好的方向还是从实践触发. 我了解到Python的生态对入门机器学习很有帮助 ...

  5. Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计

    Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7392408.h ...

  6. 100天搞定机器学习|Day19-20 加州理工学院公开课:机器学习与数据挖掘

    前情回顾 机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机 ...

  7. ML.NET---.NET下的机器学习引擎(简介)

    ML.NET 是一个跨平台的开源机器学习框架,它可以使 .NET 开发人员更容易的开展机器学习工作. ML.NET 允许 .NET 开发人员开发自己的模型,即使没有机器学习的开发经验,也可以很容易的将 ...

  8. ML:吴恩达 机器学习 课程笔记(Week1~2)

    吴恩达(Andrew Ng)机器学习课程:课程主页 由于博客编辑器有些不顺手,所有的课程笔记将全部以手写照片形式上传.有机会将在之后上传课程中各个ML算法实现的Octave版本. Linear Reg ...

  9. 机器学习 AI 谷歌ML Kit 与苹果Core ML

    概述 移动端所说的AI,通常是指"机器学习". 定义:机器学习其实就是研究计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构使之不断改善自身.从实践的意义 ...

  10. 使用ML.NET进行自定义机器学习

    ML.NET是Microsoft最近发布的用于机器学习的开源,跨平台,代码优先的框架.尽管对我们来说是一个新的框架,但该框架的根源是Microsoft Research,并且在过去十年中已被许多内部团 ...

随机推荐

  1. go使用JWT进行跨域认证最全教学

    JWT前言 JWT是JSON Web Token的缩写.JWT本身没有定义任何技术实现,它只是定义了一种基于Token的会话管理的规则,涵盖Token需要包含的标准内容和Token的生成过程. JWT ...

  2. cf1082 A. Vasya and Book

    中文题意: 思路:我们先看看能不能直接从x翻到y,abs(y-x)%d==0,可以就直接输出abs(y-x)/d咯,不行的话之后有2种操作 1.先翻回到第一页,从第一页看看能不能范到y,不能的话翻到最 ...

  3. MISC 网刃杯2022

    ​ MISC 玩坏的winxp 难度系数:4.0 题目描述:小敏的电脑Windows XP Professional不小心被玩坏了,里边有重要的东西,你能帮帮她吗? 利用whihex挂载 查看分区1 ...

  4. 齐博x2自建流媒体RTMP直播服务器

    这里只讲解大家最容易配置的Windows版,测试环境是2008版服务器及WIN7下载下面的软件,解压在任何目录都可,然后双击"启动.bat"即可http://down.php168 ...

  5. Codeforces 1682 D Circular Spanning Tree

    题意 1-n排列,构成一个圆:1-n每个点有个值0或者1,0代表点的度为偶数,1代表点的度为计数:询问能否构成一棵树,树的连边在圆内不会相交,在圆边上可以相交,可以则输出方案. 提示 1. 首先考虑什 ...

  6. MassTransit | .NET 分布式应用框架

    引言 A free, open-source distributed application framework for .NET. 一个免费.开源的.NET 分布式应用框架. -- MassTran ...

  7. Oracle数据库PLSQL编程和存储过程

    一.PLSQL编程 1.1.使用PLSQL实现 Hello world! 1 -- Created on 2022/8/22 by ADMINISTRATOR 2 declare 3 -- 这是申明变 ...

  8. Druid SQL注入防御模块技术浅析

    官方参考: https://www.bookstack.cn/read/Druid/ffdd9118e6208531.md 前置知识 什么是Druid? Druid是一个高效的数据查询系统,主要解决的 ...

  9. Dropout原理分析

    工作流程 dropout用于解决过拟合,通过在每个batch中删除某些节点(cell)进行训练,从而提高模型训练的效果. 通过随机化一个伯努利分布,然后于输入y进行乘法,将对应位置的cell置零.然后 ...

  10. SIP会话发起协议 - 先知道是什么(一)

    少年,思无邪,最最动人. 协议概述 SIP会话发起协议是VoIP技术中最常用的协议之一.它是一种应用层协议,与其它应用层协议协同工作,通过Internet控制多媒体通信会话. SIP采用SDP(会话描 ...