原文鏈接
A Gentle Introduction to Graph Neural Networks (distill.pub)https://distill.pub/2021/gnn-intro/
內(nèi)容簡介:本文是“A Gentle Introduction to Graph Neural Networks”的閱讀筆記,因為第一次接觸GNN,很多深奧的概念不懂,因此沒有讀完全,maybe后續(xù)會補上。
Graph 是什么? Graph 實際上 就是 三個要素,vertex是節(jié)點,Edge邊,Attribute是圖的特征。
Graph問題用來做什么?可以分為三類,一是根據(jù)graph級別,比如找出拓撲里有環(huán)形的圖;二是 根據(jù)edge的關(guān)系給vertex聚類;三是根據(jù)vertex特點找到edge的feature。
Graph之間的信息如何傳遞聚合? GNN中的新信息傳遞是Information pooling,即節(jié)點之間傳遞信息,然后進行信息聚合。信息的聚合可以使用 平均,最大或者相加等方式。
設(shè)計GNN的規(guī)則? 設(shè)計GNN時,GNN的表現(xiàn)并不是層數(shù)越深越好,層數(shù)多會增強最差和平均解表現(xiàn),不能增強最好解表現(xiàn)。想要性能更好,一是設(shè)計更好的傳播機制,二是增加圖的屬性。
訓(xùn)練GNN時采樣? 因為GNN每個節(jié)點的鄰居和連的邊都不一樣,不像傳統(tǒng)神經(jīng)網(wǎng)絡(luò)可以取固定的size進行訓(xùn)練,有不同的方法可以采樣去訓(xùn)練,比如隨機采樣 ,隨機游走。
GNN的擴展模式??GNN 調(diào)整為更復(fù)雜的圖結(jié)構(gòu),例如,我們可以考慮多邊圖或多圖,如一對節(jié)點共享多條性質(zhì)不同的邊。
尚未理解的問題,Graph之間的信息傳遞機制都有哪些?以及是如何傳遞的?
Graph是如何訓(xùn)練的?采樣的有哪些技術(shù)?需要更深的了解
1.什么樣的數(shù)據(jù)可以轉(zhuǎn)化為Graph
graph實際上就是 vertex edge 和他們的attribute 組成的圖。
?2.哪一類的問題可以轉(zhuǎn)化為圖圖結(jié)構(gòu)問題?
一共有三類 :
In a graph-level task, we predict a single property for a whole graph. For a node-level task, we predict some property for each node in a graph. For an edge-level task, we want to predict the property or presence of edges in a graph.
Graph-level task
比如從一堆拓撲圖里找出具有兩個環(huán)形的圖
?Node-level task
?類似于給節(jié)點聚類
?Edge-level task
找出節(jié)點間的關(guān)系
用鄰接矩陣表示圖很消耗內(nèi)存,特別是當(dāng)鄰接矩陣是稀疏矩陣時,?如何把圖表示得更加節(jié)省內(nèi)存?
?GNN Predictions by Pooling Information
構(gòu)建了GNN之后,如何完成任務(wù)or做預(yù)測 ??
匯集工作分兩步進行:
1.對于要匯集的每個項目,收集它們的每個嵌入,并將它們連接成一個矩陣。
2. 然后,通常通過求和操作對收集到的嵌入式數(shù)據(jù)進行匯總
根據(jù)edge信息去預(yù)測node
?根據(jù)node的信息去預(yù)測edge
?根據(jù) node 和 edge的信息去預(yù)測global信息
?Passing messages between parts of the graph
我們可以通過在 GNN 層中使用池化技術(shù)來進行更復(fù)雜的預(yù)測,從而使我們學(xué)習(xí)到的嵌入信息能夠感知圖的連通性。我們可以通過信息傳遞來實現(xiàn)這一點,即相鄰節(jié)點或邊緣交換信息,并影響彼此更新的嵌入。
消息傳遞分為三個步驟:
1. 對于圖中的每個節(jié)點,收集所有相鄰節(jié)點的嵌入(或信息),即上文所述的 g函數(shù)。
2. 通過聚合函數(shù)(如 sum)匯總所有信息。
3. 所有匯集的信息將通過一個更新函數(shù)(通常是一個學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò))進行傳遞。
從本質(zhì)上講,信息傳遞和卷積都是匯總和處理元素鄰域信息以更新元素值的操作。在圖中,元素是一個節(jié)點,而在圖像中,元素是一個像素。然而,圖中相鄰節(jié)點的數(shù)量可以是可變的,這與圖像中每個像素都有固定數(shù)量的相鄰元素不同。
通過將消息傳遞 GNN 層堆疊在一起,一個節(jié)點最終可以整合來自整個圖的信息:經(jīng)過三層之后,一個節(jié)點就可以獲得離它三步遠的節(jié)點的信息。
一般建模模板先使用連續(xù)的 GNN 層,然后再用一個帶有 sigmoid 激活的線性模型來進行分類。GNN 的設(shè)計空間有許多可以定制模型的杠桿:
1.GNN層數(shù),也稱為深度。
2.更新每個屬性的維數(shù)。更新函數(shù)是一個帶有relu激活函數(shù)和層規(guī)范化的1層MLP。
3.匯聚函數(shù)在匯聚中使用:最大值、平均值或總和。
4。更新的圖屬性或消息傳遞樣式:節(jié)點、邊緣和全局表示。我們通過布爾切換(開或關(guān))來控制這些?;€模型將是獨立于圖形的GNN(所有消息傳遞關(guān)閉),它在最后將所有數(shù)據(jù)聚合到單個全局屬性中。打開所有消息傳遞函數(shù)會產(chǎn)生GraphNets架構(gòu)。
數(shù)據(jù)匯總到一個單一的全局屬性中。切換所有消息傳遞功能可產(chǎn)生一個 GraphNets 架構(gòu)。
由于這些是高維向量,我們通過主成分分析(PCA)將它們降至2D。一個完美的模型應(yīng)該能夠清晰地分離標(biāo)記數(shù)據(jù),但由于我們正在降維并且也有不完美的模型,這個邊界可能會更難看到。
Some empirical GNN design lessons
1.越深的網(wǎng)絡(luò)層并不能表現(xiàn)越好。
2,表現(xiàn)主要和以下相關(guān):消息傳遞的類型,映射的維度,層數(shù)和匯聚操作類型。
平均性能和最差性能隨著GNN層數(shù)的增多而性能上升,但是最好的性能并不會隨層數(shù)增加而上升。這種效應(yīng)可能是因為層數(shù)越多的 GNN 傳播信息的距離就越遠,其節(jié)點表征可能會因多次連續(xù)迭代而被 "稀釋"。
交流的圖形屬性越多,平均模型的性能就越好。我們的任務(wù)以全局表示為中心,因此明確學(xué)習(xí)這一屬性也往往會提高性能。我們的節(jié)點表征似乎也比邊緣表征更有用,這是有道理的,因為這些屬性中加載了更多的信息。
要想獲得更好的性能,有很多方向可以選擇。我們希望強調(diào)兩個大方向,一個與更復(fù)雜的圖算法有關(guān),另一個則與圖本身有關(guān)。
到目前為止,GNN 基于鄰域的池化操作。有些圖概念比較難用這種方式表達,例如線性圖路徑(節(jié)點的連接鏈)。設(shè)計新的機制,以便在 GNN 中提取、執(zhí)行和傳播圖信息,是當(dāng)前的一個研究領(lǐng)域 ?。
GNN 研究的一個前沿領(lǐng)域不是建立新的模型和架構(gòu),而是 "如何構(gòu)建圖",更準(zhǔn)確地說,是為圖添加可以利用的附加結(jié)構(gòu)或關(guān)系。正如我們所看到的,圖的屬性越多,我們就越能建立更好的模型。在這種特殊情況下,我們可以考慮通過增加節(jié)點之間的空間關(guān)系、增加非鍵的邊或明確子圖之間的可學(xué)習(xí)關(guān)系,使分子圖的特征更加豐富。
與GNN相關(guān)的graph
雖然我們只描述了每個屬性都有矢量化信息的圖形,但圖形結(jié)構(gòu)更加靈活,可以容納其他類型的信息。幸運的是,消息傳遞框架足夠靈活,通常情況下,將 GNN 調(diào)整為更復(fù)雜的圖結(jié)構(gòu),只需定義信息如何通過新的圖屬性傳遞和更新即可。
例如,我們可以考慮多邊圖或多圖,其中一對節(jié)點可以共享多種類型的邊。例如,在社交網(wǎng)絡(luò)中,我們可以根據(jù)關(guān)系類型(熟人、朋友、家人)指定邊的類型。通過為每種邊緣類型設(shè)置不同類型的信息傳遞步驟,可以對 GNN 進行調(diào)整。我們還可以考慮嵌套圖,例如一個節(jié)點代表一個圖,也稱為超節(jié)點圖。嵌套圖對于表示層次信息非常有用。例如,我們可以考慮分子網(wǎng)絡(luò),其中一個節(jié)點代表一個分子,如果我們有將一個分子轉(zhuǎn)化為另一個分子的方法(反應(yīng)),則兩個分子之間共享一條邊。在這種情況下,我們可以在嵌套圖上學(xué)習(xí),方法是讓一個 GNN 在分子層面學(xué)習(xí)表示法,另一個在反應(yīng)網(wǎng)絡(luò)層面學(xué)習(xí)表示法,并在訓(xùn)練過程中交替使用。
另一種圖是超圖,在超圖中,一條邊可以連接多個節(jié)點,而不僅僅是兩個節(jié)點。對于給定的圖,我們可以通過識別節(jié)點群落來構(gòu)建超圖,并分配一條與群落中所有節(jié)點相連的超邊。
Sampling Graphs and Batching in GNNs?
通常對于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練來說 ,我們?nèi)∫粋€ 固定 size 的mini-batch,可是對GNN網(wǎng)絡(luò)不可這樣,因為GNN網(wǎng)絡(luò)中每個node連接的edge不是固定的,沒有一個恒定的size。對圖進行分批處理的思路就是構(gòu)建子圖。構(gòu)建子圖就會涉及到圖采樣。
如何對圖進行采樣是一個尚未解決的研究問題。
如果我們希望保留鄰域級別的結(jié)構(gòu),一種方法是隨機抽取一定數(shù)量的節(jié)點,即我們的節(jié)點集。然后添加與節(jié)點集相鄰的距離為 k 的鄰接節(jié)點,包括它們的邊。每個鄰域可視為一個單獨的圖,GNN 可在這些子圖的批次上進行訓(xùn)練。由于所有相鄰節(jié)點的鄰域都不完整,因此可以掩蓋損失,只考慮節(jié)點集。
更有效的策略可能是先隨機抽樣一個節(jié)點,將其鄰域擴大到距離 k,然后在擴大的集合中挑選其他節(jié)點。一旦構(gòu)建了一定數(shù)量的節(jié)點、邊或子圖,就可以終止這些操作。如果情況允許,我們可以通過選取一個初始節(jié)點集,然后對一定數(shù)量的節(jié)點進行子采樣(例如隨機采樣,或通過隨機漫步或 Metropolis 算法)來構(gòu)建恒定大小的鄰域。
Comparing aggregation operations
匯集相鄰節(jié)點和邊的信息是?GNN 關(guān)鍵步驟。每個節(jié)點的鄰居數(shù)量不固定,需要一種差別化的方法來匯集這些信息,因此匯集操作應(yīng)該有平滑性,對節(jié)點排序和節(jié)點數(shù)量具有不變性。
選擇和設(shè)計最佳聚合操作是一個尚未解決的研究課題。聚合操作的一個理想特性是相似的輸入提供相似的聚合輸出,反之亦然。一些非常簡單的候選包絡(luò)不變操作包括總和、平均值和最大值。方差等匯總統(tǒng)計也可以使用。所有這些運算都采用數(shù)量可變的輸入,無論輸入排序如何,都能提供相同的輸出。文章來源:http://www.zghlxwxcb.cn/news/detail-611298.html
沒有哪種操作是一成不變的最佳選擇。當(dāng)節(jié)點的鄰居數(shù)量變化很大,或者需要對局部鄰域的特征進行歸一化處理時,平均值操作可能會很有用。當(dāng)你想突出本地鄰域中的單個突出特征時,最大值運算可能會很有用。求和則在這兩者之間取得了平衡,它提供了局部特征分布的快照,但由于沒有進行歸一化處理,因此也會突出異常值。在實踐中,求和是常用的方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-611298.html
到了這里,關(guān)于GNN的一篇入門 :A Gentle Introduction to Graph Neural Networks的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!