图片来源:https://unsplash.com/photos/TL5Vy1IM-uA
我第一次听说 Shapley 值是在学习模型可解释性的时候。我知道了 SHAP,它是一个框架,可以更好地理解为什么机器学习模型会那样运行。事实证明,Shapley 值已经存在了一段时间,它们最早起源于 1953 年的博弈论领域,目的是解决以下情况:
一群拥有不同技能的参与者为了集体奖励而相互合作。那么,如何在小组中公平分配奖励?
当一个「旧」概念被应用到另一个领域,如机器学习,关于它是如何获得新的应用是非常有趣的。在机器学习中,参与者是你输入的特征,而集体支出是模型预测。在这种情况中,Shapley 值用于计算每个单独的特征对模型输出的贡献。
如何计算 Shapley 值?大多数时候,你倾向于在文献中看到这个等式:
让我们把它分解一下。在一个联盟游戏(前面描述的场景)中,我们有一组 N 个玩家。我们还有一个函数 v,它给出了这些参与者的任何子集的值,也就是说,S 是 N 的子集,然后 v(S)给出了该子集的值。因此,对于一个联合博弈(N,v),我们可以使用这个方程来计算玩家 i 的贡献,即 Shapley 值。
现在我不知道你会怎么想,但当我第一次遇到这个等式时,我的第一反应如下图:
我很难理解为什么它看起来是这样的。我花了一些时间研究之后,终于开始有了一些理解。所以,我们开始吧!
好吧,我们要做的第一件事是重写初始方程:
乍一看,这个公式似乎并没有变容易,但请不要着急。很快,我将分解方程的不同部分,以便理解它们,但我们也可以定义一个具体的场景,我们可以使用它来让所有部分都不那么抽象。
假设我们经营一家生产砖块的工厂。我们的一个生产团队由四个人组成:Amanda、Ben、Claire 和 Don(从现在起,我将以他们名字中的第一个字母来称呼他们)。每周他们一起设法生产出 X 块砖。由于我们工厂运转良好,我们有一笔奖金要发给队员们。但是,为了让我们以公平的方式做到这一点,我们需要弄清楚每个人对每周生产 X 数量的砖块贡献了多少。
最困难的是,我们有好几个因素都会影响团队可以生产的砖块数量。其中之一是团队规模,因为团队规模越大,生产的砖块就越多。另一个可能是团队成员之间的合作程度。问题是,我们无法以有意义的方式量化这些影响,但幸运的是,我们可以使用 Shapley 值来回避这个问题。
我们现在已经定义了我们的玩家(A、B、C 和 D)以及他们参与的游戏(生产砖块)。让我们从计算生产的 X 砖中有多少可以归于 Don 开始,即计算 D 的 Shapley 值。如果我们把它与 Shapley 值公式的参数联系起来,我们就得到:
所以 D 是我们的球员 i,整个 N 组由所有四个队员 A,B,C 和 D 组成,我们先看一下 Shapley 值公式的这一部分:
也就是说,我们需要把我们的团队成员排除在我们现在关注的人之外。然后,我们需要考虑所有可能形成的子集。所以如果我们从组中排除 D,我们就只剩下 {A,B,C}。从这个剩余的组中,我们可以形成以下子集:
我们总共可以构造出其余团队成员的 8 个不同子集。其中一个子集是空集,即它没有任何成员。现在让我们把注意力转移到这个部分:
这是我们 Shapley 值的一个基本概念的应用:在游戏中增加玩家 i 的边际价值。所以对于任何给定的子集,我们要比较它的值和当包括玩家 i 的时候它的值。通过这样做,我们得到了将玩家 i 添加到该子集的边际值。
我们把它和我们的例子联系起来,想看看如果我们把 D 加到 8 个子集中的每一个子集上,每周生产的砖块数量有什么不同。我们可以将这 8 个边缘值直观地表示为:
你可以将每种情况都视为我们需要观察的不同场景,以便公平地评估 D 对整个生产的贡献程度。这意味着,我们需要观察如果没有人工作(即空集合)会产生多少砖块,并将其与只有 D 工作时的情况进行比较。我们还需要观察 AB 产生的砖块数量,并将其与 AB 产生的砖块数量以及所有 8 个集合中 D 可以产生的砖块数量进行比较。
好吧,我们现在已经知道我们需要计算 8 个不同的边缘值。Shapley 值方程告诉我们,我们需要把它们加在一起。然而,在我们做这些之前,我们还需要调整每一个边际值,从等式的这一部分可以看出:
它计算出除玩家 i 以外的所有剩余团队成员的子集的排列可以有多少个。或者换句话说:如果你有| N |-1 个玩家,你能用它们组成多少个| S |大小的组?然后我们用这个数字除以玩家 i 对所有大小为| S |的群体的边际贡献。
在我们的场景中,| N |-1=3,也就是说,当我们计算 D 的 Shapley 值时,这些是剩下的团队成员数量。在我们的例子中,我们将使用等式的那一部分来计算我们可以形成多少个 0、1、2 和 3 大小的组,因为这些只是我们可以用剩下的成员构造的组大小。因此,例如,如果有| S |=2,那么我们可以构造 3 个不同的大小为 2 的组:AB、BC 和 CA。这意味着我们应该对 8 个边缘值中的每一个应用以下比例因子:
让我们思考一下为什么要这样做。我们想知道 D 对团队总产出的贡献有多大。为了做到这一点,我们计算了他对我们所能形成的团队中每个集合的贡献。通过添加这个比例因子,我们平均了其他团队成员对每个子集大小的影响。这意味着,当我们将 D 加入到一个 0,1,2 和 3 大小的团队中时,我们能够捕获这些团队的平均边际贡献。
好了,我们差不多结束了,我们只有 Shapley 值方程的最后一部分要分解,这一点也应该很容易理解。
我们需要应用到所有的边际值,然后才能求和。我们必须把它们和总队员数分开。
我们为什么要这么做?好吧,如果我们看看砖厂的例子,我们已经平均出了其他团队成员对每个子集大小的影响,这样我们就可以算出 D 对 0、1、2 和 3 大小的组的贡献。最后一块拼图是平均小组规模的影响,也就是说,D 贡献了多少与小组规模无关。
我们现在终于可以计算出 D 的 Shapley 值了,我们观察到他对团队中所有不同的子集的贡献是多少。我们还对团队成员组成和团队规模的影响进行了平均,这最终允许我们计算:
数学符号更多的是一个图形化的说明,而不是一个数学的说明(这是我在脑海中想象它的方式)
在这里,我们得到了 D 的 Shapley 值。在我们为团队的其他成员完成这项工作之后,我们将知道每个人对每周生产的 X 块砖的贡献,这样我们就可以在所有团队成员中公平地分配奖金。
在这一点上,我希望你对 Shapley 的价值观有了更好的理解。很酷的是,我们不需要知道任何关于值函数 v 内部工作原理,只需要观察它为不同子集提供的值,我们可以从参与游戏的玩家中得到这些值。
这才是 Shapley 值背后真正的力量和吸引力。然而,这是有代价的。对于一组参与游戏的 n 个玩家,你将需要分析 2^n 个子集才能计算 Shapley 值。
有一些方法可以使计算更加实际可行,在引言中我提到了 SHAP 框架,它的主要优点是,当将 Shapley 值应用于机器学习时,它能够更有效地计算 Shapley 值。
via:https://towardsdatascience.com/making-sense-of-shapley-values-dc67a8e4c5e8
雷锋网雷锋网(公众号:雷锋网)雷锋网
雷锋网版权文章,未经授权禁止转载。详情见。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/137417.html