[线上直播] 11 月 21 日晚 8 点贝壳技术总监侯圣文《数据安全之数据库安全黄金法则》
我第一次听说 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 值.
本文转自雷锋网, 如需转载请至雷锋网官网申请授权.
来源: http://ai.51cto.com/art/201911/606051.htm