GE做的事情是將圖表示成為低維向量,類似與nlp將詞、句子等embedding。distributed representation的一體化過程,萬物皆可embedding。

在圖中最重要的兩個部分就是

www-18有個很好的tutorialRepresentation Learning on Networks[1],可以參考

1.1.圖中學習的分類

1.2.相似度度量方法

度量方式可以進行如下分類

典型代表就是GraRep(Cao et al, 2015)和HOPE (Yan et al., 2016)了,一個考慮不同跳數分別訓練然后concatenate,一個考慮neighbor的重復程度。

neighborhood aggregate的方法可以對每個target node來刻畫以它為中心的計算圖,如

對于每一個node,都構成了一個計算圖,而且每個node的計算圖都有差別

我們可以看到GNN逐漸成形了,考慮簡單的aggregate方式可以表示成這個樣子

數學表示也十分清晰了,如下圖,  就是節點  的第  個時間步(或第  layer)的embedding

這就好家伙了,上圖中一些參數就可以generalize到一些unseen的點了,如下圖

這種能力稱之為inductive capability

早期邁向neural的過程借鑒了nlp的方法,如deepwalk[2]利用word2vec的方法,因為語料中詞語出現的次數與在圖上隨機游走節點被訪問到底的次數都服從冪律分布,采用隨機游走進行采樣出序列,然后按照word2vec的方法進行訓練。

word2vec出現在2013年,deepwalk 14年就出現了,緊隨其后。

后來來也出現了很多,如Line,node2vec,struc2vec,聽名字就知道,Line和node2vec是在描述圖像時刻畫節點的embedding,不過在游走的方式上進行探索,是DFS還是BFS還是both呢?到了struc2vec開始走節點空間結構的相似性這條路了。

其實這些已經跨入到neural的階段了,但是還用的比較初級,沒有專門為graph設計的neural的模型,探索階段。

2.Graph neural network

2.1.Graph convolutional network(GCN)

2.1.1.引子:熱傳播模型

圖卷積是基于熱傳播模型,即兩個點之間熱傳播的速度和兩點之間溫度差值成正比,把這個熱傳播模型推廣到圖上就是信息傳播的速度關系[5]。

?k和單元的比熱容、質量有關是個常數。右邊第一項是下一個單元向本單元的熱量流入導致溫度升高,第二項是本單元向上一個單元的熱量流出導致溫度降低。這是一個二階差分,即二階導數。

而且是相同算子的二階導,在高緯空間中是所有非混合二階偏導數之和,稱為拉普拉斯算子。

在離散圖模型中是相似的,和鏈條熱傳播不同的是沒有了上一個和下一個單元,有的是該節點所有的鄰接節點(鄰接矩陣刻畫),所以同樣的方式刻畫為

其中??A是這個圖的鄰接矩陣,即所有相鄰節點的流入流出關系加和構成了??這個節點溫度總的變化。

我們不妨用乘法分配律稍微對上式做一個推導:

即可以寫成這樣:

回顧剛才在連續歐氏空間的那個微分方程:

二者具有一樣的形式。這實際上是同一種變換在不同空間上的體現。?D-A就是其中最簡單常用的圖上的拉普拉斯算子矩陣。

GCN的neighborhood aggregation

因為是熱傳播模型,流動的feature要流入每一個鄰接節點,所以加入了一個normalization,即節點的feature需要對所有neighbor取均值之后再進行流動。

2.1.2.熱傳播在graph上的求解:傅里葉變換

假設在圖中各個結點流動的東西不是熱量,而是特征(Feature),而是消息(Message),那么問題自然而然就被推廣到了GCN。所以GCN的實質是什么,是在一張Graph Network中特征(Feature)和消息(Message)中的流動和傳播。

由于很多東西在頻域上會更好解決,而且拉普拉斯矩陣與傅里葉不謀而合,所以頻域上解決的方案來做。先來推導下傅里葉變換和拉普拉斯算子的關系

關于傅里葉變換的理解,可參照我之前的博客[6]。所以,傅里葉變換就被推廣為時域信號與特定空間上拉普拉斯算子特征函數的積分

理解下這個公式,實對稱矩陣的特征空間的所有基能夠張出整個線性空間且它們兩兩正交,所以無論是拉普拉斯算子  還是拉普拉斯矩陣  ,它們的特征空間是一個滿秩且基兩兩正交的空間,所以把歐氏空間的  推廣到圖空間的  的這一組特征向量。正是同一個關系(Message Passing),同一種變換,在不同空間下的體現。

現在我們已經得到了graph空間上的拉普拉斯算子??,只需要對??求出其特征向量貌似就可以傅里葉變換了。等等,我們到底需要傅里葉變換干嘛?經過前面的鋪墊,傅里葉變換做了一個空間的變換,而這個空間里的卷積就非常絕-卷積定理卷積和乘積的變換

在傳統的譜圖卷積下,由卷積定理

函數卷積的傅里葉變換是函數傅里葉變換的乘積。具體分為時域卷積定理頻域卷積定理,時域卷積定理即時域內的卷積對應頻域內的乘積;頻域卷積定理即頻域內的卷積對應時域內的乘積,兩者具有對偶關系。

時域卷積(時域內的卷積對應頻域內的乘積)如下:

為了更好理解,證明方法如下:

因此,卷積的傅里葉等于傅里葉的積。

做逆變換

所以現在傅里葉域做乘積,然后做傅里葉逆變換,等價于在原空間直接做卷積。

2.2.分析下graph neural中哪些東西可以做?

如以上分析,本質是圖上特征流動進行建模,然后利用傅里葉變換作為解決方案。

建模的方法還可以更加豐富,不一定流動速度非要和溫度查成正比,可以用更加復雜的模型,如神經網絡等來進行更加復雜的建模。

建模時也可以不是單純對相鄰節點的影響進行簡單的加和,在實際建模中,我們的Aggregate不一定是加和,可以把Aggregate推廣成各種操作例如Sum Pooling,例如LSTM,例如Attention

解決方案也是如此,不一定非要在傅里葉域做,傅里葉做的譜圖卷積,現在也可以直接在原空間域做卷積-Spatial Convolution,如DCNN[7],GAT[8]等

2.3.損失函數

對于無監督的訓練,其實就和nlp的預訓練類似,訓練出embedding,訓練好之后再接下游任務。

對于有監督的訓練來說,如節點分類,一個比較簡單的方案就是對每個node的embedding接一個全連接層,就得到了一個損失函數

 就是全連接層的權重。

3.GraphSAGE[9]:generalized aggregation方法

GCN是譜圖方法的代表,那么GraphSAGE就是非譜圖方法的代表。

如何進行更好的aggregate呢?

最后的這個黑盒里面可以裝的東西就多了,只要能把多個vector最后map到一個最終的vector就行

GraphSAGE則是將aggregate后的neighbor和本身的self-embedding這兩個concatenate到一起作為新的embedding,而不是傳統的把所有的embedding 加權求和,在原始論文中,作者提出這是一種很好的’skip connection‘的方法。當然AGG也可以有很多變體,不一定非要是aggregate,也可以是poollstm等等。

4.Gated Graph Neural Networks[10]:go deeper with RNN

GCNs and GraphSAGE generally only 2-3 layers deep,因此對于每個node所構成的aggregate圖比較淺,如何走得更深呢?

可能會存在overfit或者梯度消失/爆炸,所以我們希望一個簡化可重用的模型,RNN!

每一層都使用相同的RNN單元,因為每個node 的neighbor的數量不同,所以先對所有neighbor做aggregate,我們稱之為“message”

?

然后利用GRU對message和上一步狀態做處理得到新的狀態。

5.Graph level的embedding

直接把圖中所有node的embedding相加

引入一個virtual node來代表graph,并用神經網絡進行訓練

6.Graph attention network

利用attention在graph中動態確定和neighbor的權重,并利用mask只考慮鄰近的neighbor。

這篇文章用的attention與transfomer并不相同,只有一個突然formation matrix,而不是像attention中有q,k,v三個transformation

利用一個單層的全連接網絡來確定系數,將這兩個vector contatenate在一起輸入。然后進行softmax歸一化

同時還采用了multi-head attention的機制

得到歸一化的注意力系數后,使用歸一化的值計算對應特征的線性組合,作為每個頂點最后的輸出特征(最后可以加一個非線性層,σ):

  就是GAT輸出的節點i融合了鄰域信息的新特征

優點(摘自原文)

7.application example

如node classification和link prediction

在實際的運用中,可以運用在

8.彩蛋:卷積的含義

卷積又稱褶積,來源于數字信號的處理

卷積的形式可以分兩類:

連續形式:

離散形式:

先對g函數進行翻轉,然后再把g函數平移到n,然后滑動疊加,這就是卷積的過程。

我們可以考慮在原始的數字信號處理中,對于一個輸入信號  ,我們想要得到一個在特定時間下的輸出信號,  可以看成信號的衰減過程(單位沖擊響應函數),  可以看成是想要得到輸出信號的時間。

比如以一天24h為例,我們希望得到一天結束時總的信號。在0時產生的信號  ,那么在24小時后衰減  ,在1時產生的信號為  ,那么這一天結束時衰減  ,以此類推,把每個時刻產生的信號以及到一天結尾時衰減程度相乘相加,就是所謂的卷積了,得到這一天結束時總的信號了。

那么對于圖片呢?

其實仍然是矩陣對應元素的相乘相加,只是矩陣  可以看成filter是翻轉了。

但是其實CNN中用的更確切應該稱為互關(co-relation),因為filter是沒有進行翻轉的,可以對比一下這兩者表達式的區別

co-relation:

convlution:

但是其實CNN中不必那么嚴格的進行區分,學習一個翻轉前和翻轉后的filter并無不同,但是在數字信號處理中是不同的。

卷積擁有更多美好的性質,如交換律結合律等,在CNN中互關基本也都被稱為卷積了。而且當核對稱的時候,其實就完全一樣了。

文章轉自微信公眾號@算法進階

上一篇:

從 0 實現多分類SVM(Python)

下一篇:

基于對比學習的時間序列異常檢測方法
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費