日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【图卷积网络】Graph Convolutional Network

發(fā)布時間:2023/12/10 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【图卷积网络】Graph Convolutional Network 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 圖卷積網(wǎng)絡(luò)

1.1. 為什么會出現(xiàn)圖卷積網(wǎng)絡(luò)

普通卷積神經(jīng)網(wǎng)絡(luò)研究的對象是具備Euclidean domains的數(shù)據(jù),Euclidean domains data數(shù)據(jù)最顯著的特征是他們具有規(guī)則的空間結(jié)構(gòu),如圖片是規(guī)則的正方形,語音是規(guī)則的一維序列等,這些特征都可以用一維或二維的矩陣來表示,卷積神經(jīng)網(wǎng)絡(luò)處理起來比較高效。

然而,現(xiàn)實生活中很多數(shù)據(jù)不具備規(guī)則的空間結(jié)構(gòu),稱為Non Euclidean data,如,推薦系統(tǒng)、電子交易、分子結(jié)構(gòu)等抽象出來的圖譜。這些圖譜中的每個節(jié)點連接不盡相同,有的節(jié)點有三個連接,有的節(jié)點只有一個連接,是不規(guī)則的結(jié)構(gòu)。對于這些不規(guī)則的數(shù)據(jù)對象,普通卷積網(wǎng)絡(luò)的效果不盡人意。CNN卷積操作配合pooling等在結(jié)構(gòu)規(guī)則的圖像等數(shù)據(jù)上效果顯著,但是如果作者考慮非歐氏空間比如圖(即graph,流形也是典型的非歐結(jié)構(gòu),這里作者只考慮圖),就難以選取固定的卷積核來適應(yīng)整個圖的不規(guī)則性,如鄰居節(jié)點數(shù)量的不確定和節(jié)點順序的不確定。4^44

這里的理解就是,數(shù)據(jù)的組織形式不同,催生出了圖卷積神經(jīng)網(wǎng)路。如果現(xiàn)實生活中都是規(guī)則的數(shù)據(jù),普通的卷積神經(jīng)網(wǎng)絡(luò)就足夠勝任。

總結(jié)一下,圖數(shù)據(jù)中的空間特征具有以下特點:
1) 節(jié)點特征:每個節(jié)點有自己的特征;(體現(xiàn)在點上)
2) 結(jié)構(gòu)特征:圖數(shù)據(jù)中的每個節(jié)點具有結(jié)構(gòu)特征,即節(jié)點與節(jié)點存在一定的聯(lián)系。(體現(xiàn)在邊上)
總地來說,圖數(shù)據(jù)既要考慮節(jié)點信息,也要考慮結(jié)構(gòu)信息,圖卷積神經(jīng)網(wǎng)絡(luò)就可以自動化地既學(xué)習(xí)節(jié)點特征,又能學(xué)習(xí)節(jié)點與節(jié)點之間的關(guān)聯(lián)信息。

綜上所述,GCN是要為除CV、NLP之外的任務(wù)提供一種處理、研究的模型。
圖卷積的核心思想是利用『邊的信息』對『節(jié)點信息』進行『聚合』從而生成新的『節(jié)點表示』。

1.2. 圖卷積網(wǎng)絡(luò)的兩個方向

  • vertex domain(spatial domain):頂點域(空間域)
  • spectral domain:頻域方法(譜方法)

2. 圖卷積網(wǎng)絡(luò)的推導(dǎo)

已有很多優(yōu)秀的博客對圖卷積神經(jīng)網(wǎng)絡(luò)的理論進行了嚴密的推導(dǎo),在這里我就作為一個學(xué)習(xí)記錄,記錄自己的疑問的地方,想要讀詳細推導(dǎo)的,請移步參考文獻。

以下是對一階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ù),一般來說表示的是sigmod\text{sigmod}sigmod。
  • A~=A+λIN\mathbf{\widetilde{A}} = \mathbf{{A}} + \lambda\mathbf{I}_{N}A=A+λIN?, 相當(dāng)于加上了自環(huán),λ\lambdaλ表示一個權(quán)重分配,一般情況下默認λ=1\lambda = 1λ=1
  • D~ij=∑jA~ij\mathbf{\widetilde{D}}_{ij} = \sum_j\mathbf{\widetilde{A}}_{ij}Dij?=j?Aij?,相當(dāng)于對新的鄰接矩陣A~\mathbf{\widetilde{A}}A重新計算度矩陣(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? 這整個部分其實就是對行以及列的平均。
  • 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ò)代碼實現(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ù),而且有默認值,所以是可以直接運行的。

3.1. Cora數(shù)據(jù)集

  • cora.content
    每行代表一個樣本,一行由三部分組成,論文編號,論文單詞向量(1433個獨特的單詞,0代表否,1代表是),論文類別(7類)。[2708,1435],表示有2708個樣本,每個樣本有1435個特征。
  • cora.cites
    cora.cites 共有 5429 行,每一行有兩個論文編號,表示第一個論文先寫,第二個論文引用第一個論文。如果將論文看做圖中的點,那么這5429行便是點之間的5429條邊。

3.2. numpy

# 返回指定長度的標識數(shù)組 # >>> np.identity(3) # array([[1., 0., 0.], # [0., 1., 0.], # [0., 0., 1.]]) np.identity(num) # 構(gòu)造對稱的鄰接矩陣 adj = adj + adj.T.multiply(adj.T > adj) - adj.multiply(adj.T > adj)

不得不說大佬的代碼寫的是真滴優(yōu)雅。對稱矩陣的逆矩陣與自身相等,上述代碼就是利用這個原理實現(xiàn)構(gòu)建堆成矩陣。
疑問:引文網(wǎng)絡(luò)按理來說應(yīng)該是個有向圖,即兩篇文章不一定會相互應(yīng)用,這里強行表示為無向圖是否有問題。

參考文獻:

  • GCN圖卷積網(wǎng)絡(luò)入門詳解
  • 圖卷積網(wǎng)絡(luò) GCN Graph Convolutional Network(譜域GCN)的理解和詳細推導(dǎo)
  • StellaGraph
  • 圖卷積網(wǎng)絡(luò) Graph Convolutional Network(GCN)的理解和詳細推導(dǎo)
  • pygcn
  • 總結(jié)

    以上是生活随笔為你收集整理的【图卷积网络】Graph Convolutional Network的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。