如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【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)=S∈N∑n![(∣S∣−1)!(n−∣S∣)!]×[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)!
(∣S∣−1)! 种排序,余
(
n
−
∣
S
∣
)
(n- |\mathrm{S}|)
(n−∣S∣) 个成员的排序有 $(n-|S|)! $ 种。所有成员参与的不同的排序组合除以
n
n
n 个成员的随机排序组合就是成员
i
i
i 对于联盟整体所应分得利益的权种。
实例: 共有三家公司,公司 1 , 2 , 3 1 , 2 , 3 1,2,3 单独投资可盈利 v ( 1 ) = 100 , v ( 2 ) = 200 , v ( 3 ) = 300 \mathrm{v}(1)=100 , \mathrm{v}(2)=200 , \mathrm{v}(3)=300 v(1)=100,v(2)=200,v(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)的获利为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∗=∣Gi∣≤NminargmaxScore(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}
a∗U(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)=S⊆P\{Gi}∑∣P∣!∣S∣!(∣P∣−∣S∣−1)!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运用领域等。