[图神经网络] 图节点Node表示---GCN
一. 概括
圖神經(jīng)網(wǎng)絡(luò)已經(jīng)成為深度學(xué)習(xí)領(lǐng)域最熾手可熱的方向之一。GCN具體思想的核心是通過(guò)拉普拉斯矩陣可以對(duì)圖信息進(jìn)行特征分解的特點(diǎn)把該公式定義為圖卷積操作,同時(shí)圖卷積的出現(xiàn)也填補(bǔ)了神經(jīng)網(wǎng)絡(luò)獲取拓?fù)鋱D類(lèi)型特征的空白。
圖譜理論簡(jiǎn)單的概括就是借助于圖的拉普拉斯矩陣的特征值和特征向量來(lái)研究圖的性質(zhì)
GCN(Graph convolution Network)是Convets在圖結(jié)構(gòu)上的自然推廣。卷積神經(jīng)網(wǎng)絡(luò)是采用局部感知區(qū)域、共享權(quán)值和空間域上的降采樣,相對(duì)于位移、縮放和扭曲,具有穩(wěn)定不變的特性,能夠很好的提取圖像的空間特征。圖結(jié)構(gòu)不具備圖片的平移不變性,傳統(tǒng)的卷積方式不適用于圖結(jié)構(gòu)。圖中每個(gè)節(jié)點(diǎn)的鄰域節(jié)點(diǎn)數(shù)目不一致,無(wú)法用同樣尺寸的卷積核進(jìn)行提取.
而GCN的本質(zhì)就是提取圖的結(jié)構(gòu)特征,關(guān)鍵在于如何定義局部接受域(receptive field),主要有兩種方式:
1. Spatial Approach?空域方法 --- 如何定義局部感受域或者是鄰居和節(jié)點(diǎn)的順序 比如給節(jié)點(diǎn)的邊指定方向
2. Spectral Approach? 頻域方法(譜方法)--- 通過(guò)圖的拉普拉斯矩陣的特征值和特征向量對(duì)圖結(jié)構(gòu)進(jìn)行處理。
?
二 圖卷積理論基礎(chǔ)
什么是拉普拉斯矩陣?為什么GCN要用拉普拉斯矩陣?
拉普拉斯變換后的矩陣是正定對(duì)稱(chēng)矩陣,可以進(jìn)行特征分解(譜分解)。
對(duì)于圖G=(V,E), 其Laplacian 矩陣的定義為L(zhǎng)=D?A?
- L為拉普拉斯矩陣Laplacian matrix
- D為對(duì)角度矩陣Degree matrix,對(duì)角線上的元素是頂點(diǎn)的度,即該元素鏈接的元素的個(gè)數(shù)
- A為鄰接矩陣 Adjacency matrix ,即表示任意兩個(gè)頂點(diǎn)之間的鄰接關(guān)系,鄰接則為1,不鄰接則為0
看圖示例,Laplacian 矩陣的計(jì)算方法。
物理意義:這個(gè)矩陣描述圖的拉普拉斯矩陣與圖的性質(zhì)之間的關(guān)系。拉普拉斯矩陣與圖的性質(zhì)滿足L=D?A?這種矩陣關(guān)系,其中圖G=(V,E)的性質(zhì),體現(xiàn)在圖的鄰接矩陣A和圖的度矩陣D上。
在理解了這個(gè)的基礎(chǔ)上,還有其他的幾種拉普拉斯矩陣,上面這種拉普拉斯矩陣只是其中的一種。
通過(guò)上面的公式的物理意義,我們知道了,圖的性質(zhì)可以表示在拉普拉斯矩陣之中,即圖的性質(zhì)可以通過(guò)拉普拉斯矩陣體現(xiàn)出來(lái)。這樣,我們將圖的分析,可以變?yōu)閷?duì)拉普拉斯矩陣的分析。
首次將深度學(xué)習(xí)里卷積操作引入圖數(shù)據(jù)里的方法GCN是Thomas Kpif于2017年在論文Semi-supervised classification with graph convolutional networks提出的,在他的博客里對(duì)模型解釋非常清楚。
對(duì)稱(chēng)歸一化拉普拉斯算子
為何要?dú)w一化?
采用加法規(guī)則時(shí),對(duì)于度大的節(jié)點(diǎn)特征越來(lái)越大,而對(duì)于度小的節(jié)點(diǎn)卻相反,這可能導(dǎo)致網(wǎng)絡(luò)訓(xùn)練過(guò)程中梯度爆炸或者消失的問(wèn)題。
為什么GCN要用拉普拉斯矩陣?
拉普拉斯矩陣矩陣有很多良好的性質(zhì)
(1)拉普拉斯矩陣是對(duì)稱(chēng)矩陣,可以進(jìn)行特征分解(譜分解),這就和GCN的spectral domain對(duì)應(yīng)上了
(2)拉普拉斯矩陣只在中心頂點(diǎn)和一階相連的頂點(diǎn)上(1-hop neighbor)有非0元素,其余之處均為0
(3)通過(guò)拉普拉斯算子與拉普拉斯矩陣進(jìn)行類(lèi)比
?
三. GCN介紹
假設(shè)有一批圖數(shù)據(jù),其中有N個(gè)節(jié)點(diǎn)(node),每個(gè)節(jié)點(diǎn)都有自己的特征,我們?cè)O(shè)這些節(jié)點(diǎn)的特征組成一個(gè)N×D維的矩陣X,然后各個(gè)節(jié)點(diǎn)之間的關(guān)系也會(huì)形成一個(gè)N×N維的矩陣A,也稱(chēng)為鄰接矩陣(adjacency matrix)。
X和A便是我們模型的輸入。
GCN也是一個(gè)神經(jīng)網(wǎng)絡(luò)層,且僅僅是一個(gè)全連接層。(下圖是一個(gè)2層的GCN例子)
它的層與層之間的傳播方式是(網(wǎng)絡(luò)的每一層結(jié)構(gòu))
其中,
(1)A波浪=A+I,I是單位矩陣;
(2)D波浪是A波浪的度矩陣(degree matrix);
(3)H是每一層的特征,對(duì)于輸入層的話,H0就是X;
(4)σ是非線性激活函數(shù)。
?
?
上圖中的GCN輸入一個(gè)圖,通過(guò)若干層GCN每個(gè)node的特征從X變成了Z,但是,無(wú)論中間有多少層,node之間的連接關(guān)系,即A都是共享的。
就是說(shuō)解決了上面說(shuō)的不具備平移不變性問(wèn)題。其思路是:借鑒CNN,將卷積分為三步:
(1)選定中心節(jié)點(diǎn)后,確定鄰域:對(duì)每個(gè)節(jié)點(diǎn)選擇固定個(gè)數(shù)的節(jié)點(diǎn)作為鄰居;
(2)給鄰域結(jié)點(diǎn)編號(hào);
(3)參數(shù)共享:選擇固定大小的窗口進(jìn)行參數(shù)共享。
?
?
假設(shè)構(gòu)造一個(gè)兩層的GCN,激活函數(shù)分別采用ReLU和Softmax,則整體的正向傳播的公式為:
例如,我們有一個(gè)多分類(lèi)問(wèn)題,有10個(gè)類(lèi),F 被設(shè)置為10。在第2層有了10個(gè)維度的向量后,我們將這些向量通過(guò)一個(gè)softmax函數(shù)進(jìn)行預(yù)測(cè)。
最后,我們針對(duì)所有帶標(biāo)簽的節(jié)點(diǎn)計(jì)算cross entropy損失函數(shù):
就可以訓(xùn)練一個(gè)node classification的模型了。由于即使只有很少的node有標(biāo)簽也能訓(xùn)練,作者稱(chēng)他們的方法為半監(jiān)督分類(lèi)。當(dāng)然也可以用這個(gè)方法去做graph classification、link prediction,只是把損失函數(shù)給變化一下即可。
所以利用GCN提取出的特征,我們可以實(shí)現(xiàn)節(jié)點(diǎn)分類(lèi)(node classification)、圖分類(lèi)(graph classification)、邊預(yù)測(cè)(link prediction),還可以得到圖的嵌入表示(graph embedding)
?
四. GCN公式解釋
作者給出了一個(gè)由簡(jiǎn)入繁的過(guò)程來(lái)解釋:
我們的每一層GCN的輸入都是鄰接矩陣A和node的特征H,那么我們直接做一個(gè)內(nèi)積,再乘一個(gè)參數(shù)矩陣W,然后激活一下,就相當(dāng)于一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)層嘛,是不是也可以呢?
實(shí)驗(yàn)證明,即使就這么簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)層,就已經(jīng)很強(qiáng)大了。這個(gè)簡(jiǎn)單模型應(yīng)該大家都能理解吧,這就是正常的神經(jīng)網(wǎng)絡(luò)操作。
但是這個(gè)簡(jiǎn)單模型有幾個(gè)局限性:
- 只使用A的話,由于A的對(duì)角線上都是0,所以在和特征矩陣H相乘的時(shí)候,只會(huì)計(jì)算一個(gè)node的所有鄰居的特征的加權(quán)和,該node自己的特征卻被忽略了。因此,我們可以做一個(gè)小小的改動(dòng),給A加上一個(gè)單位矩陣 I ,這樣就讓對(duì)角線元素變成1了。
- A是沒(méi)有經(jīng)過(guò)歸一化的矩陣,這樣與特征矩陣相乘會(huì)改變特征原本的分布,產(chǎn)生一些不可預(yù)測(cè)的問(wèn)題。所以我們對(duì)A做一個(gè)標(biāo)準(zhǔn)化處理。首先讓A的每一行加起來(lái)為1,我們可以乘以一個(gè)D的逆,D就是度矩陣。我們可以進(jìn)一步把D的拆開(kāi)與A相乘,得到一個(gè)對(duì)稱(chēng)且歸一化的矩陣?
通過(guò)對(duì)上面兩個(gè)局限的改進(jìn),我們便得到了最終的層特征傳播公式:
公式中的與對(duì)稱(chēng)歸一化拉普拉斯矩陣十分類(lèi)似,而在譜圖卷積的核心就是使用對(duì)稱(chēng)歸一化拉普拉斯矩陣,這也是GCN的卷積叫法的來(lái)歷。原論文中給出了完整的從譜卷積到GCN的一步步推導(dǎo)。
A(hat)其實(shí)它就是鄰接矩陣A做的一個(gè)歸一化。下面為了表達(dá)的方便,直接當(dāng)做鄰接矩陣來(lái)分析
?
A是n×n維,H是n×m維
A矩陣的第i行和H矩陣的第j列對(duì)應(yīng)元素相乘在求和就得到Q矩陣的(i,j)個(gè)元素。 仔細(xì)看看圖中高亮的那幾個(gè)向量的內(nèi)部:
GCN的這一步,跟GraphSAGE是一樣的思想,都是把鄰居的特征做一個(gè)聚合(aggregation)。
在GCN中,是直接把鄰居的特征進(jìn)行求和,而實(shí)際不是A跟H相乘,而是A帽子,A帽子是歸一化的A,所以實(shí)際上我畫(huà)的圖中的鄰居關(guān)系向量不應(yīng)該是0,1構(gòu)成的序列,而是歸一化之后的結(jié)果,所以跟H的向量相乘之后,相當(dāng)于是“求平均”。
?
?
?
?
五 從數(shù)學(xué)角度簡(jiǎn)單模擬GCN公司
從圖G中,我們有一個(gè)鄰接矩陣A和一個(gè)度矩陣D。同時(shí)我們也有特征矩陣X。
那么我們?cè)鯓硬拍軓泥従庸?jié)點(diǎn)處得到每一個(gè)節(jié)點(diǎn)的特征值呢?解決方法就在于A和X的相乘。
看看鄰接矩陣的第一行,我們看到節(jié)點(diǎn)A與節(jié)點(diǎn)E之間有連接,得到的矩陣第一行就是與A相連接的E節(jié)點(diǎn)的特征向量(如下圖)。同理,得到的矩陣的第二行是D和E的特征向量之和,通過(guò)這個(gè)方法,我們可以得到所有鄰居節(jié)點(diǎn)的向量之和。
計(jì)算 "和向量矩陣 "AX的第一行。
這里還有一些需要改進(jìn)的地方。
此時(shí)的計(jì)算還存在上局限(1)忽略了節(jié)點(diǎn)本身的特征。按理得到的矩陣第一行應(yīng)該包含結(jié)點(diǎn)A和E的信息,所以做出改進(jìn):
通過(guò)給每個(gè)節(jié)點(diǎn)增加一個(gè)自循環(huán),我們得到新的鄰接矩陣
對(duì)于問(wèn)題(2): 對(duì)于矩陣縮放,我們通常將矩陣乘以對(duì)角線矩陣。在當(dāng)前的情況下,我們要取聚合特征的平均值,或者從數(shù)學(xué)角度上說(shuō),要根據(jù)節(jié)點(diǎn)度數(shù)對(duì)聚合向量矩陣X進(jìn)行縮放。直覺(jué)告訴我們這里用來(lái)縮放的對(duì)角矩陣是和度矩陣D有關(guān)的東西.? 現(xiàn)在的問(wèn)題變成了我們要如何對(duì)和向量進(jìn)行縮放/歸一化?換句話說(shuō):
我們?nèi)绾螌⑧従拥男畔鬟f給特定節(jié)點(diǎn)?我們從我們的老朋友a(bǔ)verage開(kāi)始。在這種情況下,D的逆矩陣(即,)就會(huì)用起作用。基本上,D的逆矩陣中的每個(gè)元素都是對(duì)角矩陣D中相應(yīng)項(xiàng)的倒數(shù)。
例如,節(jié)點(diǎn)A的度數(shù)為2,所以我們將節(jié)點(diǎn)A的聚合向量乘以1/2,而節(jié)點(diǎn)E的度數(shù)為5,我們應(yīng)該將E的聚合向量乘以1/5,以此類(lèi)推。
因此,通過(guò)D取反和X的乘法,我們可以取所有鄰居節(jié)點(diǎn)的特征向量(包括自身節(jié)點(diǎn))的平均值。
?
到目前為止一切都很好。但是你可能會(huì)問(wèn)加權(quán)平均()怎么樣?直覺(jué)上,如果我們對(duì)高低度的節(jié)點(diǎn)區(qū)別對(duì)待,應(yīng)該會(huì)更好。
但我們只是按行縮放,但忽略了對(duì)應(yīng)的列(虛線框)。
為列增加一個(gè)新的縮放器
新的縮放方法給我們提供了 "加權(quán) "的平均值。我們?cè)谶@里做的是給低度的節(jié)點(diǎn)加更多的權(quán)重,以減少高度節(jié)點(diǎn)的影響。這個(gè)加權(quán)平均的想法是,我們假設(shè)低度節(jié)點(diǎn)會(huì)對(duì)鄰居節(jié)點(diǎn)產(chǎn)生更大的影響,而高度節(jié)點(diǎn)則會(huì)產(chǎn)生較低的影響,因?yàn)樗鼈兊挠绊懥Ψ稚⒃谔嗟泥従庸?jié)點(diǎn)上。
因?yàn)檫M(jìn)行了兩次歸一化處理,左乘和右乘了D波浪的-1/2逆。
?
假設(shè)存在一個(gè)圖
該矩陣不再是對(duì)角陣了,為了保持它是對(duì)角陣,?
這樣既得到了近似的歸一化也保持了矩陣對(duì)稱(chēng)性。(左乘是行變換,右乘是列變換。)
?
| ? | ? |
| ? | ? |
?
最后總結(jié):
?
六. GCN的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
1.理論完善;
2.可以捕捉graph的全局信息;
缺點(diǎn):
1.直推式(transducive):無(wú)法直接泛化到新加入(未見(jiàn)過(guò))的節(jié)點(diǎn),為新節(jié)點(diǎn)產(chǎn)生embedding需要額外的操作;
2.輸出的是節(jié)點(diǎn)唯一確定的embedding;
3.很難應(yīng)用在超大圖上:無(wú)論是拉普拉斯計(jì)算還是圖卷積過(guò)程,因?yàn)镚CN其需要對(duì) 整張圖進(jìn)行計(jì)算,所以計(jì)算量會(huì)隨著節(jié)點(diǎn)數(shù)的增加而遞增;
4.基礎(chǔ)GCN是基于無(wú)向圖的;
從圖上的信息傳遞角度考慮,一次圖卷積計(jì)算,就是一次全圖計(jì)算,所以很容易想到,GCN難以應(yīng)用到工業(yè)界;
?
代碼參考:https://github.com/tkipf/pygcn
總結(jié)
以上是生活随笔為你收集整理的[图神经网络] 图节点Node表示---GCN的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网络安全中如何保护电子邮件安全
- 下一篇: 图数据集之cora数据集介绍 --- 适