【课程笔记·李宏毅教授】可解释机器学习XAI(Explainable Machine Learning )
为什么需要 XAI?——避免模型“像神马 汉斯一样作弊”,帮我们改进模型,满足法律/行业需求;XAI 不是“放弃强模型”,而是给强模型“加解释”;关键技术:局部解释(盖方块、显著性图、IG)、全局解释(可视化神经元、探针);核心挑战:“好解释”没有统一标准,重点是“让人接受”。作业里会让大家实际画显著性图、用探针分析模型,亲手感受 XAI 的过程。
我们已经训练过不少模型了——影像分类模型、语音识别模型,给它输入就能出答案。但今天我们要更进一步:不仅要模型给答案,还要它告诉我们“为什么得到这个答案”。这就是我们今天的主题:可解释机器学习(Explainable Machine Learning,简称 XAI)。
一、先搞懂:为什么需要可解释机器学习?
在讲技术之前,我们得先想清楚一个问题:为什么要花力气做 XAI?难道模型能出正确答案还不够吗?
其实答案很简单:“能出正确答案”不代表“真的懂”。给大家举个经典的例子——“神马 汉斯”(聪明的汉斯)。这是一匹当年被认为“会做数学题”的马:你问它“根号9是多少”,它会用马蹄跺地板,跺3下就停下,每次都能答对,围观的人都欢呼不已。
但后来有人发现:只要没人围观,汉斯就“不会做题了”——它只是通过观察人类的微表情(比如有人皱眉、点头)判断“该什么时候停下”,根本不懂数学!它要的不是“解对题”,而是“得到胡萝卜奖励”。
现在我们用的 AI 模型,会不会也像汉斯一样?看起来能解决问题,其实只是“找到了数据里的小窍门”,没真正理解逻辑?
这在真实场景里太关键了,我举几个必须要 XAI 的例子:
- 银行贷款:法律规定,用 AI 决定“要不要给客户贷款”,必须给出理由——不能只说“模型觉得你不行”,得告诉客户“是因为你的收入不稳定”还是“征信有问题”;
- 医疗诊断:AI 说“这个病人有癌症”,人命关天,医生必须知道“模型是看了哪个指标(比如肿瘤大小、指标异常)才判断的”,不能信“黑箱”;
- 司法假释:AI 建议“这个犯人不能假释”,得证明“它没考虑种族、性别这些偏见因素”,是基于“再犯罪风险”等合理指标;
- 自驾车:自驾车突然急刹,导致乘客受伤——如果是“看到老太太过马路”,那急刹是对的;如果是“无缘无故乱刹”,那模型就有问题。我们需要知道它决策的理由。
更实际的一点是:XAI 能帮我们改进模型。现在我们调深度学习模型,常说“报调参数”——改改学习率、换换网络结构,像“瞎蒙”一样。但如果知道模型“为什么错”(比如把“宝可梦”认成“数码宝贝”是因为背景颜色),就能针对性修正,不用再“乱试”了。
二、概念辨析:别搞混“可解释”和“可解读”
有人会说:“既然深度学习是黑箱,那我们不用深度学习不就行了?用简单的模型,比如线性模型,不就好解释了吗?”
这个想法有道理,但不全面。我们先理清两个容易混淆的词:
- 可解读(Interpretable):模型本身不是黑箱,天生就能看懂。比如线性模型,看每个特征的权重(weight)就知道“哪个因素影响大”——比如“房价=0.8×面积+0.2×地段”,一眼就懂;
- 可解释(Explainable):模型本身是黑箱(比如深度学习),我们需要额外做技术,给它“加一层解释”,让我们知道它在想什么。
线性模型确实“可解读”,但它有个大问题:不够强。第一堂课我们就说过,线性模型只能处理线性关系,面对复杂问题(比如识别猫、语音转文字)根本不够用。而深度学习虽然强,但它是“黑箱”,解释起来难。
那有人会问:“决策树(Decision Tree)是不是‘又强又可解读’?” 决策树的结构是“每个节点问一个问题(比如‘年龄>30?’),最后到叶子节点出答案”,看起来确实好懂。
但实际用的时候,我们很少只用“一颗决策树”——而是用“随机森林(Random Forest)”,也就是几百颗决策树一起投票。一颗树好懂,几百颗树的“集体决策”就看不懂了。所以决策树也解决不了所有 XAI 问题。
总结一下:没有“完美的模型”——简单模型可解读但不强,强模型(深度学习、随机森林)好用但难解释。我们不能因为“难解释”就放弃强模型,而是要想办法给强模型“加解释”——这才是 XAI 的核心。
三、XAI 的核心挑战:“好解释”没有统一标准
做 XAI 还有个大麻烦:没有明确的目标。
我们之前的作业,目标都很清晰——比如“把准确率从80%提到90%”,有 Leaderboard 能比高低。但 XAI 不一样:“什么是‘好的解释’?” 没有统一答案。
有人觉得“好解释”是“知道模型所有细节”,但我个人不这么认为。举个例子:人脑也是黑箱,我们不知道神经元怎么工作,但我们会相信别人的判断(比如医生说“你需要吃药”)。为什么?因为“有理由”——医生会说“因为你的血压高”。
所以我觉得:好的解释,是“让人能接受的理由”。可能是让客户接受(“贷款被拒是因为征信问题”),让老板接受(“模型错了是因为训练数据有偏差”),甚至让自己接受(“这个错误能改”)。不用追求“完全懂模型的每一步”,只要“理由合理、能让人放心”就够了。
给大家看个心理学实验,更能理解这个点:1970年代,哈佛大学教授做的“复印机排队实验”——
- 场景:图书馆复印机前大排长龙,有人想插队;
- 第一种说法:“请让我先印,我要印东西”——60%的人会同意;
- 第二种说法:“请让我先印,因为我要印东西”——93%的人会同意。
你发现没?只是多了“因为”两个字,哪怕理由是“废话”(“要印东西”是插队的默认目的),同意率也大幅提升。人就是这样:需要一个“理由”,哪怕这个理由很简单。XAI 也是如此——给模型的决策“加一个让人能接受的理由”,比“讲清楚所有细节”更重要。
四、XAI 实战技术:怎么给模型“加解释”?
接下来我们讲具体的技术——重点讲两类 XAI 任务:
- 局部解释(Local Explanation):针对某一个具体输入,解释“为什么模型给这个答案”——比如“为什么这张图被认成猫?”;
- 全局解释(Global Explanation):针对整个模型,解释“模型整体在关注什么”——比如“模型判断‘是不是猫’,最看重的是耳朵还是尾巴?”。
(一)局部解释:看“哪个部分最重要”
最直观的局部解释方法,是判断“输入的哪个 component(比如图片的像素、文字的 token)对决策影响最大”。核心逻辑是:如果删掉/修改某个 component 后,模型答案变了,说明这个 component 重要。
1. 最简单的方法:“盖灰色方块”
以图片分类为例:
- 步骤1:给模型一张图(比如“博美狗”),模型输出“博美狗”,几率90%;
- 步骤2:在图片不同位置盖灰色方块(挡住一部分),看模型输出的几率变化;
- 结果:如果挡住“博美的脸”,模型输出“博美狗”的几率降到10%;如果挡住“地板”,几率还是85%——说明“博美的脸”是关键,“地板”不重要。
再举个实际例子:分辨“阿富汗猎犬”和“人”。如果挡住“猎犬的身体”,模型就不认了;但挡住“人的脸”,模型还是认得出猎犬——说明模型真的在看“猎犬”,不是把“人”误认成猎犬。
2. 更进阶的方法:显著性图(Saliency Map)
“盖方块”有点笨,我们可以用数学方法计算——梯度(Gradient)。
原理很简单:
- 输入是图片的像素(x₁, x₂, …, xₙ),模型输出的“错误程度”叫 Loss(比如把“猫”认成“狗”,Loss 就大);
- 计算“每个像素的微小变化,会导致 Loss 怎么变”——如果像素 x₁ 变一点,Loss 就大幅变,说明 x₁ 重要;
- 把每个像素的“重要性”画成图,就是“显著性图”——越亮的地方,代表这个像素越重要。
比如给模型看“水牛”的图,显著性图会在“水牛身体”上亮,“草地、竹子”上暗——说明模型真的在看水牛,不是瞎蒙。
但显著性图有个问题:有噪音。比如看“长颈鹿”的图,显著性图可能在“天空”上也有亮斑,看起来不舒服。解决方法是“平滑显著性图(Smooth Grad)”——给图片加100种不同噪音,算100张显著性图,再平均,噪音就少了,亮点会集中在“长颈鹿”身上。老板看到这样的图,就会觉得“模型确实在看对的地方”,更放心。
3. 解决梯度的局限:Integrated Gradient(IG)
梯度虽然好用,但有个漏洞:不能反映“饱和区域”的重要性。
举个例子:判断“是不是大象”,“鼻子长度”是关键。但当鼻子长到一定程度(比如5米),再变长,“是大象”的几率也不会增加(总不能长10米吧)。这时候计算“鼻子长度”的梯度,会发现梯度接近0——误以为“鼻子长度不重要”,但实际它很重要。
为了解决这个问题,有个方法叫“Integrated Gradient(IG)”。简单说,它不是“只算一次梯度”,而是“从‘全黑图片’到‘原始图片’,算一路上的梯度平均”,能更准确反映重要性。具体公式不用记,作业里有现成代码,按 Enter 就能出结果。
(二)全局解释:看“模型整体在学什么”
局部解释是“看单个输入”,全局解释是“看整个模型”——比如“语音识别模型,是怎么把‘不同人说的同一句话’归为一类的?”
1. 可视化神经元输出
以语音模型为例:
- 语音输入会先转成“声学特征(比如 MFCC)”,这是100维的向量,不好看;
- 用“降维方法(比如 PCA、t-SNE)”把100维转成2维,画在图上;
- 观察结果:不同人说同一句话(比如“你好”),在“原始声学特征”图上,点很分散(看不出是同一句话);但经过8层网络后,同一句话的点会“聚在一起”——说明模型学到了“内容”,而不是“说话人的声音”。
这就是全局解释的价值:我们能知道模型“在哪个层学到了什么”——比如前面的层学“声音的细节”,后面的层学“内容的逻辑”。
2. 用“探针(Probing)”分析模型
有时候肉眼观察不够,我们可以用“探针”——也就是训练一个小分类器,去“问”模型的中间层。
比如分析 BERT 模型:
- 想知道 BERT 的第3层有没有学到“词性(POS)”——就把第3层的输出拿出来,训练一个“词性分类器”;
- 如果这个分类器准确率高,说明 BERT 第3层里有“词性信息”;如果准确率低,说明没学到。
同样,想知道有没有学到“命名实体(NER,比如人名、地名)”,就训练一个“NER 分类器”。
但用探针要注意:别冤枉模型。如果分类器准确率低,可能不是“模型没学到”,而是“分类器自己没训练好”(比如学习率没调好)。所以要多试几次,确保分类器没问题,再下结论。
3. 注意:注意力机制(Attention)不一定能解释
现在大模型常用“注意力机制”,有人觉得“看注意力权重就知道模型在关注什么”——比如文字模型里,“猫”的注意力指向“尾巴”,就说明它们有关系。
但文献里有个争议:Attention is not always explainable(注意力不一定能解释)。比如有些模型的注意力权重,看起来“关注了无关的词”,但最终答案是对的;还有些模型,不同注意力头的权重互相抵消,单独看某个头没用。所以别只看注意力,要结合其他方法(比如显著性图)一起分析。
五、真实案例:XAI 帮我们避开“坑”
最后给大家看两个真实案例,让大家知道 XAI 有多实用。
案例1:宝可梦 vs 数码宝贝——模型靠背景“作弊”
有人训练了一个“宝可梦和数码宝贝分类器”,训练准确率98.9%,测试准确率98.4%——比人类还厉害(人类都分不清)。
但用显著性图一看,发现不对:模型关注的不是“宝可梦/数码宝贝的身体”,而是“背景”——因为宝可梦的图都是 PNG 格式,背景是透明的;数码宝贝的图背景是白色的。模型根本没学“两者的区别”,只是靠“背景颜色”作弊!
如果没做 XAI,我们还以为模型“很厉害”,其实它只是“找了数据的漏洞”。
案例2:ImageNet 分类——模型靠“水印”认图
在经典的 ImageNet 数据集里,有个“马”的分类任务。模型准确率很高,但用显著性图发现:模型关注的不是“马的身体”,而是“图片左下角的英文水印”——因为数据集里“马”的图,很多都来自同一个网站,左下角有一样的水印。
模型没学“马长什么样”,只是靠“水印”认图。这就是 XAI 的价值:帮我们发现模型“看似对,实则错”的问题。
六、总结
今天我们讲了可解释机器学习的核心:
- 为什么需要 XAI?——避免模型“像神马 汉斯一样作弊”,帮我们改进模型,满足法律/行业需求;
- XAI 不是“放弃强模型”,而是给强模型“加解释”;
- 关键技术:局部解释(盖方块、显著性图、IG)、全局解释(可视化神经元、探针);
- 核心挑战:“好解释”没有统一标准,重点是“让人接受”。
作业里会让大家实际画显著性图、用探针分析模型,亲手感受 XAI 的过程。有问题的同学可以留下来讨论,谢谢大家!
更多推荐
所有评论(0)