图卷积浅谈 Graph Convolution

图卷积浅谈 Graph Convolution

1.图数据

欧氏空间包含了欧氏几何和非欧几何两种。传统的数据类型,如1维数据(声纹、语音)、2维数据(图像)、三维数据(视频)都是欧式空间上的数据,而图数据和流形数据都是非欧式空间上的数据。
图数据是一种非常重要的数据类型,图是由节点和边组成的,图可以分为有向图和无向图。常见的图结构的数据有:社交网络、引文网络、分子结构等。通过对图数据的研究,可以应用到社交网络、引文网络中节点类型的预测、电商中的推荐系统、生物和化学中对分子结构的预测等。

2.为什么需要使用图卷积

在传统的数据中,如图像,图像是一种网格数据,有标准的形状,在进行卷积操作时,取出固定大小的patch,使用固定大小的卷积核进行卷积操作。而对于图数据来说,每个节点的邻节点数量都是不相同的,因此很难做到使用一个固定大小的卷积核进行卷积,因此传统的卷积方法在图数据上就无法应用。随着图数据的应用越来越多,因此人们开始寻求对图数据的卷积操作。

3.基于频谱域的图卷积

思想:把空间域上的图映射到谱域上进行卷积。
背景知识:傅里叶变换
首先构建一个拉普拉斯矩阵L=D-A
D:顶点度矩阵,对角矩阵
A:邻接矩阵,对称矩阵
拉普拉斯矩阵是半正定对称矩阵(半正定矩阵本身就是对称矩阵),有如下三个性质:
(1)对称矩阵一定n个线性无关的特征向量
(2)半正定矩阵的特征值一定非负
(3)对阵矩阵的特征向量相互正交,即所有特征向量构成的矩阵为正交矩阵。

拉普拉斯矩阵分解:

L=U(λ1λn)U1L=U\left(\begin{array}{ccc}{\lambda_{1}} & {} \\ {} & {\ddots} & {} \\ {} & {} & {\lambda_{n}}\end{array}\right) U^{-1}

U=(u1,u2, ,un)U=\left(\overrightarrow{u_{1}}, \overrightarrow{u_{2}}, \cdots, \overrightarrow{u_{n}}\right)是特征向量矩阵,且UU是一个正交矩阵,UUT=EU U^{T}=E

Λ=(λ1λn)\Lambda=\left(\begin{array}{cccc}{\lambda_{1}} & {} & {} & {} \\ {} & {\ddots} & {} \\ {} & {} & {} & {\lambda_{n}}\end{array}\right)是特征值矩阵,ul\overrightarrow{u_{l}}是特征值λl\overrightarrow{\lambda_{l}}所对应的特征向量。

傅里叶变化

传统的傅里叶变化,F(ω)=F[f(t)]=f(t)eiωtdtF(\omega)=\mathcal{F}[f(t)]=\int f(t) e^{-i \omega t} d t
eiωte^{-i \omega t}即为基函数,其中ω\omega表示基函数的不同频率。基函数与f(t)f(t)积分,即可得到傅里叶变换之后的结果。
而在拉普拉斯矩阵中,我们使用特征向量ui\overrightarrow{u_{i}}表示不同的基函数,而ω\omega所对应的的就是特征值λi\overrightarrow{\lambda_{i}}
在图上进行傅里叶变化:
F(λl)=f^(λl)=i=1Nf(i)ul(i)F\left(\lambda_{l}\right)=\hat{f}\left(\lambda_{l}\right)=\sum_{i=1}^{N} f(i) u_{l}^{*}(i),其中f(i)f(i)是与图的顶点一一对应的,ul(i)u_{l}(i)是第ll个特征向量的第ii个分量,那么类比于传统的傅里叶变化中的积分,在图上的傅里叶变化就相当于是特征值(频率) λl\lambda_l下的, ffλl\lambda_l 对应的特征向量 ulu_l 进行内积运算。ul(i)u_{l}^{*}(i)是特征向量 ulu_l 的共轭向量。

表示成矩阵的形式:

(f^(λ1)f^(λ2)f^(λN))=(u1(1)u1(2)u1(N)u2(1)u2(2)u2(N)uN(1)uN(2)uN(N))(f(1)f(2)f(N))\left(\begin{array}{c}{\hat{f}\left(\lambda_{1}\right)} \\ {\hat{f}\left(\lambda_{2}\right)} \\ {\vdots} \\ {\hat{f}\left(\lambda_{N}\right)}\end{array}\right)=\left(\begin{array}{cccc}{u_{1}(1)} & {u_{1}(2)} & {\dots} & {u_{1}(N)} \\ {u_{2}(1)} & {u_{2}(2)} & {\dots} & {u_{2}(N)} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ {u_{N}(1)} & {u_{N}(2)} & {\dots} & {u_{N}(N)}\end{array}\right)\left(\begin{array}{c}{f(1)} \\ {f(2)} \\ {\vdots} \\ {f(N)}\end{array}\right)

即:f^=UTf\hat{f}=U^{T} f

逆傅里叶变换

传统的傅里叶变换是对频率 ω\omega 求积分:
F1[F(ω)]=12ΠF(ω)eiωtdω\mathcal{F}^{-1}[F(\omega)]=\frac{1}{2 \Pi} \int F(\omega) e^{i \omega t} d \omega
在图上进行逆傅里叶变化,则是对λl\lambda_l积分:
f(i)=l=1Nf^(λl)ul(i)f(i)=\sum_{l=1}^{N} \hat{f}\left(\lambda_{l}\right) u_{l}(i)
用矩阵的形式进行表示:
(f(1)f(2)f(N))=(u1(1)u2(1)uN(1)u1(2)u1(2)uN(2)u1(N)u2(N)uN(N))(f^(λ1)f^(λ2)f^(λN))\left(\begin{array}{c}{f(1)} \\ {f(2)} \\ {\vdots} \\ {f(N)}\end{array}\right)=\left(\begin{array}{cccc}{u_{1}(1)} & {u_{2}(1)} & {\dots} & {u_{N}(1)} \\ {u_{1}(2)} & {u_{1}(2)} & {\dots} & {u_{N}(2)} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ {u_{1}(N)} & {u_{2}(N)} & {\dots} & {u_{N}(N)}\end{array}\right)\left(\begin{array}{c}{\hat{f}\left(\lambda_{1}\right)} \\ {\hat{f}\left(\lambda_{2}\right)} \\ {\vdots} \\ {\hat{f}\left(\lambda_{N}\right)}\end{array}\right)
即:f=Uf^f=U \hat{f}

(1)spectral CNN方法

思想:把待卷积函数和卷积核通过傅里叶变换同时映射到谱域,在谱域上进行卷积操作,再把卷积的结果逆傅里叶变换,得到在空间域上的结果。
具体步骤如下:
给定待卷积函数ff,卷积核hh(随机初始化的参数矩阵,需要进行训练)
对待卷积函数进行傅里叶变化,得到 f^=UTf\hat{f}=U^{T} f
对卷积核进行傅里叶变化,得到h^(λl)=i=1Nh(i)ul(i)\hat{h}\left(\lambda_{l}\right)=\sum_{i=1}^{N} h(i) u_{l}^{*}(i)=(h^(λ1)h^(λn))\left(\begin{array}{cccc}{\hat{h}\left(\lambda_{1}\right)} & {} & {} & {} \\ {} & {\ddots} & {} \\ {} & {} & {\hat{h}\left(\lambda_{n}\right)}\end{array}\right)
两者的卷积操作为:
(h^(λ1)h^(λn))UTf\left(\begin{array}{ccc}{\hat{h}\left(\lambda_{1}\right)} & {} & {} \\ {} & {\ddots} & {} \\ {} & {} & {\hat{h}\left(\lambda_{n}\right)}\end{array}\right) U^{T} f
再对上面的结果进行逆傅里叶变化,得到:
(fh)G=U(h^(λ1)h^(λn))UTf(f * h)_{G}=U\left(\begin{array}{ccc}{\hat{h}\left(\lambda_{1}\right)} & {} & {} \\ {} & {\ddots} & {} \\ {} & {} & {\hat{h}\left(\lambda_{n}\right)}\end{array}\right) U^{T} f

可以简写成:(fh)G=U((UTh)(UTf))(f * h)_{G}=U\left(\left(U^{T} h\right) \odot\left(U^{T} f\right)\right)\odot表示内积运算

(2)ChebNet 切比雪夫图卷积网络

思想:在spectral CNN方法中,参数是全局的,需要n个参数,同时拉普拉斯矩阵分解计算量大。
在本方法中,对spectral CNN进行了改进,使用的是局部k个参数。
具体步骤:
在Chebyshev-CNN中,使用下面的方式定义了一个卷积核:
对于卷积核(h^(λ1)h^(λn))\left(\begin{array}{cccc}{\hat{h}\left(\lambda_{1}\right)} & {} & {} & {} \\ {} & {\ddots} & {} \\ {} & {} & {\hat{h}\left(\lambda_{n}\right)}\end{array}\right)中的每一个元素:

由原来的h^(λl)=i=1Nh(i)ul(i)\hat{h}\left(\lambda_{l}\right)=\sum_{i=1}^{N} h(i) u_{l}^{*}(i)变成了h^(λl)=k=0K1θkλlk\hat{h}\left(\lambda_{l}\right)=\sum_{k=0}^{K-1} \theta_{k} \lambda_{l}^{k},参数个数由n
个变成了k个。

卷积核的矩阵形式表示为gθ(Λ)=k=0K1θkΛkg_{\theta}(\Lambda)=\sum_{k=0}^{K-1} \theta_{k} \Lambda^{k}, θk\theta_{k}是参数
更进一步的,利用切比雪夫多项式进行近似计算:

gθ(Λ)=k=0K1θkTk(Λ~)g_{\theta}(\Lambda)=\sum_{k=0}^{K-1} \theta_{k} T_{k}(\tilde{\Lambda}),其中

切比雪夫多项式Tk(Λ~)T_{k}(\tilde{\Lambda})定义为:T0=1T_{0}=1T1=xT_{1}=xTk(x)=2xTk1(x)Tk2(x)T_{k}(x)=2 x T_{k-1}(x)-T_{k-2}(x)
Λ~=2Λ/λmaxIn\tilde{\Lambda}=2 \Lambda / \lambda_{\max }-I_{n},这一步的目的是把特征值都归一化到(1,1)(-1,1)之间。

卷积操作:
(xgθ)=U(k=0K1θkλlkk=0K1θkλlk)UTx(x * g_{\theta})=U\left(\begin{array}{ccc}{\sum_{k=0}^{K-1} \theta_{k} \lambda_{l}^{k}} & {} & {} \\ {} & {\ddots} & {} \\ {} & {} & {\sum_{k=0}^{K-1} \theta_{k} \lambda_{l}^{k}}\end{array}\right) U^{T} x

在该方法中,通过切比雪夫多项式近似计算,而避免了对拉普拉斯矩阵的分解,减少了计算量,同时参数个数也减少到了k个。
注:一般K取值为1或2,分别表示一阶邻域和二阶邻域。

(3)GCN(Graph Convolutional Network)

思想:该方法是对ChebNet方法的进一步近似,令 k=1k=1λmax=2\lambda_{max}=2

具体步骤:
在上面的方法中,我们已知卷积操作gθxk=0KθkTk(Λ~)xg_{\theta} \star x \approx \sum_{k=0}^{K} \theta_{k} T_{k}(\tilde{\Lambda}) x
Λ~=2Λ/λmaxIn\tilde{\Lambda}=2 \Lambda / \lambda_{\max }-I_{n}
更进一步地,我们令 k=1k=1,得到

gθxk=0K=1θkTk(Λ~)x=θ0T0(Λ~)x+θ1T1(Λ~)xg_{\theta} \star x \approx \sum_{k=0}^{K=1} \theta_{k} T_{k}(\tilde{\Lambda}) x=\theta_{0} T_{0}(\tilde{\Lambda}) x + \theta_{1} T_{1}(\tilde{\Lambda}) x

又因为T0=1T_{0}=1T1=xT_{1}=x,因此上式=θ0x+θ1Λ~x=\theta_{0} x + \theta_{1} \tilde{\Lambda} x

λmax=2\lambda_{max}=2,则 Λ~=2Λ/λmaxIn=ΛIn\tilde{\Lambda}=2 \Lambda / \lambda_{\max }-I_{n}=\Lambda -I_{n}

因此上式=θ0x+θ1(ΛIn)x=θ0xθ1D12AD12x=\theta_{0} x + \theta_{1}(\Lambda -I_{n})x=\theta_{0} x-\theta_{1}D^{-\frac{1}{2}} A D^{-\frac{1}{2}} x

为了避免过拟合,我们减少参数的数量,令θ=θ0=θ1\theta=\theta_{0}=-\theta_{1}

则可以得到gθxθ(IN+D12AD12)xg_{\theta} \star x \approx \theta\left(I_{N}+D^{-\frac{1}{2}} A D^{-\frac{1}{2}}\right) x

因为IN+D12AD12I_{N}+D^{-\frac{1}{2}} A D^{-\frac{1}{2}}(0,2)(0,2)之间的,为了防止梯度消失和梯度爆炸,我们进行重归一化:

IN+D12AD12D~12A~D~12I_{N}+D^{-\frac{1}{2}} A D^{-\frac{1}{2}} \rightarrow \tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}},其中A~=A+IN\tilde{A}=A+I_{N}D~ii=jA~ij\tilde{D}_{i i}=\sum_{j} \tilde{A}_{i j}

(4)总结

基于频谱域的图卷积方法,都需要对整张图进行计算,受内存等条件的限制,难以在大规模的图上进行运算。

4.基于空间域的图卷积

在空间域上进行图卷积的思想:聚合中心节点和邻居节点的特征,然后为中心节点得到一个新的特征表达。

(1) PATCHY-SAN方法

思想:在图上进行卷积操作时,最大的限制就是每个节点的邻节点个数不同,无法使用一个固定大小的卷积核进行卷积,PATCHY-SAN方法是参考CNN对输入的图像进行局部关联的区域进行操作,因此也抽取图中的局部关联区域进行相应的操作,集体来说就是把一整张图切分成多个子图,每个子图的邻节点数量相同,然后使用一个固定大小的卷积核进行卷积操作。
具体步骤:
(1) 从图中选择一个固定长度的节点序列
先通过一个算法(如中心性测量方式),确定节点的排序,从该序列中根据一定的间隔S,选出w个节点构成最终的节点序列
(2) 邻居节点收集
对于上一步获得的节点序列中的每一个节点,利用广度优先搜索扩展邻居节点,和源节点一起构成一个至少k大小的邻域集合。
(3) 图规范化
对邻域集合中的各个节点标号排序,得到k维的接受域(即邻域,给每个中心节点选择k个邻节点),如果第一步中不足w个节点,则直接在这一步中,把接受域都置为全0,相当于padding的作用。
(4) 卷积结构
对于节点属性,k个节点的属性值构成了一个输入通道,对于边的属性,k*k个属性值构成了另一个输入通道。
总结:该方法的关键步骤有两个,一个是如何对节点进行排序,二是如何给选定的w个节点构建接受域。该方法的缺点:把每个节点的邻节点强行约束为k个,会导致后续的预测效果降低。

(2) GraphSage 归纳学习图卷积

源论文:Inductive Representation Learning on Large Graphs
归纳学习和直推式学习:
数据集:标签数据+为标签数据+测试数据
直推式学习:在学习过程中,对所有的数据进行学习,然后对没标记数据进行预测,预测的节点是网络已见节点。直推式学习只能学习一张图上的数据,不能泛化到其他图中。
归纳学习:在学习过程中,测试数据不参与学习,然后对测试数据进行预测,即预测的节点是网络未见节点。归纳学习,可以将学习到的模型泛化到其他图上。

算法思想:每个节点都聚合它的k阶邻域的邻居节点的表示,映射到一个新的空间上,从而得到一个新的表示方法,这个表示方法在它的映射空间中有这样的一些性质:原来关系紧密的节点,在映射空间中,它们的距离更近,原来关系不紧密的节点,在映射空间中,它们的距离更远。
图卷积浅谈 Graph Convolution
算法描述:
输入:图G(V,E)\mathcal{G}(\mathcal{V}, \mathcal{E}),每个节点的特征向量{xv,vV}\left\{\mathbf{x}_{v}, \forall v \in \mathcal{V}\right\},给定KK的值,当K=1K=1时表示一阶邻域,当K=2K=2时表示二阶邻域。

(1)首先聚合其k=1阶邻域内所有节点的特征向量,给节点vv初始化一个表示向量:hv0xv,vV\mathbf{h}_{v}^{0} \leftarrow \mathbf{x}_{v}, \forall v \in \mathcal{V}
(2)聚合节点vv一阶邻域内所有的邻居节点的表示:

hN(v)k\mathbf{h}_{\mathcal{N}(v)}^{k} \leftarrow AGGREGATE k({huk1,uN(v)})_{k}\left(\left\{\mathbf{h}_{u}^{k-1}, \forall u \in \mathcal{N}(v)\right\}\right)

这里聚合的邻居节点,并不是其原始的特征表示形式xu{\mathbf{x}_{u}},而是其k1k-1阶聚合之后的表达形式huk1\mathbf{h}_{u}^{k-1},同时这里的AGGREGATE表示的是聚合函数,之后详细介绍。
(3)把聚合的邻居节点(k1)(k-1)的特征表达和节点本身(k1)(k-1)阶的特征表达进行拼接,得到节点vvkk阶表示:
hvkσ(WkCONCAT(hvk1,hN(v)k))\mathbf{h}_{v}^{k} \leftarrow \sigma\left(\mathbf{W}^{k} \cdot \operatorname{CONCAT}\left(\mathbf{h}_{v}^{k-1}, \mathbf{h}_{\mathcal{N}(v)}^{k}\right)\right)
进行归一化操作,得到:
hvkhvk/hvk2,vV\mathbf{h}_{v}^{k} \leftarrow \mathbf{h}_{v}^{k} /\left\|\mathbf{h}_{v}^{k}\right\|_{2}, \forall v \in \mathcal{V}

(4)聚合完k=1时的所有节点之后,逐个聚合k=2,3...Kk=2,3...K,把最终k=Kk=K的聚合结果赋值给
zvhvK,vV\mathbf{z}_{v} \leftarrow \mathbf{h}_{v}^{K}, \forall v \in \mathcal{V}
聚合函数:
(1)Mean aggregator:hvkσ(WMEAN({hvk1}{huk1,uN(v)})\mathbf{h}_{v}^{k} \leftarrow \sigma\left(\mathbf{W} \cdot \operatorname{MEAN}\left(\left\{\mathbf{h}_{v}^{k-1}\right\} \cup\left\{\mathbf{h}_{u}^{k-1}, \forall u \in \mathcal{N}(v)\right\}\right)\right.

(2)LSTM aggregator:把所有的邻域表达向量通过一个LSTM网络,得到一个聚合的输出结果,因为聚合函数不受输入顺序的影响,因此在输入网络中,可以任意顺序输入。

(3)Pooling aggregator :AGGREGATE k pool =max({σ(W pool huik+b),uiN(v)})_{k}^{\text { pool }}=\max \left(\left\{\sigma\left(\mathbf{W}_{\text { pool }} \mathbf{h}_{u_{i}}^{k}+\mathbf{b}\right), \forall u_{i} \in \mathcal{N}(v)\right\}\right)
虽然文中提出了3中聚合方式,但通过实验证明,Max Pooling aggregator 的效果更好。
损失函数
对于聚合之后的结果,我们要进行参数训练,使用的损失函数为:

JG(zu)=log(σ(zuzv))QEvnPn(v)log(σ(zuzvn))J_{\mathcal{G}}\left(\mathbf{z}_{u}\right)=-\log \left(\sigma\left(\mathbf{z}_{u}^{\top} \mathbf{z}_{v}\right)\right)-Q \cdot \mathbb{E}_{v_{n} \sim P_{n}(v)} \log \left(\sigma\left(-\mathbf{z}_{u}^{\top} \mathbf{z}_{v_{n}}\right)\right)

uuvv是在一个固定长度的随机游走中,一同出现的节点,而Pn(v)P_{n(v)}表示不和uu一同出现的节点。该损失函数如果越小,那么log(σ(zuzv))\log \left(\sigma\left(\mathbf{z}_{u}^{\top} \mathbf{z}_{v}\right)\right)就要越大,zuzv\mathbf{z}_{u}^{\top} \mathbf{z}_{v}就要越大,而zuzv\mathbf{z}_{u}^{\top} \mathbf{z}_{v}表示的是余弦相似性,余弦相似性越大,那么两个向量在映射空间的距离越近。因为在随机游走的路线中一同出现,因此节点uuvv比较相近,因此两者在映射空间的余弦相似性越大。反之,对于不在随机游走的路线中一同出现的节点Pn(v)P_{n(v)},则希望他们的余弦相似性越小,最终当损失函数趋近于平衡时,那么图中相近的点会在空间中聚集,图中远的点,也会在映射空间中分离。

总结:该方法只是学习了节点的一种特征表达,需要在通过一些其他算法,对节点进行分类。同时这种归纳式的学习,可以泛化到其他的图中。

(2) 混合卷积模型MoNet

算法思想:构建了一个混合模型,可以同时应用于图像、图和流形中。
在图像上的卷积,即传统的CNN模型;在图上的卷积,GCN模型;在流形上的CNN,主要有两种模型,一个是Geodesic GCN,另一个是Anisotropic GCN。
具体算法:
卷积操作:
构建一个patch
Dj(x)f=yN(x)wj(u(x,y))f(y),j=1,,JD_{j}(x) f=\sum_{y \in \mathcal{N}(x)} w_{j}(\mathbf{u}(x, y)) f(y), \quad j=1, \ldots, J

JJ表示抽取的patch的大小,

在Geodesic GCN和Anisotropic GCN中,都手工构建了一个固定大小的权重,在本方法中,使用了一个可以训练的参数ΣjRd×d\boldsymbol{\Sigma}_{j} \in R^{ d × d}μjRd×1\boldsymbol{\mu}_{j} \in R^{ d × 1},构建了一个可以被学习的权重wj(u)w_{j}(\mathbf{u}),构建方法如下:

wj(u)=exp(12(uμj)Σj1(uμj))w_{j}(\mathbf{u})=\exp \left(-\frac{1}{2}\left(\mathbf{u}-\boldsymbol{\mu}_{j}\right)^{\top} \boldsymbol{\Sigma}_{j}^{-1}\left(\mathbf{u}-\boldsymbol{\mu}_{j}\right)\right)

最终卷积操作表示为:
(fg)(x)=j=1JgjDj(x)f(f \star g)(x)=\sum_{j=1}^{J} g_{j} D_{j}(x) f

为了计算wj(u)w_{j}(\mathbf{u}),需要先构建伪坐标u(x,y)\mathbf{u}(x, y)
图卷积浅谈 Graph Convolution
原始的CNN、GCNN、ACNN、GCN、DCN模型都相当于混合模型的一种特例,针对不同的模型,构建伪坐标的方式不同:
(1)针对CNN,混合模型把取出的一个patch,给每个像素点赋值一个坐标值,如下图所示,而伪坐标u(x,y)\mathbf{u}(x, y)
图卷积浅谈 Graph Convolution
(2)针对GCNN和DCNN就是对测地极坐标,构建伪坐标
(3)针对GCN,就是针对节点的度,进行构建伪坐标,u(x,y)=(1deg(x),1deg(y))\mathbf{u}(x, y)=\left(\frac{1}{\sqrt{\operatorname{deg}(\mathrm{x})}}, \frac{1}{\sqrt{\operatorname{deg}(\mathrm{y})}}\right)^{\top}

(3) GAT-Graph Attention Networks

思想:图attention是self-attention机制在图数据上的应用,通过自注意力机制学习节点ii和邻节点jj之间的一个权重系数αij\alpha_{i j},该系数表示的是节点ii与节点jj之间的重要性程度,最终节点ii的特征表示就是邻节点的加权和。
具体步骤:
(1)学习权重αij\alpha_{i j}
eij=a(Whi,Whj)e_{i j}=a\left(\mathbf{W} \vec{h}_{i}, \mathbf{W} \vec{h}_{j}\right),其中hi,hj\vec{h}_{i}, \vec{h}_{j}表示的是节点ii和节点jj的特征向量(hi,hj\vec{h}_{i}, \vec{h}_{j}RF\in R^F),Whi,Whj\mathbf{W} \vec{h}_{i}, \mathbf{W} \vec{h}_{j}表示把原始的特征向量映射到另一个空间(Whi,WhjRF\mathbf{W} \vec{h}_{i}, \mathbf{W} \vec{h}_{j} \in \mathbb{R}^{F^{\prime}})。aa表示的是自注意力函数,在本论文中采用的是
eije_{i j}=LeakyReLU (aT[WhiWhj])\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{j}\right]\right),即先把(Whi,Whj)\left(\mathbf{W} \vec{h}_{i}, \mathbf{W} \vec{h}_{j}\right)进行拼接操作,乘以一个权重矩阵aT\overrightarrow{\mathbf{a}}^{T},再通过LeakyReLU**函数得到eije_{i j}
最后把eije_{i j}归一化得到αij\alpha_{i j}

αij=softmaxj(eij)=exp(eij)kNiexp(eik)\alpha_{i j}=\operatorname{softmax}_{j}\left(e_{i j}\right)=\frac{\exp \left(e_{i j}\right)}{\sum_{k \in \mathcal{N}_{i}} \exp \left(e_{i k}\right)}Ni\mathcal{N}_{i}表示节点i的邻节点)
图卷积浅谈 Graph Convolution
(2)构建节点i的特征表示hi\vec{h}_{i}^{\prime}

hi=σ(jNiαijWhj)\vec{h}_{i}^{\prime}=\sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j} \mathbf{W} \vec{h}_{j}\right)
特别的,为了提高模型的稳定性,让模型有更好的表现,可以采取多头自注意力机制,设定K个自注意力机制,每个自注意力机制单独进行学习,最后把学习到的结果进行一个融合,融合的方式有以下两种:

hi=k=1Kσ(jNiαijkWkhj)\vec{h}_{i}^{\prime}=\|_{k=1}^{K} \sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j}^{k} \mathbf{W}^{k} \vec{h}_{j}\right)

hi=σ(1Kk=1KjNiαijkWkhj)\vec{h}_{i}^{\prime}=\sigma\left(\frac{1}{K} \sum_{k=1}^{K} \sum_{j \in \mathcal{N}_{i}} \alpha_{i j}^{k} \mathbf{W}^{k} \vec{h}_{j}\right)

总结:使用GAT模型时,可以在所有的边上和所有的节点上进行并行学习,所有的节点和所有的边都共享同一个自注意力机制。相比于之前的模型,GAT模型的容量更大,有更好的表现性能,最重要的是,GAT不用固定输入的大小,还可以连接所有的邻居节点。

(4) 总结

基于空间的图卷积,可以对图中的节点进行操作,而不用计算一整张图,因此随着节点数量的增加,基于谱域的卷积计算量就会快速增加,而基于空间域的方法,是对图中部分节点进行聚合计算的,因此计算量不会显著增加,因此基于空间域的卷积更适合在大规模的图上做计算,同时还可以使用mini-batch的方法进行训练。
基于谱域的图卷积,被限制只能对无向图进行卷积,而基于空间域的方法,能更灵活的处理有向图的问题。
基于谱域的图卷积,要求图有固定的大小,因此很难泛化到其他图中,而基于空间域的图卷积,可以很好的泛化到其他图上。