由于博主學(xué)疏才淺,經(jīng)過一段時間學(xué)習(xí),只能做到基礎(chǔ)層面的理解,本文就較為通俗地講解一下圖卷積神經(jīng)網(wǎng)絡(luò)算法,下篇文章會講解代碼實(shí)現(xiàn)部分!
文章目錄
GCN-圖卷積神經(jīng)網(wǎng)絡(luò)算法介紹和算法原理
1.?GCN從何而來
2.?GCN是做什么的
3.?GCN算法的原理
3.1?GCN的結(jié)構(gòu)
3.2?GCN的傳播公式
總結(jié)
GCN-圖卷積神經(jīng)網(wǎng)絡(luò)算法介紹和算法原理
1.?GCN從何而來
GCN的概念首次提出于2017年的國際學(xué)習(xí)表征會議(ICLR),成文于2016年:

神經(jīng)網(wǎng)絡(luò)在各種傳統(tǒng)任務(wù)上都體現(xiàn)出了驚人的效果,如:CNN卷積神經(jīng)網(wǎng)絡(luò)系列在圖像領(lǐng)域(例如圖像識別)的結(jié)果、RNN循環(huán)神經(jīng)網(wǎng)絡(luò)系列在序列數(shù)據(jù)(語言處理)上表現(xiàn)出的效果。
傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)中的卷積操作只能處理規(guī)則的數(shù)據(jù)結(jié)構(gòu),例如圖片或者語言,都屬于歐式空間的數(shù)據(jù),因此才有維度的概念,歐式空間的數(shù)據(jù)的特點(diǎn)就是結(jié)構(gòu)很規(guī)則。但是現(xiàn)實(shí)生活中,其實(shí)有很多很多不規(guī)則的數(shù)據(jù)結(jié)構(gòu),典型的就是圖結(jié)構(gòu),或稱拓?fù)浣Y(jié)構(gòu),如社交網(wǎng)絡(luò)、化學(xué)分子結(jié)構(gòu)、知識圖譜等等;即使是語言,實(shí)際上其內(nèi)部也是復(fù)雜的樹形結(jié)構(gòu),也是一種圖結(jié)構(gòu)。
2.?GCN是做什么的
GCN圖卷積神經(jīng)網(wǎng)絡(luò),實(shí)際上跟卷積神經(jīng)網(wǎng)絡(luò)CNN的作用一樣,就是一個特征提取器,只不過它的對象是圖數(shù)據(jù)。GCN精妙地設(shè)計了一種從圖數(shù)據(jù)中提取特征的方法,從而讓我們可以使用這些特征去對圖數(shù)據(jù)進(jìn)行節(jié)點(diǎn)分類(node classification)、圖分類(graph classification)、邊預(yù)測(link prediction),還可以順便得到圖的嵌入表示(graph embedding),可見用途廣泛。
這里的圖數(shù)據(jù)指的不是圖片,而是這種具有圖結(jié)構(gòu)的數(shù)據(jù):


3.?GCN算法的原理
假設(shè)有一批圖數(shù)據(jù),其中有N個節(jié)點(diǎn)(node),每個節(jié)點(diǎn)都有自己的特征,假設(shè)特征一共有D個,我們設(shè)這些節(jié)點(diǎn)的特征組成一個N×D維的矩陣X,然后各個節(jié)點(diǎn)之間的關(guān)系也會形成一個N×N維的矩陣A,也稱為鄰接矩陣(adjacency matrix)。X和A便是我們模型的輸入。
GCN算法的步驟簡單可總結(jié)為:
第一步聚類
第二步更新
第三步循環(huán)
對于每個節(jié)點(diǎn),我們在聚類時從它的所有鄰居節(jié)點(diǎn)處獲取其特征信息,當(dāng)然也包括它自身的特征。
舉個例子
我們想通過聚類,估計出一個人的工資水平
因?yàn)橛幸痪浜苡忻碾u湯 『你朋友圈的平均工資就是你的工資』
先假設(shè):一個人所有朋友的工資平均值等于那個人的工資,利用社交網(wǎng)絡(luò)(graph圖)中的關(guān)聯(lián)信息(edge邊),我們可以得到節(jié)點(diǎn)的有效信息
?當(dāng)前節(jié)點(diǎn)可以用相鄰節(jié)點(diǎn)推斷出來。我們先考慮用相鄰節(jié)點(diǎn)的加和來代表當(dāng)前節(jié)點(diǎn):
如果圖中的邊沒有權(quán)重,Xj是每個節(jié)點(diǎn)的特征值, Aij也就是節(jié)點(diǎn)間的關(guān)系只能為0或1。當(dāng)一個節(jié)點(diǎn)不是i的鄰居節(jié)點(diǎn)時,Aij就是0。
那么我們將Aij寫成描述節(jié)點(diǎn)間關(guān)系的鄰接矩陣A,就能得到:
但是沒有權(quán)重顯然不合適,因?yàn)榧偃缥液婉R云見過一面,相互僅是認(rèn)識,但是馬化騰和馬云是鐵哥們,那么將我與馬云間聯(lián)系的權(quán)重和馬化騰與馬云間聯(lián)系的權(quán)重都設(shè)為1就是不合理的,所以在處理問題時,Aij一定可以為0到1的任意值,這樣才可以科學(xué)的計算我的工資水平。
并且只考慮朋友的工資水平也是不科學(xué)的,比如有的人會拍領(lǐng)導(dǎo)馬屁,那么他的工資就會比沒有拍馬屁技能的同事高。
所以要想準(zhǔn)確評估他的工資,還要加上他自身的一些特征Xi。在矩陣?yán)锞褪羌由献赃B接矩陣I:
截止目前,我們已經(jīng)結(jié)合節(jié)點(diǎn)特征,將朋友們的工資科學(xué)地進(jìn)行了求和,那么接下來就需要取平均值了
因?yàn)榭赡苣承┘夹g(shù)高薪大佬,朋友不多但是個個有錢,而某些人善于交際,狐朋狗友就很多,雖然狐朋狗友的工資低,但是也架不住多
所以需要求平均,求平均的公式:
分母是節(jié)點(diǎn)個數(shù),分子就是節(jié)點(diǎn)特征,然后進(jìn)行求和。
到目前為止,我們就通過求平均,得到了一個人的工資水平,當(dāng)然簡單的求平均肯定是不完善的;
假如我的朋友只有一個大佬,那么我和大佬的關(guān)系網(wǎng)絡(luò)如果用平均算法的話就等同了,所以直接把B的特征賦給A肯定是不合適的
?
而GCN中的傳播公式就可以解決這個問題:
3.1?GCN的結(jié)構(gòu)
GCN是一個多層的圖卷積神經(jīng)網(wǎng)絡(luò),每一個卷積層僅處理一階鄰域信息,通過疊加若干卷積層可以實(shí)現(xiàn)多階鄰域的信息傳遞。
從輸入層開始,前向傳播經(jīng)過圖卷積層運(yùn)算,然后經(jīng)過softmax激活函數(shù)的運(yùn)算得到預(yù)測分類概率分布。
softmax的作用是將卷積網(wǎng)絡(luò)的輸出的結(jié)果進(jìn)行概率化,我直接將Softmax理解為依據(jù)公式運(yùn)算出樣本點(diǎn)的類別。
假設(shè)我們構(gòu)造一個兩層的GCN,激活函數(shù)分別采用ReLU和Softmax,則整體的正向傳播的公式為:
該模型實(shí)際是輸入層+隱藏層(圖卷積層,類似全連接層的作用)+SoftMax+輸出層構(gòu)成的,GCN模型可視化為:
GCN輸入一個圖,通過若干層GCN每個node的特征從X變成了Z,但是,無論中間有多少層,node之間的連接關(guān)系,即鄰接矩陣A,都是共享的。?
3.2?GCN的傳播公式
GCN就是一個神經(jīng)網(wǎng)絡(luò)層,每一層GCN的輸入都是鄰接矩陣A和node的特征H,它的層與層之間的傳播方式是:
下圖中的特征矩陣x相當(dāng)于公式中的H(最初的特征矩陣是給定的數(shù)據(jù)或通過tf-idf等方法轉(zhuǎn)向量得到的):
這個公式中:
A波浪=A+I,I是單位矩陣,相當(dāng)于是無向圖G的鄰接矩陣加上自連接(就是每個頂點(diǎn)和自身加一條邊)
如此一來消息聚合時不僅能聚合來自其他結(jié)點(diǎn)的消息,還能聚合結(jié)點(diǎn)自身的消息。
??
D波浪是A波浪的度矩陣(degree matrix),公式為D波浪ii=∑j A波浪(無向圖里,節(jié)點(diǎn)的度就是節(jié)點(diǎn)連接的邊的個數(shù)。)
H是每一層的特征,對于輸入層的話,H就是X(初始就給定的)
σ是像Softmax、ReLU這樣的非線性激活函數(shù)
W就是每一層模型的參數(shù),也就是模型給節(jié)點(diǎn)特征乘上的權(quán)重,這是模型需要訓(xùn)練的參數(shù),即權(quán)值矩陣
他們之間的運(yùn)算,就是各矩陣相乘,部分內(nèi)容就長這樣:
?
?其實(shí)我們需要重點(diǎn)關(guān)注的就是上面畫紅線的部分,也就是對稱歸一化的拉普拉斯矩陣,拉普拉斯矩陣是對稱矩陣,可以進(jìn)行特征分解(譜分解)
?
回到最開始的問題,這個公式會考慮到B節(jié)點(diǎn)的度,那么A就不會分到B很多的特征,因?yàn)锳對B來說只是萬千朋友的一個,分母就變大了。
總結(jié)
GCN就是在平均法的基礎(chǔ)上,加入了針對每個節(jié)點(diǎn)度的歸一化。
GCN的每一層通過鄰接矩陣A和特征矩陣H(l)相乘得到每個頂點(diǎn)鄰居特征的匯總,然后再乘上一個參數(shù)矩陣W(l),加上激活函數(shù)σ做一次非線性變換得到聚合鄰接頂點(diǎn)特征的矩陣H(l+1)。
之所以鄰接矩陣A要加上一個單位矩陣I,是因?yàn)槲覀兿M谶M(jìn)行信息傳播的時候頂點(diǎn)自身的特征信息也得到保留。 而對鄰居矩陣A波浪進(jìn)行歸一化操作D^(-1/2)A*D是為了信息傳遞的過程中保持特征矩陣H的原有分布,防止一些度數(shù)高的頂點(diǎn)和度數(shù)低的頂點(diǎn)在特征分布上產(chǎn)生較大的差異。
總之就是GCN設(shè)計了一個很精妙的公式,用這個公式就可以很好地提取圖數(shù)據(jù)的特征。文章來源:http://www.zghlxwxcb.cn/news/detail-791157.html
提取出來的特征就可以用于節(jié)點(diǎn)分類,節(jié)點(diǎn)關(guān)系預(yù)測等工作。文章來源地址http://www.zghlxwxcb.cn/news/detail-791157.html
到了這里,關(guān)于GCN-圖卷積神經(jīng)網(wǎng)絡(luò)算法講解(通俗版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!