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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【论文解读】GCN论文总结

發布時間:2025/3/12 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【论文解读】GCN论文总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本次要總結和分享的是ICLR2017的關于GCN方面的代表作之一論文:SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS,論文鏈接為 paper[1],參考的實現代碼為pygcn[2]

文章目錄

  • 先導知識

  • 論文動機

  • 模型

    • 切比雪夫逼近卷積核函數

    • 圖上的快速近似卷積

    • 半監督節點分類

  • 實驗

  • 核心代碼分析

  • 個人總結

先導知識

在讀這篇論文之前,需要對先導論文 Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering 有著深入的理解,否則里面數學推導會讓人感到迷茫。關于該先導論文,之前的博文已經對其推導過程進行了詳細分析,Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering[3]

GCN論文閱讀總結

感興趣可以一看,因為其數學推導過程比較復雜,下面進行下簡單梳理:

  • 回顧卷積定義

    在維基百科里,可以得到卷積操作的定義: 為 的卷積

    • 離散形式

    • 連續形式

    • 用傅里葉變換來表示卷積

      表示傅里葉變換, 傅里葉逆變換

      也即是:即對于函數 與 兩者的卷積是其函數傅立葉變換乘積的逆變換

    • 在graph上的卷積形式推導過程

      上式中的 表示卷積核函數(帶參數), 表示是graph的鄰接矩陣 的拉普拉斯矩陣 的特征向量

      由此得到圖上的卷積形式:

      其中 為激活函數, 就是卷積核,注意 為拉普拉斯矩陣 特征值組成的對角矩陣,所以 也是對角的

      推導可得卷積核函數 如下:

      繼續推導可得:

      上式中 為graph的鄰接矩陣A的拉普拉斯矩陣, 為卷積核參數。

    • 切比雪夫逼近卷積核

      其中 表示切比雪夫多項式, 表示模型需要學習的參數, 表示re-scaled的 特征值對角矩陣,進行這個shift變換的原因是Chebyshev多項式的輸入要在 之間,因此 ?( 為 的最大特征值)

      由此可以進行遞推逼近:

    • 熟悉了上述推導過程,那么對于本文要總結的論文理解起來就簡單多了。

      論文動機

      • 考慮對圖(如論文引用網絡)中的節點(如文檔)進行分類的問題,其中僅有一小部分節點帶有label信息。這個問題可以被定義為基于圖的半監督學習,其中標簽信息通過某種形式的基于圖的顯式正則化在圖上進行平滑,比如在損失函數上加上拉普拉斯正則項,但是這種做法的前提假設是:在圖中相鄰連接的節點可能擁有相似的標簽信息,這種假設可能會限制建模能力,因為圖中的邊不一定連接擁有相似的節點,但可能包含額外的信息。

      • 本論文所提方法,能直接對graph進行編碼,避免了正則平滑, 作用在圖的鄰接矩陣上進行有監督學習,并且能學習到每個節點的embedding向量。

      • 本論文受上面所提到的先導論文啟發,限制切比雪夫多項式 ,提出了一種可在圖上進行快速卷積的模型,并且提出了 ,在數學上進行了推導,證明了該模型的合理性;同時展示了這種基于圖的神經網絡模型如何進行半監督的分類。

      模型

      該部分直接在先導知識基礎上進行數學公式的推導,最終得到本論文所提的模型。

      切比雪夫逼近卷積核函數

      在先導知識中,卷積核可等于

      則有:

      圖上的快速近似卷積

      在切比雪夫逼近卷積核函數時,本論文中限制其切比雪夫項數 ,同時進一步近似 ,則可得:

      可以看出上述公式是一種線性的變換。

      在 Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering[4] 中,分析過,切比雪夫的項數就是就是圖卷積的感受野,而這里限制了項數 K= 1,相當于只做了所謂的 first-order approximation,每個節點考慮其一階鄰居對他的影響。

      這樣做有一些好處的,比如能夠緩解局部鄰域結構的過度擬合問題,同時這種分層線性的計算方式,允許我們構建更深層次的模型,可以提高建模能力,比如當疊加兩層的卷積時,相當于每個節點可以把 2-hops 鄰居的特征加以聚合。這樣就避免了k=1時只能考慮一階鄰居的影響了。

      進一步的,為了限制模型參數,降低每層的計算等,令 ,則有:

      的特征值在 范圍來,當網絡疊加更多層時,容易出現梯度消散/爆炸的問題。論文中提出了 ,即:

      注意:從數學公式的推導上看在 的基礎上處理是合理的,同時從分析上看也是合理的,因為鄰接矩陣 對角線為0,在卷積時,每個節點只能聚合其相鄰節點特征,卻忽略了自身特征,因此加上 本身也是有必要的。這種 的操作可理解為 ,也即增加自循環。

      這種 操作,保證了結果的對稱性,同時做到了近似歸一化。,針對不同的數據集, 取值不一樣,

      因此卷積過程可表達為如下:

      上式中 , 為樣本數量, 為輸入通道數(也就是每個節點的特征向量維度), 為卷積核參數矩陣, 為卷積后的矩陣。

      上式可以形象的以下圖表示:

      半監督節點分類

      上圖中 表示每個輸入節點的特征向量維度, 表示卷積后的feature_maps個數,多層疊加時,最后一層F為類別個數。

      上面我們得到:

      這里記:,這一步可以在預處理階段計算好,疊加兩層卷積,則可以得:

      上式中, , 為樣本數量, 為輸入通道數(也就是每個節點的特征向量維度),, 為 輸入層到隱藏層的參數矩陣,是模型需要學習的,有 個 , 為隱藏層到輸出層的參數矩陣,是模型需要進行學習的。卷積結果為 ,F可理解為類別個數。

      上述公式中是以row-wise進行softmax, 可理解為屬于某個類別的logits, 可理解為屬于所有類別的logits。則模型的損失函數可表示為如下:

      上式其實就是多分類上的cross entropy loss,中 為帶標簽的節點數量。注意第二項是在 上計算。

      通過上面的推導分析,我們可以得到本論文圖卷積的數學公式如下:上式中 表示卷積的隱藏層個數(疊加層數,可聚合節點本身與其 的節點特征,可理解卷積感受野), 表示第 層的隱藏層輸出,剛開始 , 表示模型需要學習的參數矩陣。注意在疊加多層時, 是不變的。

      單從這個公式來看,本論文所提的圖上的卷積方式其實很簡單的。

      實驗

      數據集:論文中用到了上述四個數據集,上表中展示了每個數據集的節點數量、邊的數量、類別數、特征維度、帶標簽節點占比。

      以Citation network(Citeseer,Cora,Pubmed)舉例,該網絡是大量文檔組成,以文檔為節點,以是否有"引用“來連邊。其中每個節點的原始輸入特征有詞袋特征來定義獲得,每個節點都有唯一所屬的類別(class label)。由此構成了一張圖。

      實驗的一些參數等設置,這里就不詳敘述了。

      實驗結果:上圖的實驗中,評價指標為節點分類的ACC,加粗的GCN(this paper) 為論文中的所提的有兩層疊加的圖卷積網絡,GCN(rand,splits) 與GCN(this paper) 網絡結構一樣,只不過數據集劃分上不一樣而已。由上圖可以看出,本論文提出的GCN網絡分類效果最好。

      除此之外,論文中還和以往的一些GCN網絡進行了對比實驗:

      在這里插入圖片描述

      顯然也是本論文中所提的帶有Renormalization trick的GCN效果最好。

      核心代碼分析

      拋開一系列的數學推導不管,其實本論文所提的圖卷積方法可用數學公式表示如下:

      初始時:,而 始終是不變的,可以提前計算好。因此代碼實現起來其實非常簡單了。

      代碼參考的是pygcn[5]

      開源代碼中使用的數據集是Cora dataset,關于文檔引用的數據集,文檔定義為圖中的節點,文檔間是否有引用關系定義為邊。由詞袋特征作為節點初始特征,任務是對節點進行分類。

      pygcn/data/cora/ 下有兩個文本文件

      • cora.cites 每行格式如:ID of cited paper \t ID of citing paper

      • cora.content 每行格式如:paper_id ?word_attributes class_label

      加載上述兩個文件,進行構圖,得到歸一化后的鄰接矩陣、提取節點特征、label等

      def?load_data(path="../data/cora/",?dataset="cora"):"""Load?citation?network?dataset?(cora?only?for?now)"""print('Loading?{}?dataset...'.format(dataset))idx_features_labels?=?np.genfromtxt("{}{}.content".format(path,?dataset),dtype=np.dtype(str))features?=?sp.csr_matrix(idx_features_labels[:,?1:-1],?dtype=np.float32)labels?=?encode_onehot(idx_features_labels[:,?-1])#?build?graphidx?=?np.array(idx_features_labels[:,?0],?dtype=np.int32)##?獲得每個paper_id在cora.content中所在的行數idx_map?=?{j:?i?for?i,?j?in?enumerate(idx)}?edges_unordered?=?np.genfromtxt("{}{}.cites".format(path,?dataset),dtype=np.int32)##?將有連接的一對節點(paper_id在cora.content的行數)作為一行,生成一個np.arrayedges?=?np.array(list(map(idx_map.get,?edges_unordered.flatten())),dtype=np.int32).reshape(edges_unordered.shape)##?鄰接矩陣A,有邊為1,反之為0adj?=?sp.coo_matrix((np.ones(edges.shape[0]),?(edges[:,?0],?edges[:,?1])),shape=(labels.shape[0],?labels.shape[0]),dtype=np.float32)#?將有向邊變成對稱的無向邊adj?=?adj?+?adj.T.multiply(adj.T?>?adj)?-?adj.multiply(adj.T?>?adj)##?歸一化features?=?normalize(features)adj?=?normalize(adj?+?sp.eye(adj.shape[0]))idx_train?=?range(140)idx_val?=?range(200,?500)idx_test?=?range(500,?1500)features?=?torch.FloatTensor(np.array(features.todense()))labels?=?torch.LongTensor(np.where(labels)[1])adj?=?sparse_mx_to_torch_sparse_tensor(adj)idx_train?=?torch.LongTensor(idx_train)idx_val?=?torch.LongTensor(idx_val)idx_test?=?torch.LongTensor(idx_test)return?adj,?features,?labels,?idx_train,?idx_val,?idx_testdef?normalize(mx):"""Row-normalize?sparse?matrix"""rowsum?=?np.array(mx.sum(1))r_inv?=?np.power(rowsum,?-1).flatten()r_inv[np.isinf(r_inv)]?=?0.r_mat_inv?=?sp.diags(r_inv)mx?=?r_mat_inv.dot(mx)return?mx

      顯然上述的鄰居矩陣的歸一化為這種形式:,而非 。矩陣的歸一化有多種,在上面的實驗分析部分也做了不同歸一化的對比。因此在實際實驗中,可進行嘗試,選擇效果較好的一種。

      class?GCN(nn.Module):def?__init__(self,?nfeat,?nhid,?nclass,?dropout):super(GCN,?self).__init__()self.gc1?=?GraphConvolution(nfeat,?nhid)self.gc2?=?GraphConvolution(nhid,?nclass)self.dropout?=?dropoutdef?forward(self,?x,?adj):x?=?F.relu(self.gc1(x,?adj))x?=?F.dropout(x,?self.dropout,?training=self.training)x?=?self.gc2(x,?adj)return?F.log_softmax(x,?dim=1)

      上述的GCN代碼就很簡單的,就是疊加了兩層卷積的網絡,在實際訓練時,網絡的輸入是 和歸一化后的鄰接矩陣 ,具體可再看這個卷積是怎么做的,代碼如下:

      class?GraphConvolution(Module):"""Simple?GCN?layer,?similar?to?https://arxiv.org/abs/1609.02907"""def?__init__(self,?in_features,?out_features,?bias=True):super(GraphConvolution,?self).__init__()self.in_features?=?in_featuresself.out_features?=?out_featuresself.weight?=?Parameter(torch.FloatTensor(in_features,?out_features))if?bias:self.bias?=?Parameter(torch.FloatTensor(out_features))else:self.register_parameter('bias',?None)self.reset_parameters()def?reset_parameters(self):stdv?=?1.?/?math.sqrt(self.weight.size(1))self.weight.data.uniform_(-stdv,?stdv)if?self.bias?is?not?None:self.bias.data.uniform_(-stdv,?stdv)def?forward(self,?input,?adj):support?=?torch.mm(input,?self.weight)output?=?torch.spmm(adj,?support)if?self.bias?is?not?None:return?output?+?self.biaselse:return?outputdef?__repr__(self):return?self.__class__.__name__?+?'?('?\+?str(self.in_features)?+?'?->?'?\+?str(self.out_features)?+?')'

      上面代碼主要看forward部分即可,顯然實現的就是 操作而已。

      個人總結

      • 本論文模型上的創新點主要有:?提出了在圖上的快速卷積的模型(K=1),第二是提出了renormalization_trick

      • 在限制K=1時,大大限制了模型參數數量,同時可實現多層的疊加,當疊加l層時,可聚合節點自身及其l-hops的節點特征。疊加層數越大,卷積感受野越大。

      • 拋去繁雜的數學公式推導,感性理解本論文所提出的快速卷積,其實非常簡單:

      參考資料

      [1]

      paper: https://arxiv.org/pdf/1609.02907.pdf

      [2]

      pygcn: https://github.com/tkipf/pygcn

      [3]

      Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering: https://blog.csdn.net/Mr_tyting/article/details/108916787

      [4]

      Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering: https://blog.csdn.net/Mr_tyting/article/details/108916787

      [5]

      pygcn: https://github.com/tkipf/pygcn

      往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:

    總結

    以上是生活随笔為你收集整理的【论文解读】GCN论文总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。