【图卷积网络】Graph Convolutional Network
1. 圖卷積網(wǎng)絡(luò)
1.1. 為什么會(huì)出現(xiàn)圖卷積網(wǎng)絡(luò)
普通卷積神經(jīng)網(wǎng)絡(luò)研究的對(duì)象是具備Euclidean domains的數(shù)據(jù),Euclidean domains data數(shù)據(jù)最顯著的特征是他們具有規(guī)則的空間結(jié)構(gòu),如圖片是規(guī)則的正方形,語(yǔ)音是規(guī)則的一維序列等,這些特征都可以用一維或二維的矩陣來(lái)表示,卷積神經(jīng)網(wǎng)絡(luò)處理起來(lái)比較高效。
然而,現(xiàn)實(shí)生活中很多數(shù)據(jù)不具備規(guī)則的空間結(jié)構(gòu),稱為Non Euclidean data,如,推薦系統(tǒng)、電子交易、分子結(jié)構(gòu)等抽象出來(lái)的圖譜。這些圖譜中的每個(gè)節(jié)點(diǎn)連接不盡相同,有的節(jié)點(diǎn)有三個(gè)連接,有的節(jié)點(diǎn)只有一個(gè)連接,是不規(guī)則的結(jié)構(gòu)。對(duì)于這些不規(guī)則的數(shù)據(jù)對(duì)象,普通卷積網(wǎng)絡(luò)的效果不盡人意。CNN卷積操作配合pooling等在結(jié)構(gòu)規(guī)則的圖像等數(shù)據(jù)上效果顯著,但是如果作者考慮非歐氏空間比如圖(即graph,流形也是典型的非歐結(jié)構(gòu),這里作者只考慮圖),就難以選取固定的卷積核來(lái)適應(yīng)整個(gè)圖的不規(guī)則性,如鄰居節(jié)點(diǎn)數(shù)量的不確定和節(jié)點(diǎn)順序的不確定。4^44
這里的理解就是,數(shù)據(jù)的組織形式不同,催生出了圖卷積神經(jīng)網(wǎng)路。如果現(xiàn)實(shí)生活中都是規(guī)則的數(shù)據(jù),普通的卷積神經(jīng)網(wǎng)絡(luò)就足夠勝任。
總結(jié)一下,圖數(shù)據(jù)中的空間特征具有以下特點(diǎn):
1) 節(jié)點(diǎn)特征:每個(gè)節(jié)點(diǎn)有自己的特征;(體現(xiàn)在點(diǎn)上)
2) 結(jié)構(gòu)特征:圖數(shù)據(jù)中的每個(gè)節(jié)點(diǎn)具有結(jié)構(gòu)特征,即節(jié)點(diǎn)與節(jié)點(diǎn)存在一定的聯(lián)系。(體現(xiàn)在邊上)
總地來(lái)說(shuō),圖數(shù)據(jù)既要考慮節(jié)點(diǎn)信息,也要考慮結(jié)構(gòu)信息,圖卷積神經(jīng)網(wǎng)絡(luò)就可以自動(dòng)化地既學(xué)習(xí)節(jié)點(diǎn)特征,又能學(xué)習(xí)節(jié)點(diǎn)與節(jié)點(diǎn)之間的關(guān)聯(lián)信息。
綜上所述,GCN是要為除CV、NLP之外的任務(wù)提供一種處理、研究的模型。
圖卷積的核心思想是利用『邊的信息』對(duì)『節(jié)點(diǎn)信息』進(jìn)行『聚合』從而生成新的『節(jié)點(diǎn)表示』。
1.2. 圖卷積網(wǎng)絡(luò)的兩個(gè)方向
- vertex domain(spatial domain):頂點(diǎn)域(空間域)
- spectral domain:頻域方法(譜方法)
2. 圖卷積網(wǎng)絡(luò)的推導(dǎo)
已有很多優(yōu)秀的博客對(duì)圖卷積神經(jīng)網(wǎng)絡(luò)的理論進(jìn)行了嚴(yán)密的推導(dǎo),在這里我就作為一個(gè)學(xué)習(xí)記錄,記錄自己的疑問(wèn)的地方,想要讀詳細(xì)推導(dǎo)的,請(qǐng)移步參考文獻(xiàn)。
以下是對(duì)一階ChebNet(1stChebNet)-GCN的記錄:
H(l+1)=f(H(l),A)=σ(D~?12A~D~?12H(l)W(l))(1)\mathbf{H}^{(l+1)} = f(\mathbf{H}^{(l)},\mathbf{A}) = \sigma(\mathbf{\widetilde{D}}^{-\frac{1}{2}}\mathbf{\widetilde{A}}\mathbf{\widetilde{D}}^{-\frac{1}{2}}\mathbf{H}^{(l)}\mathbf{W}^{(l)}) \tag{1}H(l+1)=f(H(l),A)=σ(D?21?AD?21?H(l)W(l))(1)
- H(l),H(l+1)\mathbf{H}^{(l)}, \mathbf{H}^{(l+1)}H(l),H(l+1) 分別表示第lll層網(wǎng)絡(luò)的輸入和輸出。
- fff 相當(dāng)于lll層擬合的函數(shù),函數(shù)的輸入?yún)?shù)是H(l),A\mathbf{H}^{(l)},\mathbf{A}H(l),A,其中A\mathbf{A}A表示圖的鄰接矩陣。
- σ\sigmaσ指任意一種激活函數(shù),一般來(lái)說(shuō)表示的是sigmod\text{sigmod}sigmod。
- A~=A+λIN\mathbf{\widetilde{A}} = \mathbf{{A}} + \lambda\mathbf{I}_{N}A=A+λIN?, 相當(dāng)于加上了自環(huán),λ\lambdaλ表示一個(gè)權(quán)重分配,一般情況下默認(rèn)λ=1\lambda = 1λ=1。
- D~ij=∑jA~ij\mathbf{\widetilde{D}}_{ij} = \sum_j\mathbf{\widetilde{A}}_{ij}Dij?=∑j?Aij?,相當(dāng)于對(duì)新的鄰接矩陣A~\mathbf{\widetilde{A}}A重新計(jì)算度矩陣(degree matrix)。
- D~?12A~D~?12\mathbf{\widetilde{D}}^{-\frac{1}{2}}\mathbf{\widetilde{A}}\mathbf{\widetilde{D}}^{-\frac{1}{2}}D?21?AD?21? 這整個(gè)部分其實(shí)就是對(duì)行以及列的平均。
- W(l)\mathbf{W}^{(l)}W(l) 表示的是lll層的網(wǎng)絡(luò)參數(shù),訓(xùn)練網(wǎng)絡(luò)本質(zhì)上就是反向傳播更新網(wǎng)絡(luò)參數(shù)。
3. 圖卷積網(wǎng)絡(luò)代碼實(shí)現(xiàn)
代碼Github地址
本次閱讀的代碼使用的是pytorch。
代碼入口是pygcn/train.py
3.1. argparse
import argparse parser = argparse.ArgumentParser() parser.add_argument('--no-cuda', action='store_true', default=False,help='Disables CUDA training.') parser.add_argument('--fastmode', action='store_true', default=False,help='Validate during training pass.') parser.add_argument('--seed', type=int, default=42, help='Random seed.') parser.add_argument('--epochs', type=int, default=200,help='Number of epochs to train.') parser.add_argument('--lr', type=float, default=0.01,help='Initial learning rate.') parser.add_argument('--weight_decay', type=float, default=5e-4,help='Weight decay (L2 loss on parameters).') parser.add_argument('--hidden', type=int, default=16,help='Number of hidden units.') parser.add_argument('--dropout', type=float, default=0.5,help='Dropout rate (1 - keep probability).')args = parser.parse_args()argparse參考
這整段代碼表示的是可以從命令行窗口獲取超參數(shù),可以注意的是都是可選參數(shù),而且有默認(rèn)值,所以是可以直接運(yùn)行的。
3.1. Cora數(shù)據(jù)集
- cora.content
每行代表一個(gè)樣本,一行由三部分組成,論文編號(hào),論文單詞向量(1433個(gè)獨(dú)特的單詞,0代表否,1代表是),論文類別(7類)。[2708,1435],表示有2708個(gè)樣本,每個(gè)樣本有1435個(gè)特征。 - cora.cites
cora.cites 共有 5429 行,每一行有兩個(gè)論文編號(hào),表示第一個(gè)論文先寫(xiě),第二個(gè)論文引用第一個(gè)論文。如果將論文看做圖中的點(diǎn),那么這5429行便是點(diǎn)之間的5429條邊。
3.2. numpy
# 返回指定長(zhǎng)度的標(biāo)識(shí)數(shù)組 # >>> np.identity(3) # array([[1., 0., 0.], # [0., 1., 0.], # [0., 0., 1.]]) np.identity(num) # 構(gòu)造對(duì)稱的鄰接矩陣 adj = adj + adj.T.multiply(adj.T > adj) - adj.multiply(adj.T > adj)不得不說(shuō)大佬的代碼寫(xiě)的是真滴優(yōu)雅。對(duì)稱矩陣的逆矩陣與自身相等,上述代碼就是利用這個(gè)原理實(shí)現(xiàn)構(gòu)建堆成矩陣。
疑問(wèn):引文網(wǎng)絡(luò)按理來(lái)說(shuō)應(yīng)該是個(gè)有向圖,即兩篇文章不一定會(huì)相互應(yīng)用,這里強(qiáng)行表示為無(wú)向圖是否有問(wèn)題。
參考文獻(xiàn):
總結(jié)
以上是生活随笔為你收集整理的【图卷积网络】Graph Convolutional Network的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: web项目jsp中无法引入js问题
- 下一篇: 光纤测试时怎么选择对应项目的测试标准及测