• Explainable Machine Learning
  • Local Explanation
  • Global Explanation
  • LIME
  • Decision Tree

十四、Explainable Machine Learning(可解释机器学习)
  机器不仅要告诉我们它知道,而且要告诉我们它为什么知道。

(一)介绍
  explanation分为两大类:
  (1)Local Explanation
  今天已经给机器一张图片,它要告诉我们为什么它觉得这张图片里面有一只猫。
  (2)Global Explanation
  不是针对某一张图片来进行解释,而是要它告诉我们在它的心里这张图片长什么样子。

  举例:公司用机器来协助判读履历–看的是能力还是性别?
  举例:用机器来协助判断罪犯是否可以假释–根据具体事证还是肤色?
  模型诊断:到底机器学到了什么?不能只看正确率。
  通过模型诊断可以提供我们如何更进一步精进机器学习的方向。

  一些model本身很容易被解释,对这些model而言不需要提出新的explanation的技术,比如linear model(从weight得知feature的信息),但是不是很powerful。Deep network很难被解释,但是却比linear model更加powerful,所以要想办法让deep network变得可解释的。
  那有没有可以被解释并且又powerful的model?
  或许decision tree(决策树)可以做到:

  但是一个tree也可以是很难被解释的:

(二)Local Explanation:Explain the Decision
(为什么觉得这张图片是“cat”?)
基本idea:
  现在有一个object xxx,object中有很多小的components:{x1,...,xn,...,xN}\begin{Bmatrix} x_1,...,x_n,...,x_N \end{Bmatrix}{x1​,...,xn​,...,xN​​},如果是image的话,那么一个component指的就是一个pixel、一个segment等,如果指的是text的话,那么component就是a word。
  目标:我们希望机器在这个components里面哪一个component对它判断出现在的结果是重要的,哪些是不重要的。
  idea:把某一个component移除或者修改,观察对机器的判断造成的影响大小,如果产生较大的影响,这个component就是重要的component。
  
  举例:有一张图片,丢到neural network里面,结果是一只博美狗,接下来,在这个图片上贴上一个灰色的斑块(贴在任意位置),如果贴在这只狗的脸上,机器就会产生歧义的结果:

  这个灰色斑块(gray box)的大小是至关重要的。
  
  举例:假设现在有一张图片,这个图片的pixel是{x1,...,xn,...,xN}\begin{Bmatrix} x_1,...,x_n,...,x_N \end{Bmatrix}{x1​,...,xn​,...,xN​​},把这张图片丢到image的辨识系统中,它会output一个答案,比如把狗狗的照片丢到image辨识系统,它会告诉我们这是一只狗,image辨识系统的输出是一个向量,distribution,它会给每一个向量都给一个几率,即yky_kyk​:the prob of the predicted class of the model。
  假如现在辨识这张图片为狗狗,如下图:

  我们把狗的几率拿出来,写作yky_kyk​,我们想知道为什么对机器而言这张图片是一只狗—做法:我们把input中的某个pixel加上一个小扰动,观察这个小扰动对我们的yky_kyk​造成多大影响:

  如果这个扰动对yky_kyk​造成很大影响,就说明这个pixel是很重要的。
  如何计算这个扰动对outputyky_kyk​的影响?即计算∣ΔyΔx∣\begin{vmatrix} \frac{\Delta y}{\Delta x} \end{vmatrix}∣∣​ΔxΔy​​∣∣​,就是它的gradient(取绝对值):

  通过这个方法可以画出Saliency Map(显著图),这个告诉我们在image上面哪一些pixel是比较重要的,每一个亮点的亮度就代表把xnx_nxn​对yky_kyk​做偏微分的绝对值,亮度越大,就代表这个绝对值越大。

  使用gradient判断哪些pixel重要,哪些不重要的方法有很多不同的变形:

  • Grad-CAM(https://arxiv.org/abs/1610.02391 )
  • SmoothGrad(https://arxiv.org/abs/1706.03825)
  • Layer-wise Relevance Propagation(https://arxiv.org/abs/1604.00825)
  • Guided Backpropagation(https://arxiv.org/abs/1412.6806)
      
      以上使用gradient的方法来告诉我们哪一个pixel(feature)是否重要,这个方法有个潜在的问题是gradient saturation(梯度饱和)
      举例:假设横轴代表image中的生物的鼻子长度,纵轴代表classifier判断这只生物是大象的几率有多少,我们都知道大象是长鼻子,那么鼻子长到一定的程度我们就可以很肯定地说它就是一只大象,到这个程度之后,就算再变长,这个几率也并不会再增加,在这个之后地区域计算出来的偏微分可能是0:

      这就会对结果有一定的影响,因为鼻子的长度对我们判断它是不是大象是一个很重要的关键指标,如果在这个区域发现这个指标的变化对结果没有影响,就会误判为不重要的指标。
      解决问题:(1)Integrated gradient(https://arxiv.org/abs/1611.02639)
      (2)DeepLIFT(https://arxiv.org/abs/1704.02685)
      
    Attack Interpretation:
      这个Interpretation是有可能被attack的,即让机器做出错误的explanation。用以下两种方法来画Saliency Map,标出图片的哪些地方是重要的:

      但是可以加上一些“noise”,加上后classifier的结果也没有不同,但是interpretation的 结果变了。
      
    Saliency Map带来的帮助:
      现在learn一个classifier ,可以判断输入的图片的神奇宝贝还是数码宝贝,有一组database(左宝可梦,右数码宝贝):

      testing images:

      通过neural network train了之后,training accuracy为98.9%,testing accuracy为98.4%,准确率很高。

      随机sample一些数码宝贝和宝可梦,看它们的Saliency Map什么样子:


      得到的结果发现重要的pixel并没有落在生物的本体上,而是落在生物的边缘部分,原因是:所有神奇宝贝的图片都是PNG,而Digimon的大部分图片都是JPEG,PNG图片的背景是黑的,机器看背景就能分辨出这两种生物,实际上什么都没有学到。
      
      
    (三)Global Explanation:Explain the Whole Model
    (在机器心里“cat”长什么样子?)
    Activation Maximization(激活最大化):
      找一张图片让某一个filter的output,或者某一个neural的output可以被最大化。
      举例来说,现在有一个手写数字辨识的network,把一张图片丢进去,它告诉你这个图片是0-9的哪一个数字。接下来可以让机器画出一个数字,也就是机器心里理想的这个数字长什么样子。

      做法:把某一个output的neuron拿出来(假设对应数字5),写作yiy_iyi​,我们可以找一个input xxx,它可以使yiy_iyi​越大越好:

      画出的结果大概为:

      但是只是找一个图片让机器觉得这张图片属于某一个class,并不能让我们知道机器心里理想的数字到底长什么样,所以需要加一些额外的限制
      举例来说,现在不只是找一张图片可以使某个class的输出越大越好,同时我们让这个图片的内容看起来像一个数字:
      定义一个function R(x)R(x)R(x),把xxx带入这个function,function会吐出一个数值,这个数值代表这个xxx看起来多像一个数字(digit),R(x)R(x)R(x)定义的方法有很多,比如把xxx里面所有pixel都加起来,即R(x)=−∑i,j∣xi,j∣R(x) = -\sum_{i,j}|x_{i,j}|R(x)=−∑i,j​∣xi,j​∣,得到的结果为:

      也许这个function R(x)R(x)R(x)并不是最好的function。
      
      下面是机器画的一些图,必须加上很复杂的function,告诉机器说什么样的图片看起来才像是正常的现实生活中会出现的图片:

“Regularization” from Generator:
  以上都是通过”人想出来的function“告诉机器什么样的东西看起来像是一张正常的image,现在更好的方法,我们可以训练比如说Image Generator,事先收集好一大堆图片,就可以教机器怎么去产生图片。
  训练Image Generator:给Image Generator看一个low-dim vector,它就会把这个低纬度的向量变成一张图片,这个低纬度的向量就是从某一个定好的distribution sample出来的,比如Gaussian Distribution,或者Normal Distribution(正态分布)。那怎么根据这些训练资料训练出Image Generator?可以使用GAN或者VAE等等。可以把Image Generator想成function GGG,
x=G(z)x = G(z)x=G(z):

  那怎么把这个Image Generator用来限制我们要机器画出来的图片呢?把上面生成的image xxx丢到Image Classifier里面,输出一个yyy。原来对机器来说某一个class iii 的理想图片长什么样子,就是找一张image让yiy_iyi​的值越大越好;加上Image Generator后,我们本来要找一个最好的xxx,现在是要找一个最好的zzz(使用gradient descent),把得到的理想的z∗z^\astz∗丢到Image Generator里面画出x∗x^\astx∗:

  Image Generator提供一个线索:Image Generator画出来的image都像是正常的结果,但是机器随便找一个xxx,它找出来的x∗x^\astx∗可能完全不是人可以解释的东西,但是这个Image Generator产生出来的都是人看得懂的image,所以现在可以把你的搜寻范围缩减在只能够找zzz,这个zzz丢到Image Generator通常可以产生比较好的image。
  在很多实例中得到的最好的结果大概如下图,机器画出它”心里“的蚂蚁、修道院、火山等:

  
  
(四) 用一个machine learning的model去解释另一个ML的model
(有一些model比较容易被解释,使用一个可以被解释的model去解释(模拟/模仿)另外一个不能被解释的model)
  用一个可以被解释的model去模仿另外一个不能被解释的model的行为:
  假设现在有一个black box(可能是neural network等),现在要训练另外一个model,跟black box有同样的行为,即把一堆{x1,x2,...,xN}\begin{Bmatrix} x^1,x^2,...,x^N \end{Bmatrix}{x1,x2,...,xN​}丢到black box中,看看它会output什么样的{y1,y2,...,yN}\begin{Bmatrix} y^1,y^2,...,y^N \end{Bmatrix}{y1,y2,...,yN​};接下来把同样的{x1,x2,...,xN}\begin{Bmatrix} x^1,x^2,...,x^N \end{Bmatrix}{x1,x2,...,xN​}丢到想要训练的可解释的model中,训练的目标是希望output和black box的output越接近越好:

  假设蓝色的model可以完全模仿black box的行为,我们再去分析蓝色盒子看看machine学到了什么。
  假设蓝色的盒子是linear model,问题:linear model没办法完全模仿neural network;但是linear model可以模仿局部的区域。
  
Local Interpretable Model -Agnostic Explanations(LIME)(局部可解释模型-不可知解释):

1、介绍LIME

  假设要分析的对象是一个black box,它的输入是一维的xxx,输出是一维的yyy,xxx和yyy之间有比较复杂的关系,让linear modl模仿black model一部分区域的行为。
  LIME的步骤:
  (1)要决定想要分析的data point;
  (2)在想要分析的data point附近做一下sample(如下图,蓝色的点);
  (3)计算把上面的data point带到black box后的输出(如下图,红色的点);
  (4)有了这些点后去训练一个linear的model(或者其它可解释的model),让linear model去模仿black box在这个区域的行为;
  (5)分析linear model;

  在LIME的第二步中需要在感兴趣的点的附近sample,但是这个”附近“的不同,结果也会不同。这个方法不是单纯在某个点计算gradient,现在是在这个点的周围去sample,再用一条linear 的线去拟合这些sample,那么得到的结论会和直接算gradient得到的结论不同。
  假设这个“附近”非常宽,那么得到的interpret的结果就会截然不同:

2、分析LIME
  
  举例:使用LIME解释一个image classifier:
  (1)一张想被解释的图片(LIME通常备用再local explanation上),解释这张图片为什么classifier说它是一只树蛙:

  (2)sample the nearby:随机拿掉图片的一些pixel,或者是把这张图片加上一些杂讯;(不同的方法做sample得到的结果很不一样)。
  - 把这张图片做一下segment:切成一小个一小个区块

  以这些小切块为单位做接下来的操作:通常的做法是随机丢掉一些segment,产生不同的image,这些image就是sample:

  然后把sample的结果丢到黑盒子里面去,然后就可以计算这些图片丢进去之后黑盒子得到的结果是多少。

  (3)找一个可以解释的model去fit这个输入和输出的关系,即得到“黑盒子在做什么事情”。但是如果直接使用linear model,输入图片,可能很难得到想要的结果,比如,如果把LIME用在影像处理上,一般是先做一个Feature Extract(特征提取),即这些pixel表示成一些比较低维的向量,然后把这些向量丢到linear model中,希望它可以fit原来的model:

  怎么把一张图片变成一个向量?
  常用做法:一个向量的维度是M,M就是segment的数量,向量中的每个dimension的值要么是1,要么是0,0就是这个向量对应的segment被丢掉,1就是这个向量对应的segment存在:

  (4)解释你学习的model
  训练linear model,linear model可能是:

  从这个segment的weight就可以知道这个segment的重要性,假设某个segment的weight趋近于0,就说明这个segment对判断图片是不是“青蛙”而言不是重要的;假设某个segment的weight是正的,就是说这个segment对判断图片是不是“青蛙”而言是有正向的影响的;假设某个segment的weight是负的,就是说看到这个segment会告诉我们这张图片不是“青蛙”;

  
  举例:给一张图片丢进Image Classifier中,使用LIME方法,判断哪里是和服,哪里是实验袍,得到的结果为:

  
  
(五)可解释的model:Decision Tree
  使用Decision Tree来模拟一个黑盒子,会遇到什么样的问题?
  只要把Decision Tree的深度无限变深,它最终一定会和黑盒子的行为一模一样,但是问题是我们并不希望这个tree 太大,希望它的深度是有限制的。
  假设这个黑盒子的参数是θ\thetaθ,黑盒子是neural network,根据这个黑盒子我们训练出的Decision Tree可以模拟这个黑盒子的行为,Decision Tree的参数为TθT_\thetaTθ​:

  定义一个function O(Tθ)O(T_\theta)O(Tθ​),这个function,它的输出是一个Decision Tree,输出是一个数值,这个function代表的是这个Decision Tree有多复杂(如何定义这个复杂度是自定义的,比如这个Decision Tree的平均的深度)。我们希望O(Tθ)O(T_\theta)O(Tθ​)不要太大。
  
  怎么让O(Tθ)O(T_\theta)O(Tθ​)不要太大?
  一个有趣的想法:Tree regularization
  训练一个特别的network,这个network在被训练时已经知道它要被Decision Tree分析,而且是容易被分析的。一般训练network时,定义某个Loss Function,使用gradient descent找一个θ\thetaθ可以minimize loss function,但是现在并不满足minimize loss function,又加了另外一项–Regularization term,即λO(Tθ)\lambda O(T_\theta)λO(Tθ​),这项代表了如果我们把这个θ\thetaθ用Decision Tree去模仿以后,这个Decision Tree的复杂度。

  我们希望用gradient descent找到参数θ\thetaθ,这个参数转成Decision Tree,再计算它的复杂程度,这个复杂程度也要越小越好。
  但是λO(Tθ)\lambda O(T_\theta)λO(Tθ​)这一项无法微分,那么怎么做gradient descent呢?
  文献https://arxiv.org/pdf/1711.06178.pdf提出,训练一个network,把这个network吃另外一个network的参数,然后输出一个数值,这个数值代表我们把这个数值转为Decision Tree以后,这个Decision Tree的平均深度有多少。然后就可以把O(Tθ)O(T_\theta)O(Tθ​)换成那个network。这个network就是自己随便sample一些neural network,然后把这些network都转成Decision Tree,然后把Decision Tree的平均深度算出来,就有了network的input和output,然后去训练一个network怎么去计算一个tree 的depth,再把network靠在O(Tθ)O(T_\theta)O(Tθ​),这个network就是可微分的,就可以使用gradient descent。
  
  
  


本文是对blibli上李宏毅机器学习2020的总结,如有侵权会立马删除。

机器学习之八(读书笔记)相关推荐

  1. 机器学习实战---读书笔记: 第11章 使用Apriori算法进行关联分析---2---从频繁项集中挖掘关联规则

    #!/usr/bin/env python # encoding: utf-8''' <<机器学习实战>> 读书笔记 第11章 使用Apriori算法进行关联分析---从频繁项 ...

  2. 《百面机器学习》读书笔记(十一)-强化学习

    全部笔记的汇总贴:<百面机器学习>-读书笔记汇总 强化学习近年来在机器学习领域越来越火,也受到了越来越多人的关注.强化学习是一个20世纪80年代兴起的,受行为心理学启发而来的一个机器学习领 ...

  3. 《百面机器学习》读书笔记(十四)-人工智能的热门应用

    全部笔记的汇总贴:<百面机器学习>-读书笔记汇总 这一章较之前的十三章略微有些区别,这一章直接将知识点进行罗列出来,而不再是以问题的方式来导出,可能也是应为这一章的内容比较浅显易懂吧. 一 ...

  4. 机器学习实战读书笔记(2)决策树

    信息熵是什么? 1. 信息论之父 C. E. Shannon 在 1948 年发表的论文"通信的数学理论( A Mathematical Theory of Communication )& ...

  5. 机器学习实战读书笔记(1)

    机器学习的主要任务: 分类:将实例数据划分到合适的分类中 回归:主要用于预测数值型数据 分类和回归属于监督学习,监督学习必须知道预测什么,即目标变量的分类信息 无监督学习:数据没有类别信息,也不会给定 ...

  6. 周志华《机器学习》读书笔记(一)

    文章目录 如何使用 一.绪论 1.1 引言 1.2 基本术语 1.3 假设空间 1.4 归纳偏好 1.5 发展历程 1.6 应用现状 共勉 如何使用 1.<西瓜书>是一本教科书.      ...

  7. 《百面机器学习》读书笔记

    巧妇难为无米之炊 数据和特征是米,模型和算法是巧妇. 结构化数据:数值型,类别型 非结构化数据:文本图像音频 一.特征归一化 归一化:线性函数归一化 零均值归一化 z=(x-u)/标准差 归一化会使得 ...

  8. 《机器学习》读书笔记,第二章概念学习和一般到特殊序

    本章展示了几种概念学习算法,并讨论了这些算法能收敛到正确假设的条件.这里还分析了归纳学习的本质以及任意程序能从训练数据中泛华的理由. 2.1概念学习: 从有关某个布尔函数的输入输出训练样例中推断出该布 ...

  9. 《白话大数据与机器学习》读书笔记2

    第6-10章 这部分介绍数据挖掘基础知识与算法 多维向量空间 回归 聚类 分类 这部分介绍数据挖掘基础知识与算法 多维向量空间 1.向量:Vector这个词最初来源于几何学,几何向量也称为欧几里得向量 ...

  10. 机器学习实战读书笔记(一)机器学习基础

    http://sourceforge.net/projects/numpy/files/ 下载对应版本的numpy,到处下不到,找到一个没python2.7 用pip吧, pip install nu ...

最新文章

  1. 用看门狗定时器做计时器,计算程序耗时,超声波测距,FL2440
  2. pdf在线转换图片该如何进行操作
  3. 有网友提问,关于本地XML转JSON的小工具
  4. mysql 生成xml 表头_Spring Boot + MySql + Mybatis generator 自动生成mapper/entity/xml文件
  5. mos 控制交流_小米智能排插的220V交流电压信号的开关控制电路设计
  6. mac php配置和扩展,mac 下安装php 以及 配置扩展!!!!!
  7. mqtt server python_Python使用mqtt极简例子
  8. 经典排序:第k个元素(快排和双向扫描法)
  9. 「leetcode」406.根据身高重建队列【贪心算法】详解-续集!
  10. 免费的Access数据库员工管理系统下载-IT技术网站 企业人员管理系统源码
  11. CentOS 停服!我们有哪些顶流的国产操作系统
  12. adb install 时 日志输出Performing Streamed Instal 一直卡着不动,处理方法
  13. 计算机word考试试题模板,2017年职称计算机考试Word2003巩固练习题13
  14. 计算机专业分类分级,计算机等级分级
  15. SDP PPS SPS分析(spsparser)
  16. jvm-8-java
  17. Android Studio 界面设计和运行的不一样
  18. 中职计算机专业介绍,【中职计算机专业介绍】中职计算机专业教学改革探幽
  19. java基于ssm+vue+elementui的水果生鲜销售购物商城
  20. Qt实现菜单栏,工具栏,状态栏

热门文章

  1. python求不同分辨率图像的峰值信噪比
  2. 实现 DirectShow 虚拟 Camera 驱动
  3. 关键词布局排名优化方法
  4. Spring实战第五版第二章字段校验返回视图报错解决及javax.validation完整pom依赖
  5. 【大数据存储技术】实验1 Hbase数据库的部署和操作
  6. 2、python for、if、while和交互语句
  7. 振动信号处理 (一)
  8. html页面判断是手机端访问,JS 判断手机端和pc端后跳转对应页面
  9. 【干货】看过上千份简历后的经验总结
  10. 192.168.1.1\/cu.html 账号密码,RG100S管理员权限的web登录IP地址http://192.168.1...._考试资料网...