机器学习中的可解释性:原理、方法与挑战

1. 引言

机器学习(ML)正逐渐改变我们的世界,从自动驾驶汽车到信用评分系统,其应用无处不在。它通过构建算法,让计算机能从数据中自动学习和改进,无需明确编程。然而,机器学习也存在负面影响,比如生成深度伪造图像用于传播虚假信息,以及模型本身的可解释性问题。随着机器学习的发展,人们对算法的可信度提出了质疑,如何确保模型公平可信成为关键问题,特别是在高风险决策场景中。

可解释性是指理解模型预测背后的原理,使模型的工作方式能被人类理解。这对于理解模型如何工作以及为何做出特定预测至关重要。可解释性有两种主要方法:基于模型的和与模型无关的。前者通过分析模型结构和参数来解释行为,后者则不做关于模型内部的假设。可解释机器学习与可解释人工智能(XAI)有所不同,前者侧重于模型解释,后者侧重解释模型决策。

2. 可解释性的历史根源

可解释性的历史可以追溯到人工智能和控制论的早期,当时主要关注线性模型行为的分析和理解。20世纪50年代,控制论专家罗斯·阿什比提出,任何系统都可通过降低复杂性来理解,即阿什比的必要多样性定律。可解释机器学习的起点可追溯到人工神经网络的早期,马文·明斯基和西摩·帕佩特在1969年展示了如何通过分析神经元之间的连接权重来解释神经网络的行为。

20世纪80年代,神经网络研究表明可以创建既准确又可解释的模型。90年代,开发了新的技术来解释人工智能系统的行为,同时也有方法使决策树更具可解释性。2000年代和2010年代,该领域发展成如今的模样,许多方法被开发用于解释机器学习模型的预测,其中2016年发表的LIME(局部可解释模型无关解释)具有重要影响力。

3. 可解释性的重要性

可解释性对多个利益相关者都至关重要:
- 建模者 :可解释模型有助于理解模型如何进行预测,便于调试,也有利于提高模型的整体性能。
- 决策者 :可解释性层能帮助决策者理解模型做出特定预测的原因,有助于理解底层数据并决定如何修改模型,同时提高模型的透明度。
- 最终用户 :最终用户需要理解模型如何做出预测,否则可能不信任预测结果而不使用模型。此外,可解释性有助于识别模型中的偏差,提高模型的公平性,这符合近期的法规要求,如美国的《多德 - 弗兰克华尔街改革和消费者保护法》和欧盟的《通用数据保护条例》。

4. 可解释性方法

4.1 理想解释的属性

可解释性方法应满足一些使解释良好的属性,如下表所示:
| 属性 | 描述 |
| — | — |
| 因果性 | 能够解释模型预测特定输出的原因 |
| 对比性 | 能够解释模型为何预测特定输出而非其他 |
| 一致性 | 解释应与模型一致 |
| 忠实性 | 解释应忠实于模型 |
| 全局性 | 能够整体解释模型 |
| 局部性 | 能够针对单个示例解释模型 |
| 说明性 | 能够用示例解释模型 |
| 简单性 | 解释应易于理解 |
| 自然性 | 解释应自然易懂 |
| 通用性 | 解释应可推广到其他示例 |

4.2 局部方法

局部解释揭示模型针对给定输入预测特定输出的原因,对高风险决策非常重要,常见的局部方法有:
- 个体条件期望(ICE) :该方法允许在实例层面可视化特征变化的影响。它是部分依赖(PD)方法的分解,通过观察特征变化前后的预测差异,帮助理解预测如何随变量值的变化而变化。例如,使用R中的iml包可以绘制随机森林模型在波士顿数据集上的ICE曲线。
- Shapley加性解释(SHAP) :基于合作博弈论中的Shapley值,用于确定每个特征对模型输出的贡献。在机器学习中,可通过公式计算特征贡献,在特征独立假设下,可直接使用特定公式估计SHAP值。使用Python中的shap包可以获得SHAP解释图。
- 局部代理 :局部代理解释方法是训练模拟模型来近似复杂机器学习模型的输出。常见的代理模型有LIME和Anchors。LIME通过在待解释实例周围学习局部准确、可解释的模型来解释模型;Anchors是一种局部保持预测的规则,具有易于理解的优点。

4.3 全局方法

全局解释方法用于理解模型在整个数据集上的行为,能发现影响多个观测值的潜在偏差,提供比局部解释更多的见解,常见的全局方法有:
- 部分依赖(PD) :该方法通过固定其他特征,绘制模型输出对单个特征或特征对的依赖关系,帮助理解特征对模型输出的边际影响和特征之间的交互作用。PD是模型无关的,可通过特定公式计算,与ICE相关,是所有ICE曲线的平均值。使用R中的DALEX包可以绘制PD图。
- 累积局部效应(ALE) :ALE是对PD的进一步改进。它通过对特征空间进行分箱,计算每个分箱边界处特征的效应,并去除其他特征的虚假影响,避免了PD在数据范围外评估变量效应的缺点。通过特定公式计算ALE响应值,并绘制与特征原始值的关系图。使用Python中的Alibi包可以获得ALE图。
- 特征重要性 :特征重要性是全局解释的重要领域,常见的是排列特征重要性。它通过随机打乱单个特征值,观察模型得分的下降来确定特征的重要性。具体步骤为:先将模型拟合到原始数据,然后对每个特征进行值的排列并重新拟合模型,记录排列数据和原始数据上的模型误差差异,最后将这些差异归一化,使所有特征的总和为100。使用Python中的scikit - learn包可以得到特征排列的输出示例。
- 全局代理 :全局代理模型用于提供模型的全局解释,与局部代理方法不同,它是训练与原始模型相似但更透明、可解释的模型。主要类型有决策树和规则集,决策树可用于建模变量之间的复杂关系,规则集是用于进行预测的if - then规则。全局代理通常与局部代理结合使用,帮助理解模型工作方式、确定重要输入变量、提高模型透明度和性能。使用R中的iml包可以实现全局代理模型。

下面是一个简单的mermaid流程图,展示了特征重要性计算的流程:

graph LR
    A[拟合模型到原始数据] --> B[对每个特征进行值的排列]
    B --> C[重新拟合模型]
    C --> D[记录排列数据和原始数据的模型误差差异]
    D --> E[归一化差异,总和为100]

5. 可解释性面临的挑战

尽管有多种技术用于解释复杂模型,但可解释性仍面临诸多挑战:
- 性能与可解释性的权衡 :在模型训练和解释阶段,可能存在性能和可解释性的权衡。建模者在训练时强制规则简单化,可能导致模型更具可解释性和鲁棒性,但会降低捕捉高度非线性模式的能力。
- 利益相关者的差异 :不同人对可解释性的定义不同,一个人认为可解释的模型,另一个人可能觉得难以理解。
- 计算成本 :许多可解释性技术需要多次数据排列和模型拟合,计算成本高。
- 数据类型限制 :一些技术在处理分类数据时需要特定的顺序,否则无法工作,如ALE。
- 模型复杂性 :一些复杂的机器学习模型,如非常复杂的人工神经网络,很难解释,例如卷积神经网络中的显著性图受到了很多批评。

6. 结论

机器学习虽然强大,但存在可解释性不足和偏差等局限性。许多解释方法被提出以解决可解释性问题,本文讨论了常见的与模型无关的方法,这些方法使用方便,但通常准确性较低且计算成本高。在应用这些方法时,应意识到其局限性,并结合人类专业知识,以确保获得最佳结果和可靠的解释。

7. 总结可解释性方法

为了更清晰对比不同的可解释性方法,下面整理了一个表格:
| 方法类型 | 具体方法 | 原理 | 优点 | 缺点 | 适用场景 | 工具包 |
| — | — | — | — | — | — | — |
| 局部方法 | 个体条件期望(ICE) | 可视化特征变化对单个实例预测的影响,是PD的分解 | 能直观展示特征变化对预测的影响 | 仅关注单个实例,难以反映整体情况 | 理解单个样本特征变化的影响 | R - iml包 |
| 局部方法 | Shapley加性解释(SHAP) | 基于Shapley值确定特征对输出的贡献 | 理论基础坚实,能全面评估特征贡献 | 计算复杂度高 | 分析特征对单个预测的贡献 | Python - shap包 |
| 局部方法 | 局部代理(LIME、Anchors) | 训练模拟模型近似复杂模型输出 | 可解释复杂模型,LIME灵活,Anchors易理解 | 代理模型可能与原模型有偏差 | 解释复杂模型的单个预测 | R - iml包(LIME) |
| 全局方法 | 部分依赖(PD) | 固定其他特征,绘制模型输出对特征的依赖 | 模型无关,能发现特征重要性和交互 | 可能忽略特征间相关性 | 理解特征对整体预测的影响 | R - DALEX包 |
| 全局方法 | 累积局部效应(ALE) | 改进PD,去除其他特征虚假影响 | 避免PD在数据范围外评估的问题 | 计算相对复杂 | 准确评估特征对整体预测的影响 | Python - Alibi包 |
| 全局方法 | 特征重要性(排列特征重要性) | 打乱特征值观察模型得分下降 | 直观反映特征重要性 | 可能受特征相关性影响 | 筛选重要特征 | Python - scikit - learn包 |
| 全局方法 | 全局代理(决策树、规则集) | 训练与原模型相似但更透明的模型 | 提供全局解释,可理解模型整体行为 | 可能无法完全捕捉原模型复杂性 | 理解模型整体工作方式 | R - iml包 |

8. 可解释性方法的应用建议

根据不同的场景和需求,可以参考以下选择可解释性方法的建议:
- 理解单个预测
- 若想直观看到特征变化对单个实例预测的影响,可选择个体条件期望(ICE)。操作步骤:使用R中的iml包,加载相关数据和模型,调用相应函数绘制ICE曲线。
- 若要准确分析每个特征对单个预测的贡献,Shapley加性解释(SHAP)是不错的选择。操作步骤:使用Python中的shap包,加载模型和数据,计算SHAP值并可视化。
- 对于复杂模型的单个预测解释,可使用局部代理方法,如LIME。操作步骤:使用R中的iml包,在待解释实例周围训练局部可解释模型。
- 理解模型整体行为
- 部分依赖(PD)方法可以帮助理解特征对整体预测的影响和特征间的交互。操作步骤:使用R中的DALEX包,固定其他特征,绘制模型输出对特征的依赖图。
- 累积局部效应(ALE)能更准确地评估特征对整体预测的影响,避免PD的一些缺点。操作步骤:使用Python中的Alibi包,对特征空间分箱,计算ALE响应值并绘制图形。
- 特征重要性(排列特征重要性)可用于筛选重要特征。操作步骤:使用Python中的scikit - learn包,拟合模型到原始数据,对每个特征进行值的排列,重新拟合模型,记录误差差异并归一化。
- 全局代理模型可以提供模型的全局解释,理解模型整体工作方式。操作步骤:使用R中的iml包,训练与原模型相似但更透明的代理模型。

下面是一个mermaid流程图,展示根据需求选择可解释性方法的流程:

graph LR
    A[需求] --> B{理解单个预测?}
    B -- 是 --> C{直观看特征变化影响?}
    C -- 是 --> D[个体条件期望(ICE)]
    C -- 否 --> E{准确分析特征贡献?}
    E -- 是 --> F[Shapley加性解释(SHAP)]
    E -- 否 --> G[局部代理(LIME)]
    B -- 否 --> H{理解模型整体行为?}
    H -- 是 --> I{看特征对整体影响和交互?}
    I -- 是 --> J[部分依赖(PD)]
    I -- 否 --> K{准确评估特征影响?}
    K -- 是 --> L[累积局部效应(ALE)]
    K -- 否 --> M{筛选重要特征?}
    M -- 是 --> N[特征重要性(排列特征重要性)]
    M -- 否 --> O[全局代理(决策树、规则集)]

9. 未来展望

虽然目前已经有多种可解释性方法,但可解释性领域仍有很大的发展空间。未来可能会在以下几个方面取得进展:
- 方法的改进与融合 :进一步改进现有的可解释性方法,减少计算成本和误差,同时探索不同方法的融合,以获得更全面、准确的解释。
- 适应新的模型和数据类型 :随着机器学习模型的不断发展,如深度学习模型的日益复杂,以及新的数据类型的出现,需要开发新的可解释性方法来适应这些变化。
- 法规和标准的完善 :随着可解释性在高风险决策中的重要性日益凸显,相关的法规和标准可能会进一步完善,促使企业和研究人员更加重视可解释性。

总之,可解释性是机器学习领域中一个重要且具有挑战性的研究方向,未来的发展将有助于提高机器学习模型的可信度和实用性,使其更好地服务于各个领域。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐