最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

圖學(xué)習(xí)之圖神經(jīng)網(wǎng)絡(luò)GraphSAGE、GIN圖采樣算法「系列七」

2022-12-08 13:03 作者:汀丶人工智能  | 我要投稿

0. PGL圖學(xué)習(xí)之圖神經(jīng)網(wǎng)絡(luò)GraphSAGE、GIN圖采樣算法[系列七]

本項(xiàng)目鏈接:https://aistudio.baidu.com/aistudio/projectdetail/5061984?contributionType=1

在圖神經(jīng)網(wǎng)絡(luò)中,使用的數(shù)據(jù)集可能是億量級(jí)的數(shù)據(jù),而由于GPU/CPU資源有限無(wú)法一次性全圖送入計(jì)算資源,需要借鑒深度學(xué)習(xí)中的mini-batch思想。

傳統(tǒng)的深度學(xué)習(xí)mini-batch訓(xùn)練每個(gè)batch的樣本之間無(wú)依賴,多層樣本計(jì)算量固定;而在圖神經(jīng)網(wǎng)絡(luò)中,每個(gè)batch中的節(jié)點(diǎn)之間互相依賴,在計(jì)算多層時(shí)會(huì)導(dǎo)致計(jì)算量爆炸,因此引入了圖采樣的概念。

GraphSAGE也是圖嵌入算法中的一種。在論文Inductive Representation Learning on Large Graphs 在大圖上的歸納表示學(xué)習(xí)中提出。github鏈接和官方介紹鏈接。

與node2vec相比較而言,node2vec是在圖的節(jié)點(diǎn)級(jí)別上進(jìn)行嵌入,GraphSAGE則是在整個(gè)圖的級(jí)別上進(jìn)行嵌入。之前的網(wǎng)絡(luò)表示學(xué)習(xí)的transductive,難以從而提出了一個(gè)inductive的GraphSAGE算法。GraphSAGE同時(shí)利用節(jié)點(diǎn)特征信息和結(jié)構(gòu)信息得到Graph Embedding的映射,相比之前的方法,之前都是保存了映射后的結(jié)果,而GraphSAGE保存了生成embedding的映射,可擴(kuò)展性更強(qiáng),對(duì)于節(jié)點(diǎn)分類和鏈接預(yù)測(cè)問(wèn)題的表現(xiàn)也比較突出。

0.1提出背景

現(xiàn)存的方法需要圖中所有的頂點(diǎn)在訓(xùn)練embedding的時(shí)候都出現(xiàn);這些前人的方法本質(zhì)上是transductive,不能自然地泛化到未見(jiàn)過(guò)的頂點(diǎn)。文中提出了GraphSAGE,是一個(gè)inductive的框架,可以利用頂點(diǎn)特征信息(比如文本屬性)來(lái)高效地為沒(méi)有見(jiàn)過(guò)的頂點(diǎn)生成embedding。GraphSAGE是為了學(xué)習(xí)一種節(jié)點(diǎn)表示方法,即如何通過(guò)從一個(gè)頂點(diǎn)的局部鄰居采樣并聚合頂點(diǎn)特征,而不是為每個(gè)頂點(diǎn)訓(xùn)練單獨(dú)的embedding。 這個(gè)算法在三個(gè)inductive頂點(diǎn)分類benchmark上超越了那些很強(qiáng)的baseline。文中基于citation和Reddit帖子數(shù)據(jù)的信息圖中對(duì)未見(jiàn)過(guò)的頂點(diǎn)分類,實(shí)驗(yàn)表明使用一個(gè)PPI(protein-protein interactions)多圖數(shù)據(jù)集,算法可以泛化到完全未見(jiàn)過(guò)的圖上。

0.2 回顧GCN及其問(wèn)題

在大型圖中,節(jié)點(diǎn)的低維向量embedding被證明了作為各種各樣的預(yù)測(cè)和圖分析任務(wù)的特征輸入是非常有用的。頂點(diǎn)embedding最基本的基本思想是使用降維技術(shù)從高維信息中提煉一個(gè)頂點(diǎn)的鄰居信息,存到低維向量中。這些頂點(diǎn)嵌入之后會(huì)作為后續(xù)的機(jī)器學(xué)習(xí)系統(tǒng)的輸入,解決像頂點(diǎn)分類、聚類、鏈接預(yù)測(cè)這樣的問(wèn)題。

  • GCN雖然能提取圖中頂點(diǎn)的embedding,但是存在一些問(wèn)題:

  • GCN的基本思想: 把一個(gè)節(jié)點(diǎn)在圖中的高緯度鄰接信息降維到一個(gè)低維的向量表示。

  • GCN的優(yōu)點(diǎn): 可以捕捉graph的全局信息,從而很好地表示node的特征。

  • GCN的缺點(diǎn): Transductive learning的方式,需要把所有節(jié)點(diǎn)都參與訓(xùn)練才能得到node embedding,無(wú)法快速得到新node的embedding。

1.圖采樣算法

1.1 GraphSage: Representation Learning on Large Graphs

圖采樣算法:顧名思義,圖采樣算法就是在一張圖中進(jìn)行采樣得到一個(gè)子圖,這里的采樣并不是隨機(jī)采樣,而是采取一些策略。典型的圖采樣算法包括GraphSAGE、PinSAGE等。

文章碼源鏈接:

https://cs.stanford.edu/people/jure/pubs/graphsage-nips17.pdf

https://github.com/williamleif/GraphSAGE

前面 GCN 講解的文章中,我使用的圖節(jié)點(diǎn)個(gè)數(shù)非常少,然而在實(shí)際問(wèn)題中,一張圖可能節(jié)點(diǎn)非常多,因此就沒(méi)有辦法一次性把整張圖送入計(jì)算資源,所以我們應(yīng)該使用一種有效的采樣算法,從全圖中采樣出一個(gè)子圖 ,這樣就可以進(jìn)行訓(xùn)練了。

GraphSAGE與GCN對(duì)比:

既然新增的節(jié)點(diǎn),一定會(huì)改變?cè)泄?jié)點(diǎn)地表示,那么為什么一定要得到每個(gè)節(jié)點(diǎn)的一個(gè)固定的表示呢?何不直接學(xué)習(xí)一種節(jié)點(diǎn)的表示方法。去學(xué)習(xí)一個(gè)節(jié)點(diǎn)的信息是怎么通過(guò)其鄰居節(jié)點(diǎn)的特征聚合而來(lái)的。 學(xué)習(xí)到了這樣的“聚合函數(shù)”,而我們本身就已知各個(gè)節(jié)點(diǎn)的特征和鄰居關(guān)系,我們就可以很方便地得到一個(gè)新節(jié)點(diǎn)的表示了。

GCN等transductive的方法,學(xué)到的是每個(gè)節(jié)點(diǎn)的一個(gè)唯一確定的embedding; 而GraphSAGE方法學(xué)到的node embedding,是根據(jù)node的鄰居關(guān)系的變化而變化的,也就是說(shuō),即使是舊的node,如果建立了一些新的link,那么其對(duì)應(yīng)的embedding也會(huì)變化,而且也很方便地學(xué)到。

在了解圖采樣算法前,我們至少應(yīng)該保證采樣后的子圖是連通的。例如上圖圖中,左邊采樣的子圖就是連通的,右邊的子圖不是連通的。

GraphSAGE的核心:GraphSAGE不是試圖學(xué)習(xí)一個(gè)圖上所有node的embedding,而是學(xué)習(xí)一個(gè)為每個(gè)node產(chǎn)生embedding的映射。 GraphSage框架中包含兩個(gè)很重要的操作:Sample采樣和Aggregate聚合。這也是其名字GraphSage(Graph SAmple and aggreGatE)的由來(lái)。GraphSAGE 主要分兩步:采樣、聚合。GraphSAGE的采樣方式是鄰居采樣,鄰居采樣的意思是在某個(gè)節(jié)點(diǎn)的鄰居節(jié)點(diǎn)中選擇幾個(gè)節(jié)點(diǎn)作為原節(jié)點(diǎn)的一階鄰居,之后對(duì)在新采樣的節(jié)點(diǎn)的鄰居中繼續(xù)選擇節(jié)點(diǎn)作為原節(jié)點(diǎn)的二階節(jié)點(diǎn),以此類推。

文中不是對(duì)每個(gè)頂點(diǎn)都訓(xùn)練一個(gè)單獨(dú)的embeddding向量,而是訓(xùn)練了一組aggregator functions,這些函數(shù)學(xué)習(xí)如何從一個(gè)頂點(diǎn)的局部鄰居聚合特征信息(見(jiàn)圖1)。每個(gè)聚合函數(shù)從一個(gè)頂點(diǎn)的不同的hops或者說(shuō)不同的搜索深度聚合信息。測(cè)試或是推斷的時(shí)候,使用訓(xùn)練好的系統(tǒng),通過(guò)學(xué)習(xí)到的聚合函數(shù)來(lái)對(duì)完全未見(jiàn)過(guò)的頂點(diǎn)生成embedding。

GraphSAGE 是Graph SAmple and aggreGatE的縮寫,其運(yùn)行流程如上圖所示,可以分為三個(gè)步驟:

  • 對(duì)圖中每個(gè)頂點(diǎn)鄰居頂點(diǎn)進(jìn)行采樣,因?yàn)槊總€(gè)節(jié)點(diǎn)的度是不一致的,為了計(jì)算高效, 為每個(gè)節(jié)點(diǎn)采樣固定數(shù)量的鄰居

  • 根據(jù)聚合函數(shù)聚合鄰居頂點(diǎn)蘊(yùn)含的信息

  • 得到圖中各頂點(diǎn)的向量表示供下游任務(wù)使用

鄰居采樣的優(yōu)點(diǎn):

  • 極大減少計(jì)算量

  • 允許泛化到新連接關(guān)系,個(gè)人理解類似dropout的思想,能增強(qiáng)模型的泛化能力

采樣的階段首先選取一個(gè)點(diǎn),然后隨機(jī)選取這個(gè)點(diǎn)的一階鄰居,再以這些鄰居為起點(diǎn)隨機(jī)選擇它們的一階鄰居。例如下圖中,我們要預(yù)測(cè) 0 號(hào)節(jié)點(diǎn),因此首先隨機(jī)選擇 0 號(hào)節(jié)點(diǎn)的一階鄰居 2、4、5,然后隨機(jī)選擇 2 號(hào)節(jié)點(diǎn)的一階鄰居 8、9;4 號(hào)節(jié)點(diǎn)的一階鄰居 11、12;5 號(hào)節(jié)點(diǎn)的一階鄰居 13、15

聚合具體來(lái)說(shuō)就是直接將子圖從全圖中抽離出來(lái),從最邊緣的節(jié)點(diǎn)開(kāi)始,一層一層向里更新節(jié)點(diǎn)

上圖展示了鄰居采樣的優(yōu)點(diǎn),極大減少訓(xùn)練計(jì)算量這個(gè)是毋庸置疑的,泛化能力增強(qiáng)這個(gè)可能不太好理解,因?yàn)樵疽乱粋€(gè)節(jié)點(diǎn)需要它周圍的所有鄰居,而通過(guò)鄰居采樣之后,每個(gè)節(jié)點(diǎn)就不是由所有的鄰居來(lái)更新它,而是部分鄰居節(jié)點(diǎn),所以具有比較強(qiáng)的泛化能力。

1.1.1 論文角度看GraphSage

聚合函數(shù)的選取

在圖中頂點(diǎn)的鄰居是無(wú)序的,所以希望構(gòu)造出的聚合函數(shù)是對(duì)稱的(即也就是對(duì)它輸入的各種排列,函數(shù)的輸出結(jié)果不變),同時(shí)具有較高的表達(dá)能力。 聚合函數(shù)的對(duì)稱性(symmetry property)確保了神經(jīng)網(wǎng)絡(luò)模型可以被訓(xùn)練且可以應(yīng)用于任意順序的頂點(diǎn)鄰居特征集合上。

**a. Mean aggregator **: mean aggregator將目標(biāo)頂點(diǎn)和鄰居頂點(diǎn)的第$k?1$層向量拼接起來(lái),然后對(duì)向量的每個(gè)維度進(jìn)行求均值的操作,將得到的結(jié)果做一次非線性變換產(chǎn)生目標(biāo)頂點(diǎn)的第$k$層表示向量。

卷積聚合器Convolutional aggregator: 文中用下面的式子替換算法1中的4行和5行得到GCN的inductive變形:

原始算法1中的第4,5行是

論文提出的均值聚合器Mean aggregator:

  • 均值聚合近似等價(jià)在transducttive GCN框架中的卷積傳播規(guī)則

  • 這個(gè)修改后的基于均值的聚合器是convolutional的。但是這個(gè)卷積聚合器和文中的其他聚合器的重要不同在于它沒(méi)有算法1中第5行的CONCAT操作——卷積聚合器沒(méi)有將頂點(diǎn)前一層的表示$\mathbf{h}^{k-1}{v}$聚合的鄰居向量$\mathbf{h}^k{\mathcal{N}(v)}$拼接起來(lái)

  • 拼接操作可以看作一個(gè)是GraphSAGE算法在不同的搜索深度或?qū)又g的簡(jiǎn)單的skip connection[Identity mappings in deep residual networks]的形式,它使得模型的表征性能獲得了巨大的提升

  • 舉個(gè)簡(jiǎn)單例子,比如一個(gè)節(jié)點(diǎn)的3個(gè)鄰居的embedding分別為[1,2,3,4],[2,3,4,5],[3,4,5,6]按照每一維分別求均值就得到了聚合后的鄰居embedding為[2,3,4,5]

b. LSTM aggregator

文中也測(cè)試了一個(gè)基于LSTM的復(fù)雜的聚合器[Long short-term memory]。和均值聚合器相比,LSTMs有更強(qiáng)的表達(dá)能力。但是,LSTMs不是對(duì)稱的(symmetric),也就是說(shuō)不具有排列不變性(permutation invariant),因?yàn)樗鼈円砸粋€(gè)序列的方式處理輸入。因此,需要先對(duì)鄰居節(jié)點(diǎn)隨機(jī)順序,然后將鄰居序列的embedding作為L(zhǎng)STM的輸入。

  • 排列不變性(permutation invariance):指輸入的順序改變不會(huì)影響輸出的值。

  • c. Pooling aggregator

pooling聚合器,它既是對(duì)稱的,又是可訓(xùn)練的。Pooling aggregator 先對(duì)目標(biāo)頂點(diǎn)的鄰居頂點(diǎn)的embedding向量進(jìn)行一次非線性變換,之后進(jìn)行一次pooling操作(max pooling or mean pooling),將得到結(jié)果與目標(biāo)頂點(diǎn)的表示向量拼接,最后再經(jīng)過(guò)一次非線性變換得到目標(biāo)頂點(diǎn)的第k層表示向量。 一個(gè)element-wise max pooling操作應(yīng)用在鄰居集合上來(lái)聚合信息:

其中

  • $max$表示element-wise最大值操作,取每個(gè)特征的最大值

  • $\sigma$是非線性激活函數(shù)

  • 所有相鄰節(jié)點(diǎn)的向量共享權(quán)重,先經(jīng)過(guò)一個(gè)非線性全連接層,然后做max-pooling

  • 按維度應(yīng)用 max/mean pooling,可以捕獲鄰居集上在某一個(gè)維度的突出的/綜合的表現(xiàn)。

(有監(jiān)督和無(wú)監(jiān)督)參數(shù)學(xué)習(xí)

在定義好聚合函數(shù)之后,接下來(lái)就是對(duì)函數(shù)中的參數(shù)進(jìn)行學(xué)習(xí)。文章分別介紹了無(wú)監(jiān)督學(xué)習(xí)和監(jiān)督學(xué)習(xí)兩種方式。

基于圖的無(wú)監(jiān)督損失

基于圖的損失函數(shù)傾向于使得相鄰的頂點(diǎn)有相似的表示,但這會(huì)使相互遠(yuǎn)離的頂點(diǎn)的表示差異變大:

其中

  • $\mathbf{z}_{u}$為節(jié)點(diǎn)$u$通過(guò)GraphSAGE生成的embedding

  • 節(jié)點(diǎn)$v$是節(jié)點(diǎn)$u$隨機(jī)游走到達(dá)的“鄰居”

  • $\sigma$是sigmoid函數(shù)

  • $P_{n}$是負(fù)采樣的概率分布,類似word2vec中的負(fù)采樣

  • $Q$是負(fù)樣本的數(shù)目

  • embedding之間相似度通過(guò)向量點(diǎn)積計(jì)算得到

文中輸入到損失函數(shù)的表示$\mathbf{z}_u$是從包含一個(gè)頂點(diǎn)局部鄰居的特征生成出來(lái)的,而不像之前的那些方法(如DeepWalk),對(duì)每個(gè)頂點(diǎn)訓(xùn)練一個(gè)獨(dú)一無(wú)二的embedding,然后簡(jiǎn)單進(jìn)行一個(gè)embedding查找操作得到。

基于圖的有監(jiān)督損失

無(wú)監(jiān)督損失函數(shù)的設(shè)定來(lái)學(xué)習(xí)節(jié)點(diǎn)embedding 可以供下游多個(gè)任務(wù)使用。監(jiān)督學(xué)習(xí)形式根據(jù)任務(wù)的不同直接設(shè)置目標(biāo)函數(shù)即可,如最常用的節(jié)點(diǎn)分類任務(wù)使用交叉熵?fù)p失函數(shù)。

參數(shù)學(xué)習(xí)

通過(guò)前向傳播得到節(jié)點(diǎn)$u$的embedding $z_u$,然后梯度下降(實(shí)現(xiàn)使用Adam優(yōu)化器) 進(jìn)行反向傳播優(yōu)化參數(shù)$\mathbf{W}^{k}$和聚合函數(shù)內(nèi)的參數(shù)。

新節(jié)點(diǎn)embedding的生成

這個(gè)$\mathbf{W}^{k}$ 就是所謂的dynamic embedding的核心,因?yàn)楸4嫦聛?lái)了從節(jié)點(diǎn)原始的高維特征生成低維embedding的方式?,F(xiàn)在,如果想得到一個(gè)點(diǎn)的embedding,只需要輸入節(jié)點(diǎn)的特征向量,經(jīng)過(guò)卷積(利用已經(jīng)訓(xùn)練好的 $\mathbf{W}^{k}$ 以及特定聚合函數(shù)聚合neighbor的屬性信息),就產(chǎn)生了節(jié)點(diǎn)的embedding。

有了GCN為啥還要GraphSAGE?

GCN靈活性差、為新節(jié)點(diǎn)產(chǎn)生embedding要求 額外的操作 ,比如“對(duì)齊”: GCN是 直推式(transductive) 學(xué)習(xí),無(wú)法直接泛化到新加入(未見(jiàn)過(guò))的節(jié)點(diǎn); GraphSAGE是 歸納式(inductive) 學(xué)習(xí),可以為新節(jié)點(diǎn)輸出節(jié)點(diǎn)特征。 GCN輸出固定: GCN輸出的是節(jié)點(diǎn) 唯一確定 的embedding; GraphSAGE學(xué)習(xí)的是節(jié)點(diǎn)和鄰接節(jié)點(diǎn)之間的關(guān)系,學(xué)習(xí)到的是一種 映射關(guān)系 ,節(jié)點(diǎn)的embedding可以隨著其鄰接節(jié)點(diǎn)的變化而變化。 GCN很難應(yīng)用在超大圖上: 無(wú)論是拉普拉斯計(jì)算還是圖卷積過(guò)程,因?yàn)镚CN其需要對(duì) 整張圖 進(jìn)行計(jì)算,所以計(jì)算量會(huì)隨著節(jié)點(diǎn)數(shù)的增加而遞增。 GraphSAGE通過(guò)采樣,能夠形成 minibatch 來(lái)進(jìn)行批訓(xùn)練,能用在超大圖上

GraphSAGE有什么優(yōu)點(diǎn)?

采用 歸納學(xué)習(xí) 的方式,學(xué)習(xí)鄰居節(jié)點(diǎn)特征關(guān)系,得到泛化性更強(qiáng)的embedding; 采樣技術(shù),降低空間復(fù)雜度,便于構(gòu)建minibatch用于 批訓(xùn)練 ,還讓模型具有更好的泛化性; 多樣的聚合函數(shù) ,對(duì)于不同的數(shù)據(jù)集/場(chǎng)景可以選用不同的聚合方式,使得模型更加靈活。

采樣數(shù)大于鄰接節(jié)點(diǎn)數(shù)怎么辦?

設(shè)采樣數(shù)量為K: 若節(jié)點(diǎn)鄰居數(shù)少于K,則采用 有放回 的抽樣方法,直到采樣出K個(gè)節(jié)點(diǎn)。 若節(jié)點(diǎn)鄰居數(shù)大于K,則采用 無(wú)放回 的抽樣。

訓(xùn)練好的GraphSAGE如何得到節(jié)點(diǎn)Embedding?

假設(shè)GraphSAGE已經(jīng)訓(xùn)練好,我們可以通過(guò)以下步驟來(lái)獲得節(jié)點(diǎn)embedding,具體算法請(qǐng)看下圖的算法1。 訓(xùn)練過(guò)程則只需要將其產(chǎn)生的embedding扔進(jìn)損失函數(shù)計(jì)算并反向梯度傳播即可。 對(duì)圖中每個(gè)節(jié)點(diǎn)的鄰接節(jié)點(diǎn)進(jìn)行 采樣 ,輸入節(jié)點(diǎn)及其n階鄰接節(jié)點(diǎn)的特征向量 根據(jù)K層的 聚合函數(shù) 聚合鄰接節(jié)點(diǎn)的信息 就產(chǎn)生了各節(jié)點(diǎn)的embedding

minibatch的子圖是怎么得到的?

和DeepWalk、Node2vec這些有什么不一樣?

DeepWalk、Node2Vec這些embedding算法直接訓(xùn)練每個(gè)節(jié)點(diǎn)的embedding,本質(zhì)上依然是直推式學(xué)習(xí),而且需要大量的額外訓(xùn)練才能使他們能預(yù)測(cè)新的節(jié)點(diǎn)。同時(shí),對(duì)于embedding的正交變換(orthogonal transformations),這些方法的目標(biāo)函數(shù)是不變的,這意味著生成的向量空間在不同的圖之間不是天然泛化的,在再次訓(xùn)練(re-training)時(shí)會(huì)產(chǎn)生漂移(drift)。 與DeepWalk不同的是,GraphSAGE是通過(guò)聚合節(jié)點(diǎn)的鄰接節(jié)點(diǎn)特征產(chǎn)生embedding的,而不是簡(jiǎn)單的進(jìn)行一個(gè)embedding lookup操作得到。

論文仿真結(jié)果:

實(shí)驗(yàn)對(duì)比了四個(gè)基線:隨機(jī)分類,基于特征的邏輯回歸(忽略圖結(jié)構(gòu)),DeepWalk算法,DeepWork+特征;同時(shí)還對(duì)比了四種GraphSAGE,其中三種在3.3節(jié)中已經(jīng)說(shuō)明,GraphSAGE-GCN是GCNs的歸納版本。具體超參數(shù)為:K=2,s1=25,s2=10。程序使用TensorFlow編寫,Adam優(yōu)化器。

對(duì)于跨圖泛化的任務(wù),需要學(xué)習(xí)節(jié)點(diǎn)角色而不是訓(xùn)練圖的結(jié)構(gòu)。使用跨各種生物蛋白質(zhì)-蛋白質(zhì)相互作用(PPI)圖,對(duì)蛋白質(zhì)功能進(jìn)行分類。在20個(gè)圖表上訓(xùn)練算法,2個(gè)圖用于測(cè)試,2個(gè)圖用于驗(yàn)證,平均每圖包含2373個(gè)節(jié)點(diǎn),平均度為28.8。從實(shí)驗(yàn)結(jié)果可以看出LSTM和池化方法比Mean和GCN效果更好。

對(duì)比不同聚合函數(shù):

如表-1所示,LSTM和POOL方法效果最好,與其它方法相比有顯著差異,LSTM和POOL之間無(wú)顯著差異,但LSTM比POOL慢得多(≈2x),使POOL聚合器在總體上略有優(yōu)勢(shì)。

1.1.2 更多問(wèn)題

采樣 為什么要采樣? 采樣數(shù)大于鄰接節(jié)點(diǎn)數(shù)怎么辦? 采樣的鄰居節(jié)點(diǎn)數(shù)應(yīng)該選取多大? 每一跳采樣需要一樣嗎? 適合有向邊嗎? 采樣是隨機(jī)的嗎? 聚合函數(shù) 聚合函數(shù)的選取有什么要求? GraphSAGE論文中提供多少種聚合函數(shù)? 均值聚合的操作是怎樣的? pooling聚合的操作是怎樣的? 使用LSTM聚合時(shí)需要注意什么? 均值聚合和其他聚合函數(shù)有啥區(qū)別? max-和mean-pooling有什么區(qū)別? 這三種聚合方法,哪種比較好? 一般聚合多少層?層數(shù)越多越好嗎? 什么時(shí)候和GCN的聚合形式“等價(jià)”? 無(wú)監(jiān)督學(xué)習(xí) GraphSAGE怎樣進(jìn)行無(wú)監(jiān)督學(xué)習(xí)? GraphSAGE如何定義鄰近和遠(yuǎn)處的節(jié)點(diǎn)? 如何計(jì)算無(wú)監(jiān)督GraphSAGE的損失函數(shù)? GraphSAGE是怎么隨機(jī)游走的? GraphSAGE什么時(shí)候考慮邊的權(quán)重了? 訓(xùn)練 如果只有圖、沒(méi)有節(jié)點(diǎn)特征,能否使用GraphSAGE? 訓(xùn)練好的GraphSAGE如何得到節(jié)點(diǎn)Embedding? minibatch的子圖是怎么得到的? 增加了新的節(jié)點(diǎn)來(lái)訓(xùn)練,需要為所有“舊”節(jié)點(diǎn)重新輸出embeding嗎? GraphSAGE有監(jiān)督學(xué)習(xí)有什么不一樣的地方嗎?

參考鏈接:https://zhuanlan.zhihu.com/p/184991506

https://blog.csdn.net/yyl424525/article/details/100532849

1.2 PinSAGE

采樣時(shí)只能選取真實(shí)的鄰居節(jié)點(diǎn)嗎?如果構(gòu)建的是一個(gè)與虛擬鄰居相連的子圖有什么優(yōu)點(diǎn)?PinSAGE 算法將會(huì)給我們解答,PinSAGE 算法通過(guò)多次隨機(jī)游走,按游走經(jīng)過(guò)的頻率選取鄰居,上圖右側(cè)為進(jìn)行隨機(jī)游走得到的節(jié)點(diǎn)序列,統(tǒng)計(jì)序列的頻數(shù)可以發(fā)現(xiàn)節(jié)點(diǎn)5,10,11的頻數(shù)為2,其余為1,當(dāng)我們希望采樣三個(gè)節(jié)點(diǎn)時(shí),我們選取5,10,11作為0號(hào)節(jié)點(diǎn)的虛擬鄰居。之后如果希望得到0號(hào)節(jié)點(diǎn)的二階虛擬鄰居則在已采樣的節(jié)點(diǎn)繼續(xù)進(jìn)行隨機(jī)游走即可。

回到上述問(wèn)題,采樣時(shí)選取虛擬鄰居有什么好處?這種采樣方式的好處是我們能更快的聚合到遠(yuǎn)處節(jié)點(diǎn)的信息。。實(shí)際上如果是按照 GraphSAGE 算法的方式生成子圖,在聚合的過(guò)程中,非一階鄰居的信息可以通過(guò)消息傳遞逐漸傳到中心,但是隨著距離的增大,離中心越遠(yuǎn)的節(jié)點(diǎn),其信息在傳遞過(guò)程中就越困難,甚至可能無(wú)法傳遞到;如果按照 PinSAGE 算法的方式生成子圖,有一定的概率可以將非一階鄰居與中心直接相連,這樣就可以快速聚合到多階鄰居的信息

1.2.1論文角度看PinSAGE

和GraphSAGE相比,PinSAGE改進(jìn)了什么?

  • 采樣 :使用重要性采樣替代GraphSAGE的均勻采樣;

  • 聚合函數(shù) :聚合函數(shù)考慮了邊的權(quán)重;

  • 生產(chǎn)者-消費(fèi)者模式的minibatch構(gòu)建 :在CPU端采樣節(jié)點(diǎn)和構(gòu)建特征,構(gòu)建計(jì)算圖;在GPU端在這些子圖上進(jìn)行卷積運(yùn)算;從而可以低延遲地隨機(jī)游走構(gòu)建子圖,而不需要把整個(gè)圖存在顯存中。

  • 高效的MapReduce推理 :可以分布式地為百萬(wàn)以上的節(jié)點(diǎn)生成embedding,最大化地減少重復(fù)計(jì)算。 這里的計(jì)算圖,指的是用于卷積運(yùn)算的局部圖(或者叫子圖),通過(guò)采樣來(lái)形成;與TensorFlow等框架的計(jì)算圖不是一個(gè)概念。

PinSAGE使用多大的計(jì)算資源?

訓(xùn)練時(shí),PinSAGE使用32核CPU、16張Tesla K80顯卡、500GB內(nèi)存; 推理時(shí),MapReduce運(yùn)行在378個(gè)d2.8xlarge Amazon AWS節(jié)點(diǎn)的Hadoop2集群。

PinSAGE和node2vec、DeepWalk這些有啥區(qū)別?

node2vec,DeepWalk是無(wú)監(jiān)督訓(xùn)練;PinSAGE是有監(jiān)督訓(xùn)練; node2vec,DeepWalk不能利用節(jié)點(diǎn)特征;PinSAGE可以; node2vec,DeepWalk這些模型的參數(shù)和節(jié)點(diǎn)數(shù)呈線性關(guān)系,很難應(yīng)用在超大型的圖上;

PinSAGE的單層聚合過(guò)程是怎樣的?

和GraphSAGE一樣,PinSAGE的核心就是一個(gè) 局部卷積算子 ,用來(lái)學(xué)習(xí)如何聚合鄰居節(jié)點(diǎn)信息。

如下圖算法1所示,PinSAGE的聚合函數(shù)叫做CONVOLVE。主要分為3部分:

  • 聚合 (第1行):k-1層鄰居節(jié)點(diǎn)的表征經(jīng)過(guò)一層DNN,然后聚合(可以考慮邊的權(quán)重),是聚合函數(shù)符號(hào),聚合函數(shù)可以是max/mean-pooling、加權(quán)求和、求平均;

  • 更新 (第2行): 拼接 第k-1層目標(biāo)節(jié)點(diǎn)的embedding,然后再經(jīng)過(guò)另一層DNN,形成目標(biāo)節(jié)點(diǎn)新的embedding;

  • 歸一化 (第3行): 歸一化 目標(biāo)節(jié)點(diǎn)新的embedding,使得訓(xùn)練更加穩(wěn)定;而且歸一化后,使用近似最近鄰居搜索的效率更高。

PinSAGE是如何采樣的?

如何采樣這個(gè)問(wèn)題從另一個(gè)角度來(lái)看就是:如何為目標(biāo)節(jié)點(diǎn)構(gòu)建鄰居節(jié)點(diǎn)。 和GraphSAGE的均勻采樣不一樣的是,PinSAGE使用的是重要性采樣。 PinSAGE對(duì)鄰居節(jié)點(diǎn)的定義是:對(duì)目標(biāo)節(jié)點(diǎn) 影響力最大 的T個(gè)節(jié)點(diǎn)。

PinSAGE的鄰居節(jié)點(diǎn)的重要性是如何計(jì)算的?

其影響力的計(jì)算方法有以下步驟: 從目標(biāo)節(jié)點(diǎn)開(kāi)始隨機(jī)游走; 使用 正則 來(lái)計(jì)算節(jié)點(diǎn)的“訪問(wèn)次數(shù)”,得到重要性分?jǐn)?shù); 目標(biāo)節(jié)點(diǎn)的鄰居節(jié)點(diǎn),則是重要性分?jǐn)?shù)最高的前T個(gè)節(jié)點(diǎn)。 這個(gè)重要性分?jǐn)?shù),其實(shí)可以近似看成Personalized PageRank分?jǐn)?shù)。 關(guān)于隨機(jī)游走,可以閱讀《Pixie: A System for Recommending 3+ Billion Items to 200+ Million Users in Real-Time》

重要性采樣的好處是什么?

和GraphSAGE一樣,可以使得 鄰居節(jié)點(diǎn)的數(shù)量固定 ,便于控制內(nèi)存/顯存的使用。 在聚合鄰居節(jié)點(diǎn)時(shí),可以考慮節(jié)點(diǎn)的重要性;在PinSAGE實(shí)踐中,使用的就是 加權(quán)平均 (weighted-mean),原文把它稱作 importance pooling 。

采樣的大小是多少比較好?

從PinSAGE的實(shí)驗(yàn)可以看出,隨著鄰居節(jié)點(diǎn)的增加,而收益會(huì)遞減; 并且兩層GCN在 鄰居數(shù)為50 時(shí)能夠更好的抓取節(jié)點(diǎn)的鄰居信息,同時(shí)保持運(yùn)算效率。

PinSage論文中還介紹了落地過(guò)程中采用的大量工程技巧。

  1. 負(fù)樣本生成:首先是簡(jiǎn)單采樣:在每個(gè)minibatch包含節(jié)點(diǎn)的范圍之外隨機(jī)采樣500個(gè)item作為minibatch所有正樣本共享的負(fù)樣本集合。但考慮到實(shí)際場(chǎng)景中模型需要從20億的物品item集合中識(shí)別出最相似的1000個(gè),即要從2百萬(wàn)中識(shí)別出最相似的那一個(gè),只是簡(jiǎn)單采樣會(huì)導(dǎo)致模型分辨的粒度過(guò)粗,分辨率只到500分之一,因此增加一種“hard”負(fù)樣本,即對(duì)于每個(gè) 對(duì),和物品q有些相似但和物品i不相關(guān)的物品集合。這種樣本的生成方式是將圖中節(jié)點(diǎn)根據(jù)相對(duì)節(jié)點(diǎn)q的個(gè)性化PageRank分值排序,隨機(jī)選取排序位置在2000~5000的物品作為“hard”負(fù)樣本,以此提高模型分辨正負(fù)樣本的難度。

  2. 漸進(jìn)式訓(xùn)練(Curriculum training:如果訓(xùn)練全程都使用hard負(fù)樣本,會(huì)導(dǎo)致模型收斂速度減半,訓(xùn)練時(shí)長(zhǎng)加倍,因此PinSage采用了一種Curriculum訓(xùn)練的方式,這里我理解是一種漸進(jìn)式訓(xùn)練方法,即第一輪訓(xùn)練只使用簡(jiǎn)單負(fù)樣本,幫助模型參數(shù)快速收斂到一個(gè)loss比較低的范圍;后續(xù)訓(xùn)練中逐步加入hard負(fù)樣本,讓模型學(xué)會(huì)將很相似的物品與些微相似的區(qū)分開(kāi),方式是第n輪訓(xùn)練時(shí)給每個(gè)物品的負(fù)樣本集合中增加n-1個(gè)hard負(fù)樣本。

  3. 樣本的特征信息:Pinterest的業(yè)務(wù)場(chǎng)景中每個(gè)pin通常有一張圖片和一系列的文字標(biāo)注(標(biāo)題,描述等),因此原始圖中每個(gè)節(jié)點(diǎn)的特征表示由圖片Embedding(4096維),文字標(biāo)注Embedding(256維),以及節(jié)點(diǎn)在圖中的度的log值拼接而成。其中圖片Embedding由6層全連接的VGG-16生成,文字標(biāo)注Embedding由Word2Vec訓(xùn)練得到。

  4. 基于random walk的重要性采樣:用于鄰居節(jié)點(diǎn)采樣,這一技巧在上面的算法理解部分已經(jīng)講解過(guò),此處不再贅述。

  5. 基于重要性的池化操作:這一技巧用于上一節(jié)Convolve算法中的 函數(shù)中,聚合經(jīng)過(guò)一層dense層之后的鄰居節(jié)點(diǎn)Embedding時(shí),基于random walk計(jì)算出的節(jié)點(diǎn)權(quán)重做聚合操作。據(jù)論文描述,這一技巧在離線評(píng)估指標(biāo)中提升了46%。

  6. on-the-fly convolutions:快速卷積操作,這個(gè)技巧主要是相對(duì)原始GCN中的卷積操作:特征矩陣與全圖拉普拉斯矩陣的冪相乘。涉及到全圖的都是計(jì)算量超高,這里GraphSage和PinSage都是一致地使用采樣鄰居節(jié)點(diǎn)動(dòng)態(tài)構(gòu)建局部計(jì)算圖的方法提升訓(xùn)練效率,只是二者采樣的方式不同。

  7. 生產(chǎn)者消費(fèi)者模式構(gòu)建minibatch:這個(gè)點(diǎn)主要是為了提高模型訓(xùn)練時(shí)GPU的利用率。保存原始圖結(jié)構(gòu)的鄰居表和數(shù)十億節(jié)點(diǎn)的特征矩陣只能放在CPU內(nèi)存中,GPU執(zhí)行convolve卷積操作時(shí)每次從CPU取數(shù)據(jù)是很耗時(shí)的。為了解決這個(gè)問(wèn)題,PinSage使用re-index技術(shù)創(chuàng)建當(dāng)前minibatch內(nèi)節(jié)點(diǎn)及其鄰居組成的子圖,同時(shí)從數(shù)十億節(jié)點(diǎn)的特征矩陣中提取出該子圖節(jié)點(diǎn)對(duì)應(yīng)的特征矩陣,注意提取后的特征矩陣中的節(jié)點(diǎn)索引要與前面子圖中的索引保持一致。這個(gè)子圖的鄰接列表和特征矩陣作為一個(gè)minibatch送入GPU訓(xùn)練,這樣一來(lái),convolve操作過(guò)程中就沒(méi)有GPU與CPU的通信需求了。訓(xùn)練過(guò)程中CPU使用OpenMP并設(shè)計(jì)了一個(gè)producer-consumer模式,CPU負(fù)責(zé)提取特征,re-index,負(fù)采樣等計(jì)算,GPU只負(fù)責(zé)模型計(jì)算。這個(gè)技巧降低了一半的訓(xùn)練耗時(shí)。

  8. 多GPU訓(xùn)練超大batch:前向傳播過(guò)程中,各個(gè)GPU等分minibatch,共享一套參數(shù),反向傳播時(shí),將每個(gè)GPU中的參數(shù)梯度都聚合到一起,執(zhí)行同步SGD。為了適應(yīng)海量訓(xùn)練數(shù)據(jù)的需要,增大batchsize從512到4096。為了在超大batchsize下快速收斂保證泛化精度,采用warmup過(guò)程:在第一個(gè)epoch中將學(xué)習(xí)率線性提升到最高,后面的epoch中再逐步指數(shù)下降。

  9. 使用MapReduce高效推斷:模型訓(xùn)練完成后生成圖中各個(gè)節(jié)點(diǎn)的Embedding過(guò)程中,如果直接使用上述PinSage的minibatch算法生Embedding,會(huì)有大量的重復(fù)計(jì)算,如計(jì)算當(dāng)前target節(jié)點(diǎn)的時(shí)候,其相當(dāng)一部分鄰居節(jié)點(diǎn)已經(jīng)計(jì)算過(guò)Embedding了,而當(dāng)這些鄰居節(jié)點(diǎn)作為target節(jié)點(diǎn)的時(shí)候,當(dāng)前target節(jié)點(diǎn)極有可能需要再重新計(jì)算一遍,這一部分的重復(fù)計(jì)算既耗時(shí)又浪費(fèi)。

1.2.2更多問(wèn)題

聚合函數(shù) PinSAGE的單層聚合過(guò)程是怎樣的? 為什么要將鄰居節(jié)點(diǎn)的聚合embedding和當(dāng)前節(jié)點(diǎn)的拼接? 采樣 PinSAGE是如何采樣的? PinSAGE的鄰居節(jié)點(diǎn)的重要性是如何計(jì)算的? 重要性采樣的好處是什么? 采樣的大小是多少比較好? MiniBatch PinSAGE的minibatch和GraphSAGE有啥不一樣? batch應(yīng)該選多大? 訓(xùn)練 PinSAGE使用什么損失函數(shù)? PinSAGE如何定義標(biāo)簽(正例/負(fù)例)? PinSAGE用什么方法提高模型訓(xùn)練的魯棒性和收斂性? 負(fù)采樣 PinSAGE如何進(jìn)行負(fù)采樣? 訓(xùn)練時(shí)簡(jiǎn)單地負(fù)采樣,會(huì)有什么問(wèn)題? 如何解決簡(jiǎn)單負(fù)采樣帶來(lái)的問(wèn)題? 如果只使用“hard”負(fù)樣本,會(huì)有什么問(wèn)題? 如何解決只使用“hard”負(fù)采樣帶來(lái)的問(wèn)題? 如何區(qū)分采樣、負(fù)采樣、”hard“負(fù)采樣? 推理 直接為使用訓(xùn)練好的模型產(chǎn)生embedding有啥問(wèn)題? 如何解決推理時(shí)重復(fù)計(jì)算的問(wèn)題? 下游任務(wù)如何應(yīng)用PinSAGE產(chǎn)生的embedding? 如何為用戶進(jìn)行個(gè)性化推薦? 工程性技巧 pin樣本的特征如何構(gòu)建? board樣本的特征如何構(gòu)建? 如何使用多GPU并行訓(xùn)練PinSAGE? PinSAGE為什么要使用生產(chǎn)者-消費(fèi)者模式? PinSAGE是如何使用生產(chǎn)者-消費(fèi)者模式?

https://zhuanlan.zhihu.com/p/195735468

https://zhuanlan.zhihu.com/p/133739758?utmsource=wechatsession&utm_id=0

1.3 小結(jié)

學(xué)習(xí)大圖、不斷擴(kuò)展的圖,未見(jiàn)過(guò)節(jié)點(diǎn)的表征,是一個(gè)很常見(jiàn)的應(yīng)用場(chǎng)景。GraphSAGE通過(guò)訓(xùn)練聚合函數(shù),實(shí)現(xiàn)優(yōu)化未知節(jié)點(diǎn)的表示方法。之后提出的GAN(圖注意力網(wǎng)絡(luò))也針對(duì)此問(wèn)題優(yōu)化。 論文中提出了:傳導(dǎo)性問(wèn)題和歸納性問(wèn)題,傳導(dǎo)性問(wèn)題是已知全圖情況,計(jì)算節(jié)點(diǎn)表征向量;歸納性問(wèn)題是在不完全了解全圖的情況下,訓(xùn)練節(jié)點(diǎn)的表征函數(shù)(不是直接計(jì)算向量表示)。 圖工具的處理過(guò)程每輪迭代( 一次propagation)一般都包含:收集信息、聚合、更新,從本文也可以更好地理解,其中聚合的重要性,及優(yōu)化方法。

GraohSage主要貢獻(xiàn)如下:

  • 針對(duì)問(wèn)題:大圖的節(jié)點(diǎn)表征

  • 結(jié)果:訓(xùn)練出的模型可應(yīng)用于表征沒(méi)見(jiàn)過(guò)的節(jié)點(diǎn)

  • 核心方法:改進(jìn)圖卷積方法;從鄰居節(jié)點(diǎn)中采樣;考慮了節(jié)點(diǎn)特征,加入更復(fù)雜的特征聚合方法

一般情況下一個(gè)節(jié)點(diǎn)的表式通過(guò)聚合它k跳之內(nèi)的鄰近節(jié)點(diǎn)計(jì)算,而全圖的表示則通過(guò)對(duì)所有節(jié)點(diǎn)的池化計(jì)算。GIN使用了WL-test方法,即圖同構(gòu)測(cè)試,它是一個(gè)區(qū)分網(wǎng)絡(luò)結(jié)構(gòu)的強(qiáng)效方法,也是通過(guò)迭代聚合鄰居的方法來(lái)更新節(jié)點(diǎn),它的強(qiáng)大在于使用了injective(見(jiàn)后)聚合更新方法。而這里要評(píng)測(cè)GNN是否能達(dá)到類似WL-test的效果。文中還使用了多合集multiset的概念,指可能包含重復(fù)元素的集合。

GIN主要貢獻(xiàn)如下:

  • 展示了GNN模型可達(dá)到與WL-test類似的圖結(jié)構(gòu)區(qū)分效果

  • 設(shè)計(jì)了聚合函數(shù)和Readout函數(shù),使GNN能達(dá)到更好的區(qū)分效果

  • 發(fā)現(xiàn)GCN及GraphSAGE無(wú)法很好表達(dá)圖結(jié)構(gòu),而GNN可以

  • 開(kāi)發(fā)了簡(jiǎn)單的網(wǎng)絡(luò)結(jié)構(gòu)GIN(圖同構(gòu)網(wǎng)絡(luò)),它的區(qū)分和表示能力與WL-test類似。

2.鄰居聚合

在圖采樣之后,我們需要進(jìn)行鄰居聚合的操作。經(jīng)典的鄰居聚合函數(shù)包括取平均、取最大值、求和。

評(píng)估聚合表達(dá)能力的指標(biāo)——單射(一對(duì)一映射),在上述三種經(jīng)典聚合函數(shù)中,取平均傾向于學(xué)習(xí)分布,取最大值傾向于忽略重復(fù)值,這兩個(gè)不屬于單射,而求和能夠保留鄰居節(jié)點(diǎn)的完整信息,是單射。單射的好處是可以保證對(duì)聚合后的結(jié)果可區(qū)分。

2.1 GIN模型的聚合函數(shù)

Graph Isomorphic Net(GIN)的聚合部分是基于單射的。

如上圖所示,GIN的聚合函數(shù)使用的是求和函數(shù),它特殊的一點(diǎn)是在中心節(jié)點(diǎn)加了一個(gè)自連邊(自環(huán)),之后對(duì)自連邊進(jìn)行加權(quán)。

這樣做的好處是即使我們調(diào)換了中心節(jié)點(diǎn)和鄰居節(jié)點(diǎn),得到的聚合結(jié)果依舊是不同的。所以帶權(quán)重的自連邊能夠保證中心節(jié)點(diǎn)和鄰居節(jié)點(diǎn)可區(qū)分。

2.2其他復(fù)雜的聚合函數(shù)

2.3 令居聚合語(yǔ)義場(chǎng)景

3.數(shù)據(jù)集介紹

數(shù)據(jù)源:http://snap.stanford.edu/graphsage/ 斯坦福

3.1 Citation數(shù)據(jù)集

使用科學(xué)網(wǎng)引文數(shù)據(jù)集,將學(xué)術(shù)論文分類為不同的主題。數(shù)據(jù)集共包含302424個(gè)節(jié)點(diǎn),平均度9.15,使用2000-2004年數(shù)據(jù)作為訓(xùn)練集,2005年數(shù)據(jù)作為測(cè)試集。使用節(jié)點(diǎn)的度以及論文摘要的句嵌入作為特征。

3.2 Reddit數(shù)據(jù)集

https://aistudio.baidu.com/aistudio/datasetdetail/177810

將Reddit帖子歸類為屬于不同社區(qū)。數(shù)據(jù)集包含232965個(gè)帖子,平均度為492。使用現(xiàn)成的300維GloVe Common Crawl單詞向量;對(duì)于每個(gè)帖子,使用特征包含:(1) 帖子標(biāo)題的平均嵌入 (2) 帖子所有評(píng)論的平均嵌入 (3) 帖子的分?jǐn)?shù) (4)帖子的評(píng)論數(shù)量

為了對(duì)社區(qū)進(jìn)行抽樣,根據(jù) 2014 年的評(píng)論總數(shù)對(duì)社區(qū)進(jìn)行了排名,并選擇了排名 [11,50](含)的社區(qū)。省略了最大的社區(qū),因?yàn)樗鼈兪谴笮偷耐ㄓ媚J(rèn)社區(qū),大大扭曲了類分布。選擇了在這些社區(qū)的聯(lián)合上定義的圖中最大的連通分量。

更多數(shù)據(jù)資料見(jiàn):

http://files.pushshift.io/reddit/comments/

https://github.com/dingidng/reddit-dataset

最新數(shù)據(jù)已經(jīng)更新到2022.10了

3.3 PPI(Protein–protein interactions)蛋白質(zhì)交互作用

https://aistudio.baidu.com/aistudio/datasetdetail/177807

PPI 網(wǎng)絡(luò)是蛋白質(zhì)相互作用(Protein-Protein Interaction,PPI)網(wǎng)絡(luò)的簡(jiǎn)稱,在GCN中主要用于節(jié)點(diǎn)分類任務(wù)

PPI是指兩種或以上的蛋白質(zhì)結(jié)合的過(guò)程,通常旨在執(zhí)行其生化功能。

一般地,如果兩個(gè)蛋白質(zhì)共同參與一個(gè)生命過(guò)程或者協(xié)同完成某一功能,都被看作這兩個(gè)蛋白質(zhì)之間存在相互作用。多個(gè)蛋白質(zhì)之間的復(fù)雜的相互作用關(guān)系可以用PPI網(wǎng)絡(luò)來(lái)描述。

PPI數(shù)據(jù)集共24張圖,每張圖對(duì)應(yīng)不同的人體組織,平均每張圖有2371個(gè)節(jié)點(diǎn),共56944個(gè)節(jié)點(diǎn)818716條邊,每個(gè)節(jié)點(diǎn)特征長(zhǎng)度為50,其中包含位置基因集,基序集和免疫學(xué)特征?;虮倔w基作為label(總共121個(gè)),label不是one-hot編碼。

  • alid_feats.npy文件保存節(jié)點(diǎn)的特征,shape為(56944, 50)(節(jié)點(diǎn)數(shù)目,特征維度),值為0或1,且1的數(shù)目稀少

  • ppi-class_map.json為節(jié)點(diǎn)的label文件,shape為(121, 56944),每個(gè)節(jié)點(diǎn)的label為121維

  • ppi-G.json文件為節(jié)點(diǎn)和鏈接的描述信息,節(jié)點(diǎn):{"test": true, "id": 56708, "val": false}, 表示節(jié)點(diǎn)id為56708的節(jié)點(diǎn)是否為test集或者val集,鏈接:"links": [{"source": 0, "target": 372}, {"source": 0, "target": 1101}, 表示節(jié)點(diǎn)id為0的節(jié)點(diǎn)和為1101的節(jié)點(diǎn)之間有l(wèi)inks,

  • ppi-walks.txt文件中為鏈接信息

  • ppi-id_map.json文件為節(jié)點(diǎn)id信息

參考鏈接:

https://blog.csdn.net/ziqingnian/article/details/112979175

4 基于PGL算法實(shí)踐

4.1 GraphSAGE

GraphSAGE是一個(gè)通用的歸納框架,它利用節(jié)點(diǎn)特征信息(例如,文本屬性)為以前看不見(jiàn)的數(shù)據(jù)有效地生成節(jié)點(diǎn)嵌入。GraphSAGE 不是為每個(gè)節(jié)點(diǎn)訓(xùn)練單獨(dú)的嵌入,而是學(xué)習(xí)一個(gè)函數(shù),該函數(shù)通過(guò)從節(jié)點(diǎn)的本地鄰域中采樣和聚合特征來(lái)生成嵌入。基于PGL,我們重現(xiàn)了GraphSAGE算法,在Reddit Dataset中達(dá)到了與論文同等水平的指標(biāo)。此外,這是PGL中子圖采樣和訓(xùn)練的一個(gè)例子。

超參數(shù)


部分結(jié)果展示:

[INFO] 2022-11-18 16:45:44,177 [ ? ?train.py: ? 63]: ? ?Batch 800 train-Loss [0.5213774] train-Acc [0.9140625] [INFO] 2022-11-18 16:45:45,783 [ ? ?train.py: ? 63]: ? ?Batch 900 train-Loss [0.65641916] train-Acc [0.875] [INFO] 2022-11-18 16:45:47,385 [ ? ?train.py: ? 63]: ? ?Batch 1000 train-Loss [0.57411766] train-Acc [0.921875] [INFO] 2022-11-18 16:45:48,977 [ ? ?train.py: ? 63]: ? ?Batch 1100 train-Loss [0.68337256] train-Acc [0.890625] [INFO] 2022-11-18 16:45:50,434 [ ? ?train.py: ?160]: ? ?Runing epoch:9 ? train_loss:[0.58635516] ? ? train_acc:[0.90786038] [INFO] 2022-11-18 16:45:57,836 [ ? ?train.py: ?165]: ? ?Runing epoch:9 ? val_loss:0.55885834 ? ? val_acc:0.9139818 [INFO] 2022-11-18 16:46:05,259 [ ? ?train.py: ?169]: ? ?Runing epoch:9 ? test_loss:0.5578749 ? ? test_acc:0.91468066 100%|███████████████████████████████████████████| 10/10 [06:02<00:00, 36.29s/it] [INFO] 2022-11-18 16:46:05,260 [ ? ?train.py: ?172]: ? ?Runs 0: Model: graphsage Best Test Accuracy: 0.918849

目前官網(wǎng)最佳性能是95.7%,我這里沒(méi)有調(diào)參

| Aggregator | Accuracyme10 epochs | Accuracy200 epochs|Reported in paper200 epochs| | -------- | -------- | -------- |-------- | | Mean | 91.88% | 95.70% | 95.0% |

其余聚合器下官網(wǎng)和論文性能對(duì)比:

| Aggregator | Accuracy200 epochs|Reported in paper200 epochs| | -------- | -------- |-------- | | Meanpool | 95.60% | 94.8% | | Maxpool | 94.95% | 94.8% | | LSTM | 95.13% | 95.4% |

4.2 Graph Isomorphism Network (GIN)

圖同構(gòu)網(wǎng)絡(luò)(GIN)是一個(gè)簡(jiǎn)單的圖神經(jīng)網(wǎng)絡(luò),期望達(dá)到Weisfeiler-Lehman圖同構(gòu)測(cè)試的能力?;?PGL重現(xiàn)了 GIN 模型。

超參數(shù)

  • data_path:數(shù)據(jù)集的根路徑

  • dataset_name:數(shù)據(jù)集的名稱

  • fold_idx:拆分的數(shù)據(jù)集折疊。這里我們使用10折交叉驗(yàn)證

  • train_eps:是否參數(shù)是可學(xué)習(xí)的。

? ?parser.add_argument('--data_path', type=str, default='./gin_data') ? ?parser.add_argument('--dataset_name', type=str, default='MUTAG') ? ?parser.add_argument('--batch_size', type=int, default=32) ? ?parser.add_argument('--fold_idx', type=int, default=0) ? ?parser.add_argument('--output_path', type=str, default='./outputs/') ? ?parser.add_argument('--use_cuda', action='store_true') ? ?parser.add_argument('--num_layers', type=int, default=5) ? ?parser.add_argument('--num_mlp_layers', type=int, default=2) ? ?parser.add_argument('--feat_size', type=int, default=64) ? ?parser.add_argument('--hidden_size', type=int, default=64) ? ?parser.add_argument( ? ? ? ?'--pool_type', ? ? ? ?type=str, ? ? ? ?default="sum", ? ? ? ?choices=["sum", "average", "max"]) ? ?parser.add_argument('--train_eps', action='store_true') ? ?parser.add_argument('--init_eps', type=float, default=0.0) ? ?parser.add_argument('--epochs', type=int, default=350) ? ?parser.add_argument('--lr', type=float, default=0.01) ? ?parser.add_argument('--dropout_prob', type=float, default=0.5) ? ?parser.add_argument('--seed', type=int, default=0) ? ?args = parser.parse_args()

GIN github代碼復(fù)現(xiàn)含數(shù)據(jù)集下載:How Powerful are Graph Neural Networks? https://github.com/weihua916/powerful-gnns

https://github.com/weihua916/powerful-gnns/blob/master/dataset.zip

論文使用 9 個(gè)圖形分類基準(zhǔn):4 個(gè)生物信息學(xué)數(shù)據(jù)集(MUTAG、PTC、NCI1、PROTEINS)5 個(gè)社交網(wǎng)絡(luò)數(shù)據(jù)集(COLLAB、IMDB-BINARY、IMDB-MULTI、REDDITBINARY 和 REDDIT-MULTI5K)(Yanardag & Vishwanathan,2015)。 重要的是,我目標(biāo)不是讓模型依賴輸入節(jié)點(diǎn)特征,而是主要從網(wǎng)絡(luò)結(jié)構(gòu)中學(xué)習(xí)。因此,在生物信息圖中,節(jié)點(diǎn)具有分類輸入特征,但在社交網(wǎng)絡(luò)中,它們沒(méi)有特征。 對(duì)于社交網(wǎng)絡(luò),按如下方式創(chuàng)建節(jié)點(diǎn)特征:對(duì)于 REDDIT 數(shù)據(jù)集,將所有節(jié)點(diǎn)特征向量設(shè)置為相同(因此,這里的特征是無(wú)信息的); 對(duì)于其他社交圖,我們使用節(jié)點(diǎn)度數(shù)的 one-hot 編碼。

社交網(wǎng)絡(luò)數(shù)據(jù)集。

  • IMDB-BINARY 和 IMDB-MULTI 是電影協(xié)作數(shù)據(jù)集。每個(gè)圖對(duì)應(yīng)于每個(gè)演員/女演員的自我網(wǎng)絡(luò),其中節(jié)點(diǎn)對(duì)應(yīng)于演員/女演員,如果兩個(gè)演員/女演員出現(xiàn)在同一部電影中,則在兩個(gè)演員/女演員之間繪制一條邊。每個(gè)圖都是從預(yù)先指定的電影類型派生的,任務(wù)是對(duì)其派生的類型圖進(jìn)行分類。

  • REDDIT-BINARY 和 REDDIT-MULTI5K 是平衡數(shù)據(jù)集,其中每個(gè)圖表對(duì)應(yīng)一個(gè)在線討論線程,節(jié)點(diǎn)對(duì)應(yīng)于用戶。如果其中至少一個(gè)節(jié)點(diǎn)回應(yīng)了另一個(gè)節(jié)點(diǎn)的評(píng)論,則在兩個(gè)節(jié)點(diǎn)之間繪制一條邊。任務(wù)是將每個(gè)圖分類到它所屬的社區(qū)或子版塊。

  • COLLAB 是一個(gè)科學(xué)協(xié)作數(shù)據(jù)集,源自 3 個(gè)公共協(xié)作數(shù)據(jù)集,即高能物理、凝聚態(tài)物理和天體物理。每個(gè)圖對(duì)應(yīng)于來(lái)自每個(gè)領(lǐng)域的不同研究人員的自我網(wǎng)絡(luò)。任務(wù)是將每個(gè)圖分類到相應(yīng)研究人員所屬的領(lǐng)域。

生物信息學(xué)數(shù)據(jù)集。

  • MUTAG 是一個(gè)包含 188 個(gè)誘變芳香族和雜芳香族硝基化合物的數(shù)據(jù)集,具有 7 個(gè)離散標(biāo)簽。

  • PROTEINS 是一個(gè)數(shù)據(jù)集,其中節(jié)點(diǎn)是二級(jí)結(jié)構(gòu)元素 (SSE),如果兩個(gè)節(jié)點(diǎn)在氨基酸序列或 3D 空間中是相鄰節(jié)點(diǎn),則它們之間存在一條邊。 它有 3 個(gè)離散標(biāo)簽,代表螺旋、薄片或轉(zhuǎn)彎。

  • PTC 是一個(gè)包含 344 種化合物的數(shù)據(jù)集,報(bào)告了雄性和雌性大鼠的致癌性,它有 19 個(gè)離散標(biāo)簽。

  • NCI1 是由美國(guó)國(guó)家癌癥研究所 (NCI) 公開(kāi)提供的數(shù)據(jù)集,是經(jīng)過(guò)篩選以抑制或抑制一組人類腫瘤細(xì)胞系生長(zhǎng)的化學(xué)化合物平衡數(shù)據(jù)集的子集,具有 37 個(gè)離散標(biāo)簽。 部分結(jié)果展示:

[INFO] 2022-11-18 17:12:34,203 [ ? ? main.py: ? 98]: ? ?eval: epoch 347 | step 2082 | ?| loss 0.448468 | acc 0.684211 [INFO] 2022-11-18 17:12:34,297 [ ? ? main.py: ? 98]: ? ?eval: epoch 348 | step 2088 | ?| loss 0.393809 | acc 0.789474 [INFO] 2022-11-18 17:12:34,326 [ ? ? main.py: ? 92]: ? ?train: epoch 349 | step 2090 | loss 0.401544 | acc 0.8125 [INFO] 2022-11-18 17:12:34,391 [ ? ? main.py: ? 98]: ? ?eval: epoch 349 | step 2094 | ?| loss 0.441679 | acc 0.736842 [INFO] 2022-11-18 17:12:34,476 [ ? ? main.py: ? 92]: ? ?train: epoch 350 | step 2100 | loss 0.573693 | acc 0.7778 [INFO] 2022-11-18 17:12:34,485 [ ? ? main.py: ? 98]: ? ?eval: epoch 350 | step 2100 | ?| loss 0.481966 | acc 0.789474 [INFO] 2022-11-18 17:12:34,485 [ ? ? main.py: ?103]: ? ?best evaluating accuracy: 0.894737

結(jié)果整合:(這里就不把數(shù)據(jù)集一一跑一遍了)

| | MUTAG | COLLAB | IMDBBINARY | IMDBMULTI | | -------- | -------- | -------- |-------- | -------- | | PGL result | 90.8 | 78.6 |76.8 |50.8| | paper reuslt | 90.0 | 80.0 | 75.1 | 52.3 |

原論文所有結(jié)果:



圖學(xué)習(xí)之圖神經(jīng)網(wǎng)絡(luò)GraphSAGE、GIN圖采樣算法「系列七」的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
永春县| 高州市| 彰武县| 当阳市| 黔江区| 龙川县| 长武县| 璧山县| 罗定市| 鹿邑县| 奉贤区| 沐川县| 清远市| 阜阳市| 米脂县| 华坪县| 五华县| 密山市| 汉中市| 平昌县| 曲阜市| 英德市| 吐鲁番市| 荥经县| 建阳市| 沁阳市| 阿鲁科尔沁旗| 凤冈县| 海安县| 安徽省| 兴和县| 南木林县| 新密市| 青田县| 乌兰浩特市| 高邮市| 张北县| 宝应县| 灵石县| 前郭尔| 内江市|