当前位置: 首页 > news >正文

终于有人把“可解释机器学习”讲明白了

1f9c4f1ae23d9d1cb130f6f43f3746e6.gif

77e2d8e47d182c04e4d7117e34cc514b.png

1

为什么需要解释

机器学习模型的可解释性(Interpretability)最近说得越来越多,这也是个有趣的话题。可解释性不是个新概念,很多书在介绍机器学习模型时,都会顺带提一笔这款模型的可解释性如何,譬如我写的《机器学习算法的数学解析与Python》在介绍线性模型的优点时,就提了一嘴“可解释性强”。

不过,过去可解释性给我们的感觉,似乎总是“顺带提一嘴”,很少专门去讲,早前我对这个问题很感兴趣,想找本专著看看,结果半天没找到。这就要从另一个问题说起了。机器学习和数据分析是当下很热的两个概念,交叉的地方又不少,数据挖掘的教材里面有不少机器学习的内容,于是有同学免不了有点疑惑:这俩到底有啥区别呢?

有人说,机器学习看重预测效果,而数据挖掘更看重解释。我认可这个看法。形象一点说,机器学习只要给出预测结果就好,有时是一串数值(回归),有时是各种类别(分类或聚类),而数据挖掘则要交出一份分析报告,不但要回答是什么,还要回答为什么。

回忆一下,数据挖掘有个人尽皆知的成功案例叫“啤酒和纸尿片”,特别适合用来理解数据分析的目标和流程。

这个案例包含了三部分内容:首先是挖掘——分析师对购物数据进行分析挖掘,发现了顾客经常会同时购买啤酒和纸尿片,在数据挖掘里面这叫“关联模式挖掘”。

完成这步就有了结果,如果是机器学习就可以交差了,但数据挖掘才只是刚刚开始。

接着是解释,解释为什么啤酒和纸尿片两个看似没啥关系的商品,会出现这种奇妙的关联关系呢?分析师研究了半天,发现有许多年轻的父亲去买啤酒或者纸尿裤的时候,如果看到另一样就会顺便买了回来,这就是背后的因果关系。最近机器学习领域也在讨论因果关系,说模型并没有学到因果关系,这也是为什么需要耗费大量数据才能完成训练的重要原因。这个话题以后有机会再展开。

最后是决策,超市管理层拿到分析报告,认同了里面的分析,然后拍板将啤酒和纸尿片放在一起,最终证实二者销量果然明显上升。这一步必不可少,但学习数据挖掘时很容易被忽略。数据挖掘不应该是为挖掘而挖掘,最重要的是挖掘的成果能够转化成有效决策。这个案例很好地说明了为什么数据挖掘看重解释,因为数据挖掘的结果往往不是直接输出,而是要说服别人做出某种决策,所以自然就要首先解释清楚。

解释越清楚,决策才能越理性。我们身边也有很多同样的例子,譬如说股评,不管我们有没有买卖股票,肯定都听过股评。股评是不是直接预测结果,譬如说报出一串股票代码就完事了呢?不是,而是花很大的篇幅分析行情,告诉你为什么看好这只股票,为什么现在是最好的买入时机。为什么需要花大力气解释自己的预测结果?因为只有解释清楚了,股民才能做出最理性的决策。这就是解释的重要性。

b0379d4699c9baf9a3be012a8542d9bd.png

2

机器学习为什么需要强调可解释性

接下来说说为什么现在机器学习也强调可解释性。

我们还是从案例入手。上面提到啤酒和纸尿裤,其实机器学习是有极类似的应用场景的,譬如说推荐系统。推荐系统经常用到一款算法,叫Item-Based协同过滤,核心思想非常类似,数据挖掘是找关联性,这里则是计算相似度,通过分析用户购买记录,把最相似的商品推荐过去。推荐系统的玩法很多,深度学习兴起以后,新的研究成果也很快被吸收进来,譬如用于淘宝推荐系统的BST模型,就是使用了正在业界大杀特杀的Transformer。感兴趣的同学可以阅读《构建企业级推荐系统:算法、工程实现与案例分析》。

深度学习给推荐系统注入了新的动力,也带来了新的问题。深度神经网络能够捕捉更为抽象的“表征”,推荐更为准确,还减少了人工介入的成本,但同时也意外催生了推荐系统的一种新的玩法:吐槽奇葩推荐。我一哥们有天就和我吐槽:“我一钢铁直男,也不知道点了什么,现在系统天天给我推荐美妆,删也删不完,现在我都犹豫要不要干脆卸载这个App算了……”

哥们可能只是简单一嘴,但问题却一点也不简单。《构建企业级推荐系统》里讲了基于深度学习推荐系统存在6点缺点,其中一个就是深度学习模型可解释性不强,存在“黑盒问题”。现在深度学习大红大紫,但是“黑盒问题”却一直是困扰深度学习的一块心病,大家都觉得模型给出的结果挺准,但谁也搞不清这结果是怎样来的,用术语来说,就是搞不清模型的决策过程,可解释性差,导致很多场景不敢使用深度模型,限制了深度学习的推广应用。

最典型的就是金融领域,现在智能风控很流行,也都同意如果使用深度学习效果会更好,但大家用得最多的反而是效果没那么好、但是可解释性强的其它模型,就是因为深度学习存在可解释性的“黑盒问题”。

上面这个例子也许出乎很多人的意料,为什么放着效果更好的模型不用,宁愿选择可解释性更强但效果明显不如的模型呢?我认为有三点原因:

第一就是模型的预测结果越来越具有价值。首先要说,不是所有场景都特别看重可解释性,譬如说手机的人脸识别,识别错了顶多也就是打不开手机。但有很多场景如果出现了预测失误而且难以发现,可能导致非常灾难性的后果。首当其冲的就是和钱打交道的行业,这也是为什么金融行业会如此重视模型的可解释性。

第二就是需要分析原因。前面我们提到了奇葩推荐,如果使用者搞不清模型为什么会推这个,开发者也搞不清模型为什么会推这个,那奇葩问题就变成了难以解决的顽疾。要解决问题,首先就要解释清楚为什么会出现问题,然后才是修复。

第三就是研究需求。数据挖掘其实就是一种研究,所以不但要给出研究结论,还要把理论的过程给解释清楚。机器学习同样也存在类似的需要。我正在写一本书,在介绍线性模型这章开篇就提到:线性模型性能相比深度模型要差一点,那为什么现在还需要花时间去学呢?就是因为线性模型的可解释性好,可以清楚看出输入特征和输出结果的关联关系。正是因为线性模型有着良好的可解释性,很多金融和经济方面的研究到今天仍然选择用这款老模型作为首选的研究工具。

最后我想补充一点:可解释性可能不仅仅只是方便理解结果,有时候还能带来改变。就拿推荐系统来说,我们可以通过模型分析出某个用户对某类推荐物不感兴趣,但如果模型能够更进一步,告诉我们用户不感兴趣的原因,那么我们没准还能主动采取一些方式,让用户从“不感兴趣”变成“感兴趣”,那原本这种可能导致用户流失的错误推荐,反而变成了增加用户粘性的正确推荐。

174b3977999f1a8b35c1b6bf44f4f0ec.png

3

机器学习模型怎样实现可解释性

最后我们来简单过一下机器学习模型怎样实现可解释性。这部分内容很多,前面我说想找一本专著来系统了解这方面情况,最近正好出了这么一本书,叫《可解释机器学习:模型、方法与实践》,以下内容可以算是我的读书笔记。

首先要说什么是可解释性。机器学习越来越重要,机器学习的决策结果对我们的影响也越来越多,因此,业界对可解释性也越来越重视,近年有一批顶会论文就是研究可解释性。

但是,对于什么是“可解释性”本身,我不知道是大家觉得不喻自明,还是很难解释,反正现在还没有一个公认的定义。

《可解释机器学习》出了一个定义,指“模型可用通俗易懂的语言进行表达”。我查了一些文献,感觉大家的理解大同中又存在小异,有人将可解释性分成两类:一类是对模型决策过程的解释,另一类则是对模型预测结果的解释。看完《可解释机器学习》这本书,我认为这也确实是两个最需要解释的部分。

那么,怎么实现可解释性呢?

有两种方法。一种叫内在可解释,也有译为“自解释”,名字挺玄乎,说白了就是模型本身的可解释性就挺强,譬如说线性模型,结构简单原理清楚,所以金融学家和经济学家都爱它。但是,这通常也导致了另一个问题——性能问题,线性模型的性能就不如深度学习。那怎么办呢?没办法,只能权衡利弊,在满足性能要求的前提下,尽可能选择可解释性强的模型。多说一句,我翻了不少可解释性方面的文献,大家都对线性模型交口称赞,给我在新书里夸奖线性模型壮了胆。

另一种叫事后解释。这里的“事后”指的是模型完成预测以后,预测过程搞不清楚,但还是可以从预测结果入手做一点工作。前面我们说深度学习有个老大难的黑盒问题,那是不是就一点办法没有,只能在预测效果和可解释性中二选一呢?研究人员说成年人都是全都要,于是近年很多这方面的研究。我看了一下,主要思想基本都是事后解释。譬如说在图像识别中加入一些可视化方法,看看模型都捕捉到了哪些特征,然后再来评判模型做得对不对。

有一个案例是有个哈士奇图片识别任务,模型的预测精度很高,但通过事后解释发现模型学到的是图片的背景:原来在数据集中,哈士奇出现的背景多为雪地,于是模型实际是根据“雪地”这一特征来识别这张图片是否属于哈士奇。通过事后解释我们也能够得到结论:虽然模型的预测效果看起来很好,但显然不符合我们想要的目标。

这方面有许多落地的模型和方法,可以翻翻《可解释机器学习》。这本书有两个难得之处:除了这是一本可解释性的专著外,还是由金融行业的专家撰写,可以从中窥见这个行业对可解释性的需求和努力,同时也更理解金融行业对深度学习为什么是十动然拒。

cdca8a50959452a2a9d71cb5f1ac448b.png

4

作者简介

莫凡,网名木羊同学。娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

38353849d88fd31c8b1c5f15e94af9ae.png

5

推荐阅读

5e37f0eb0f13c1279d31cf0b075f62da.png

《可解释机器学习:模型、方法与实践》

ba50e3d6dd0c0712a9be87c417cc2b86.pngdb69f3e85d51633b9dc4a97aea97e104.png

推荐理由:国内金融人工智能一线团队倾力打造,追踪最前沿的研究进展,全面、系统地介绍了可解释机器学习模型及方法。以金融业数字化转型面临的实际问题为背景,创造性地应用可解释机器学习技术,成功突破人工智能算法进一步发展壮大的应用壁垒。

7c3ccac18d5bb97df8df1b922520f124.png

《构建企业级推荐系统:算法、工程实现与案例分析》

28ed0ede78466ba2ae429d22d38fdf81.png0b8a914950f3257a3e998c2d71e624b7.png

推荐理由:上市两天即登顶京东新书榜!推荐算法工程师必读。推荐系统专家集10年实践经验之作,从场景、算法、工程、运营、实践等多维度深度梳理构建企业级推荐系统的方法。所有算法都有详细实现思路分析,可直接用于企业实战。配套与章节对应的学习视频。

965dead250cd812d20ca3a4abd528d8c.gif

91feabd29505e986c7e840a51d5631a7.png

扫码关注【华章计算机】视频号

每天来听华章哥讲书

0f9833f30381171f8e334d15476eb7fb.gif

更多精彩回顾

书讯 | 1月书讯(下)| 2022年的第一本书

书讯 | 1月书讯(上)| 2022年的第一本书

资讯 | 重磅!达摩院发布2022十大科技趋势

书单 | 6本书,读懂2022年最火的边缘计算

干货 | Flink1.14.2发布,除了log4j漏洞你还需要关注什么?

收藏 | Docker冲顶技术热词,微服务应用热度不减,中国云原生开发者真实现状如何?

上新 | 【新书速递】金融领域可解释机器学习模型与实践

5b6e5520bbd6007bc970a90c44242ee9.gif

cdfd7b46154f16c7d9f008e26bf1e3d0.gif

点击阅读全文了解更多AI好书

相关文章:

  • 产品经理必读:用户场景分析的四要素
  • 年终盘点:2021年的通信行业
  • 缓存和数据库一致性问题,看这篇就够了
  • 【新书速递】深入浅出Electron
  • Java静态编译技术:突破Java“冷启动”桎梏,实现启动性能“质”的飞跃
  • 脑机接口新进展!只凭意念,操纵机器移动、拿取物体成为现实
  • 【第87期】程序员怎样上元宇宙的车?
  • 什么是贝叶斯定理?朴素贝叶斯有多“朴素”?终于有人讲明白了
  • 数据中台怎么选型?终于有人讲明白了
  • 一幅真实的产品世界全景图,产品小白向上突破必看!
  • 自主IT行业生态需要会造计算机的人才
  • AI正在模仿人类大脑!2021年10篇顶会论文:大脑也在「无监督」学习
  • 终于有人把“嵌入式人工智能”讲明白了
  • 数据分析的 5 种归纳方法
  • 四位RISC先驱获「工程学界诺贝尔奖」,图灵奖得主David Patterson、John Hennessy获奖...
  • javascript 哈希表
  • Laravel 实践之路: 数据库迁移与数据填充
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 从0到1:PostCSS 插件开发最佳实践
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 判断客户端类型,Android,iOS,PC
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 移动端解决方案学习记录
  • 函数计算新功能-----支持C#函数
  • #define 用法
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四) Graphivz 颜色选择
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • ::什么意思
  • @font-face 用字体画图标
  • @Not - Empty-Null-Blank
  • @RequestBody与@ModelAttribute
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ C++ ] 继承
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [@Controller]4 详解@ModelAttribute
  • []C/C++读取串口接收到的数据程序
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [C]编译和预处理详解
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [ERROR] ocp-server-ce-py_script_start_check-4.2.1 RuntimeError: ‘tenant_name‘