【2021/GNN解释】On Explainability of Graph Neural Networks via Subgraph Explorations

如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【2021/GNN解释】On Explainability of Graph Neural Networks via Subgraph Explorations

【2021/GNN解释】On Explainability of Graph Neural Networks via Subgraph Explorations


原文:https://arxiv.org/pdf/2102.05152.pdf

源码:https://github.com/divelab/DIG/tree/main/dig/xgraph/SubgraphX

参考:参考文献1

1 动机

探究图网络的可解释性方面现有的方法(如 GNNExplainer、PGExplainer 和 PGM-Explainer这些大多通过解释图中边或者节点的重要性) 没有考虑通过子图结构解释GNN的预测行为。作者通过识别重要的子图来解释GNN的预测行为。

2 基础

2.1【蒙特卡洛搜索】

蒙特卡洛树搜索(MCTS)详解:(https://blog.csdn.net/weixin_41960890/article/details/125915825)

蒙特卡洛树搜索是一种经典的树搜索算法, AlphaGo 的技术背景便采用了蒙特卡洛树搜索。核心思想即是把资源放在更值得搜索的分支上面。MCTS的算法主要分为四个步骤:选择、扩展、模拟、回溯。

蒙特卡洛搜索

  • 选择:选择一条从根节点到子节点的最优路径。选择过程中用 Upper confidence Bounds(UCB)来判断节点优劣,UCB定义为

U C B 1 ( S i ) = V i ‾ + c log ⁡ N n i , c = 2 U C B 1\left(S_{i}\right)=\overline{V_{i}}+c \sqrt{\frac{\log N}{n_{i}}}, c=2 UCB1(Si)=Vi+cnilogN ,c=2

其中 V ˉ i \bar{V}_{i} Vˉi 为该节点的平均价值大小, c c c 为常数(一般取值为2), N N N 为总探索次数, n i n_{i} ni 为当前节点的探索次数。根据UCB计算所有子节点的UCB值,然后选择值最大的子节点继续进行迭代。

  • 扩展:如果当前叶子节点不是终止节点,则创建一个或者更多的子节点,选择其中一个进行扩展。

  • 模拟:从扩展节点开始,运行一个模拟的输出(例如从该节点出发,模拟10次中有胜利9次,则说明该扩展节点的得分就会较高),直到博弈游戏结束。

  • 回溯:使用模拟结果,反向传播以更新当前动作序列(更新信息包括胜率和访问次数等)

假设我们正在玩一个博弈游戏,比如围棋。我们选择使用 MCTS 算法来寻找最优的下一步操作。

  • 首先,我们建立游戏树,并将当前棋盘局面作为根节点。我们对当前棋盘进行模拟,并选择一个下一步操作,然后将该操作对应的新的棋盘局面作为根节点的子节点。
  • 假设我们选择了一步移动棋子的操作,并建立了新的一个节点。我们对这个新节点进行多次模拟,并对每一次模拟的结果进行统计,以确定它是否是最优解。
  • 如果这个节点是最优解,我们将它作为新的根节点,并继续向下搜索。如果不是,我们可以选择另一个节点作为根节点,或者继续搜索当前节点的子节点,直到找到最优解为止。
  • 因此,通过不断地选择最优解并将其作为根节点,我们最终可以找到一系列的最佳步骤,从而实现最佳的博弈策略。

2.2【Shapley value】

Shapley值法介绍及实例计算Shapley值法介绍及实例计算:https://blog.csdn.net/luzaijiaoxia0618/article/details/104527561

Shapley value是一种公平的评估玩家贡献的方法,通过算法评估每个玩家对博弈结果的贡献,并对其进行比例分配。Shapley value算法的核心思想是:对于每个玩家,该玩家的贡献应该是其在每种可能的排列中的平均贡献。Shapley value的具体计算方法如下:对于每个玩家,从所有玩家的集合中移除该玩家,并计算不包含该玩家的博弈结果,然后将该玩家加入到集合中,再计算包含该玩家的博弈结果。最后将每个玩家的贡献除以玩家集合的大小,就可以得到每个玩家的Shapley value。

假设合作博弈系统内一共有 n n n 个成员( N = { 1 , 2 , ⋯   , n } N= \{1,2,\cdots,n \} N={1,2,,n} ),则Shapley计算定义为下式:
φ i ( v ) = ∑ S ∈ N [ ( ∣ S ∣ − 1 ) ! ( n − ∣ S ∣ ) ! ] n ! × [ V ( S ) − V ( S \ { i } ) ] \varphi_\mathrm{i}(\mathrm{v})=\sum_{S \in N} \frac{[(|\mathrm{S}|-1) !(\mathrm{n}-|\mathrm{S}|) !]}{\mathrm{n} !} \times[\mathrm{V}(\mathrm{S})-\mathrm{V}(\mathrm{S} \backslash\{\mathrm{i}\})] φi(v)=SNn![(S1)!(nS)!]×[V(S)V(S\{i})]
其中 φ i ( v ) \varphi_\mathrm{i}(\mathrm{v}) φi(v)表示联盟中成员 i i i 获得的利益, S S S 代表联盟(不同成员组成不同的联盟, S S S N N N 的子集), ∣ S ∣ |\mathrm{S}| S 表示联盟 S S S所包含的成员数, S \ { i } S \backslash\{i\} S\{i} 表示从集合 S S S 中删除元素 i i i 后的集合,成员在参与 S S S 联盟时有 ( ∣ S ∣ − 1 ) ! (|S|-1)! (S1)! 种排序,余 ( n − ∣ S ∣ ) (n- |\mathrm{S}|) (nS) 个成员的排序有 $(n-|S|)! $ 种。所有成员参与的不同的排序组合除以 n n n 个成员的随机排序组合就是成员 i i i 对于联盟整体所应分得利益的权种。

实例: 共有三家公司,公司 1 , 2 , 3 1 , 2 , 3 123 单独投资可盈利 v ( 1 ) = 100 , v ( 2 ) = 200 , v ( 3 ) = 300 \mathrm{v}(1)=100 , \mathrm{v}(2)=200 , \mathrm{v}(3)=300 v(1)=100v(2)=200v(3)=300

  • 如果公司 1 和公司 2 联合,可获利 v ( 1 & 2 ) = 500 v(1 \& 2)=500 v(1&2)=500
  • 公司 2 和公司 3 联合,可获利 v ( 2 & 3 ) = 600 v(2 \& 3)=600 v(2&3)=600
  • 公司1和公司 3 联合,可获利 v ( 1 & 3 ) = 700 v(1 \& 3)=700 v(1&3)=700
  • 公司1、公司2和公司3联合,可获利 v ( 1 & 2 & 3 ) = 1000 v(1 \& 2 \& 3)=1000 v(1&2&3)=1000

那么三个公司一起合作,每个公司应各获利多少?

(1)成员1 获利计算: 成员1 可以组成的联盟有4种情况:{1}、{1、2}、{1、3}、{1、2、3}。

成员1 获利计算实例

由上表可知,成员1(公司1)的获利为850/3。Shapley值法的核心思想在于按照成员对联盟的边际贡献率将利益进行分配。

记住核心定义:成员、联盟和收益

2 方法

On Explainability of Graph Neural Networks via Subgraph Explorations 要点提炼:https://blog.csdn.net/weixin_42358688/article/details/117817212

结构框图

核心需要解决:如何探索子图(例如枚举法左右子图)以及如何衡量子图重要性。作者所提方法主要是通过蒙特卡洛树搜索算法有效地探索子图,同时采用Shapley值作为评分函数,得分最高的子图则被认为对任务可解释最强。假设存在一个图分类模型 f ( . ) f(.) f(.),输入图 G G G 输出分类结果 y y y。则所有子图的集合 G ∗ G^* G 被定义为 { G 1 , ⋯   , G i , ⋯   , G n } \left\{\mathcal{G}_1, \cdots, \mathcal{G}_i, \cdots, \mathcal{G}_n\right\} {G1,,Gi,,Gn} ,对输入图 G \mathcal{G} G 的预测 y y y 的解释可以定义为:
G ∗ = argmax ⁡ ∣ G i ∣ ≤ N min ⁡ Score ⁡ ( f ( ⋅ ) , G , G i ) , \mathcal{G}^*=\underset{\left|\mathcal{G}_i\right| \leq N_{\min }}{\operatorname{argmax}} \operatorname{Score}\left(f(\cdot), \mathcal{G}, \mathcal{G}_i\right), G=GiNminargmaxScore(f(),G,Gi),
其中 S c o r e ( ) Score () Score() 是一个评分函数,用于评估给定训练的GNN和输入图的子图的重要性。 N m i n N_{min} Nmin 是子图大小的上界,获得子图的一个简单方法是列举所有可能的子图,并选择最重要的一个作为解释。

2.1【 蒙特卡洛搜索子图】

本文中假设搜索树中的节点定义为 N i N_i Ni ,其中根节点定义为 N 0 N_0 N0,由于新生成节点即是减掉边得到子图,则搜索树中减掉的边记录为 a a a。由于生成子图过程即是删掉结合和边,则对于节点和减枝行为记为 ( N i , a j ) (N_i,a_j) (Ni,aj)。假设子图 G j G_j Gj 是子图 G i G_i Gi通过减掉边 a j a_j aj获得的,那么在MCTS算法针对这个行为对 ( N i , a j ) (N_i,a_j) (Ni,aj)需要记录四个变量值:

  • C ( N i , a j ) C\left(\mathcal{N}_{i}, a_{j}\right) C(Ni,aj) :表示对于节点 N i N_i Ni 的剪枝 a j a_j aj 的搜索次数 ;

  • W ( N i , a j ) W\left(\mathcal{N}_{i}, a_{j}\right) W(Ni,aj) :是所有 ( N i , a j ) \left(\mathcal{N}_{i}, a_{j}\right) (Ni,aj)访问的收获值;

  • Q ( N i , a j ) = W ( N i , a j ) / C ( N i , a j ) Q\left(\mathcal{N}_{i}, a_{j}\right)=W\left(\mathcal{N}_{i}, a_{j}\right) / C\left(\mathcal{N}_{i}, a_{j}\right) Q(Ni,aj)=W(Ni,aj)/C(Ni,aj)表示多次访问的平均收获值;

  • R ( N i , a j ) = Score ⁡ ( f ( ⋅ ) , G , G j ) R\left(\mathcal{N}_{i}, a_{j}\right)=\operatorname{Score}\left(f(\cdot), \mathcal{G}, \mathcal{G}_{j}\right) R(Ni,aj)=Score(f(),G,Gj) :是在 N i \mathcal{N}_i Ni 选择 a j a_j aj 的直接收获值,该值用于衡量子图 G j G_j Gj 的重要性。

在每次迭代中,MCTS选择从根节点到叶子节点的一条路径。某个节点 N i \mathcal{N}_i Ni 上的剪枝行为选择准则定义为:
a ∗ = argmax ⁡ a j Q ( N i , a j ) + U ( N i , a j ) , U ( N i , a j ) = λ R ( N i , a j ) ∑ k C ( N i , a k ) 1 + C ( N i , a j ) \begin{aligned} a^* & =\underset{a_j}{\operatorname{argmax}} Q\left(\mathcal{N}_i, a_j\right)+U\left(\mathcal{N}_i, a_j\right), \\ U\left(\mathcal{N}_i, a_j\right) & =\lambda R\left(\mathcal{N}_i, a_j\right) \frac{\sqrt{\sum_k C\left(\mathcal{N}_i, a_k\right)}}{1+C\left(\mathcal{N}_i, a_j\right)} \end{aligned} aU(Ni,aj)=ajargmaxQ(Ni,aj)+U(Ni,aj),=λR(Ni,aj)1+C(Ni,aj)kC(Ni,ak)
其中 λ \lambda λ 是一个超参数, ∑ k C ( N i , a k ) \sum_k C\left(\mathcal{N}_i, a_k\right) kC(Ni,ak) 用来表示 N i \mathcal{N}_i Ni 所有可能剪枝行为的总访问次数。 最后,路径中选中的所有节点和剪枝行为对根据以下公式进行更新:
C ( N i , a j ) = C ( N i , a j ) + 1 , W ( N i , a j ) = W ( N i , a j ) + Score ⁡ ( f ( ⋅ ) , G , G ℓ ) . \begin{aligned} C\left(\mathcal{N}_i, a_j\right) & =C\left(\mathcal{N}_i, a_j\right)+1, \\ W\left(\mathcal{N}_i, a_j\right) & =W\left(\mathcal{N}_i, a_j\right)+\operatorname{Score}\left(f(\cdot), \mathcal{G}, \mathcal{G}_{\ell}\right) . \end{aligned} C(Ni,aj)W(Ni,aj)=C(Ni,aj)+1,=W(Ni,aj)+Score(f(),G,G).
经过多次迭代搜索,我们从叶子中选择得分最高的子图作为解释。在早期的迭代中,MCTS倾向于选择访问次数较低的子节点,以便探索不同可能的剪枝操作。在以后的迭代中,MCTS倾向于选择产生更高回报的子节点,即更重要的子图。

2.2【基于博弈论的评分函数】

对于不同子图的重要性评估函数,一个可行的方法是直接把子图输入一个函数 f ( . ) f(.) f(.) 中,然后这个函数给出预测分数作为重要性分数,但是这种方法无法反应不同子图结构之间的联系,这一定程度削弱了可解释性。作者采用Shapley value来作为评分函数。

例如图示中,针对节点 { 5 , 2 , 4 , 3 } \{ 5,2,4,3 \} {5,2,4,3} 子图,他可以和其他player 1和 6 能够组成不同的联盟。

P{ 5,2,4,3,1,6}{ 5,2,4,3,1,6}{ 5,2,4,3,1,6}{ 5,2,4,3,1,6}
S{ 5,2,4,3 }{ 5,2,4,3 }和{1}{ 5,2,4,3 }和{6}{ 5,2,4,3 }和{1}{6}
剩余{1}{6}{6}{1}0

对于子图 G i = { 5 , 2 , 4 , 3 } \mathcal{G}_i= \{5,2,4,3\} Gi={5,2,4,3}的Shapley vaule的计算如下:给定 m m m个节点( V = { v 1 , ⋯   , v i , ⋯   , v m } V=\left\{v_1, \cdots, v_i, \cdots, v_m\right\} V={v1,,vi,,vm})的输入图 G G G , 把子图 G i \mathcal{G}_i Gi 当做一个player,然后子图 G i \mathcal{G}_i Gi 以外节点看做其它的player { v k + 1 , ⋯   , v m } \left\{v_{k+1}, \cdots, v_m\right\} {vk+1,,vm}。则 player 集合有 P = { G i , v k + 1 , ⋯   , v m } P=\left\{\mathcal{G}_i, v_{k+1}, \cdots, v_m\right\} P={Gi,vk+1,,vm}。则玩家 G i \mathcal{G}_i Gi 的 Shaley值定义为:
ϕ ( G i ) = ∑ S ⊆ P \ { G i } ∣ S ∣ ! ( ∣ P ∣ − ∣ S ∣ − 1 ) ! ∣ P ∣ ! m ( S , G i ) , m ( S , G i ) = f ( S ∪ { G i } ) − f ( S ) , \begin{aligned} \phi\left(\mathcal{G}_i\right) & =\sum_{S \subseteq P \backslash\left\{\mathcal{G}_i\right\}} \frac{|S| !(|P|-|S|-1) !}{|P| !} m\left(S, G_i\right), \\ m\left(S, \mathcal{G}_i\right) & =f\left(S \cup\left\{\mathcal{G}_i\right\}\right)-f(S), \end{aligned} ϕ(Gi)m(S,Gi)=SP\{Gi}P!S!(PS1)!m(S,Gi),=f(S{Gi})f(S),
其中 S \mathrm{S} S 是参与玩家 (除去 G i \mathcal{G}_i Gi ) 的可能的玩家集合, P P P 是图中的节点数目, m ( S , G i ) \mathrm{m}(\mathrm{S}, \mathrm{G_i}) m(S,Gi) 代表了玩家 G i \mathrm{G_i} Gi G i \mathcal{G}_i Gi G G G 上的表示)给予联合集合 S \mathrm{S} S 的边缘贡献(marginal contribution)。需要注意的是, m ( S , G i ) \mathrm{m}(\mathrm{S}, \mathrm{G_i}) m(S,Gi) 代表了玩家 G i \mathrm{G_i} Gi 给予联合集合 S \mathrm{S} S 的边缘贡献。它可以通过合并 G i G_i Gi和不合并 G i G_i Gi的预测差值来计算。得到的Shapley值 φ ( G i ) \varphi(\mathcal{G}_i) φ(Gi) 考虑了所有不同的联合来捕获交互性。

上述计算中,需要所有的可能的联盟进行计算,这在大规模复杂图中是不太work的,因此,作者提出加入GNN体系结构信息 f ( ⋅ ) f(·) f()来有效地近似Shapley值。在GNN我们知道是通过聚合邻居的信息来实验目标节点的信息更新,一般是使用 L L L-hop 内的邻居节点进行信息聚合。作者这里将子图 G i \mathcal{G}_i Gi 设定为主要与 L L L-hop 内的邻居节点进行交互,即只是仅仅考虑 L L L-hop 内的邻居节点来近似计算Shapley值。但是不同节点的邻居数量也是不同的,因此作者从目标节点和邻居节点组成的参与者集合中 P \ { G i } P \backslash\left\{\mathcal{G}_i\right\} P\{Gi} 中抽样一个联盟集合 S i S_i Si, 通过多次抽样然后求平均贡献分数的方法来计算其Shapley近似值。

3 总结

文章可以运用在很多领域。例如和因果推理/因果发现/和GNN运用领域等。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值