選自medium
作者:Rishabh Anand
機器之心編譯
參與:Panda
在社交網絡分析等一些應用中,圖神經網絡已經得到了廣泛的應用。新加坡科技研究局(A*STAR)的研究者 Rishabh Anand 近日通過圖解的方式介紹了圖與圖神經網絡的基本概念,或許能幫助初學者更直觀地理解圖神經網絡的内涵和價值。
圖深度學習(Graph Deep Learning,GDL)是一個很有發展前景的研究領域,基于圖數據來學習和分析非常有用。本文将介紹簡單圖神經網絡(GNN)的基礎知識及其内在工作原理背後的直觀知識。不過,大家不用擔心,為了能夠更直觀地看懂究竟發生了什麼,作者在文中使用了大量彩圖給出圖解信息。圖(Graph)是什麼?圖是一種由連接在一起的節點(頂點)和邊構成的數據結構,可用于表示沒有明确起點或終點的信息。所有節點都可占據空間中的任意位置,當用二維或多維空間繪制圖的結構時,具有相似特征的節點通常會聚集到一起。
這就是一個圖,由一群分别表示實體的互連節點構成。邊上面的黑色尖頭表示節點之間的關系類型,其可表明一個關系是雙向的還是單向的。圖有兩種主要類型:有向圖和無向圖。在有向圖中,節點之間的連接存在方向;而無向圖的連接順序并不重要。有向圖既可以是單向的,也可以是雙向的。圖可以表示很多事物——社交網絡、分子等等。節點可以表示用戶/産品/原子,而邊表示它們之間的連接,比如關注/通常與相連接的産品同時購買/鍵。社交網絡圖可能看起來像是這樣,其中節點是用戶,邊則是連接:
節點表示用戶,邊則表示兩個實體之間的連接/關系。真實的社交網絡圖往往更加龐大和複雜!接下來作者會介紹一些概念,如循環單元、嵌入向量表征和前饋神經網絡。知道一些有關圖論的知識(比如什麼是圖以及圖的形态)也很不錯。有些術語你可能并不熟悉。不用擔心!對于那些讓人疑惑的術語,作者都盡力鍊接了他可以找到的最靠譜的解釋,能讓你理解所涉概念的基本含義。基于此,你還能進一步了解這些概念,同時還能理解它們在圖神經網絡中所發揮的作用。了解圖神經網絡每個節點都有一組定義它的特征。在社交網絡圖的案例中,這些特征可以是年齡、性别、居住國家、政治傾向等。每條邊連接的節點都可能具有相似的特征。這體現了這些節點之間的某種相關性或關系。假設我們有一個圖 G,其具有以下頂點和邊:
這個圖與上圖是一樣的。為了簡單起見,我們假設其特征向量是當前節點的索引的 one-hot 編碼。類似地,其标簽(或類别)可設為節點的顔色(綠、紅、黃)。那麼這個圖看起來會是這樣:
節點的順序其實并不重要。注:在實際運用中,盡量不要使用 one-hot 編碼,因為節點的順序可能會非常混亂。相反,應該使用可明顯區分節點的特征,比如對社交網絡而言,可選擇年齡、性别、政治傾向等特征;對分子研究而言可選擇可量化的化學性質。現在,我們有節點的 one-hot 編碼(或嵌入)了,接下來我們将神經網絡引入這一混合信息中來實現對圖的修改。所有的節點都可轉化為循環單元(或其它任何神經網絡架構,隻是我這裡使用的是循環單元);所有的邊都包含簡單的前饋神經網絡。那麼看起來會是這樣:
其中的信封符号隻是每個節點的 one-hot 編碼的向量(嵌入)。消息傳遞一旦節點和邊的轉化完成,圖就可在節點之間執行消息傳遞。這個過程也被稱為「近鄰聚合(Neighbourhood Aggregation)」,因為其涉及到圍繞給定節點,通過有向邊從周圍節點推送消息(即嵌入)。注:有時候你可為不同類型的邊使用不同的神經網絡,比如為單向邊使用一種神經網絡,為雙向邊使用另一種神經網絡。這樣你仍然可以獲取節點之間的空間關系。就 GNN 而言,對于單個參考節點,近鄰節點會通過邊神經網絡向參考節點上的循環單元傳遞它們的消息(嵌入)。參考循環單位的新嵌入更新,基于在循環嵌入和近鄰節點嵌入的邊神經網絡輸出的和上使用循環函數。我們把上面的紅色節點放大看看,并對這一過程進行可視化:
紫色方塊是一個應用于來自近鄰節點的嵌入(白色信封)上的簡單前饋神經網絡;紅色三角形是應用于當前嵌入(白色信封)和邊神經網絡輸出(黑色信封)之和上的循環函數,以得到新的嵌入(最上面的白色信封)。這個過程是在網絡中的所有節點上并行執行的,因為 L 1 層的嵌入取決于 L 層的嵌入。因此,在實踐中,我們并不需要從一個節點「移動」到另一節點就能執行消息傳遞。注:邊神經網絡輸出(黑色信封)之和與輸出的順序無關。最後的向量表征有什麼用?執行了幾次近鄰聚合/消息傳遞流程之後,每個節點的循環單元都會獲得一組全新的嵌入。此外,經過多個時間步驟/多輪消息傳遞之後,節點對自己和近鄰節點的信息(特征)也會有更好的了解。這會為整個圖創建出更加準确的表征。要進一步在該流程的更高層面上進行處理或者隻是簡單地表征該圖,你可以将所有嵌入加到一起得到向量 H 來表示整個圖。使用 H 比使用鄰接矩陣更好,因為不管怎樣對圖進行扭轉變形,這些矩陣都并不表征圖的特征或獨特性質——隻是節點之間的邊連接(這在某些情形下并不是很重要)。總結一下,我們将所有節點循環單元的最終向量表征加到一起(當然,與順序無關),然後使用所得到的向量作為其它工作過程的輸入或簡單地将其用于表征該圖。這個步驟看起來如下圖所示:
這是經過 n 次重複消息傳遞之後帶有已完全更新的嵌入向量的最終圖。你可以将所有節點的表。征加到一起得到 H。四步驟助你實現圖神經網絡GNN 用起來相當簡單。事實上,實現它們涉及到以下四個步驟:
- 給定一個圖,首先将節點轉換為循環單元,将邊轉換為前饋神經網絡;
- 接着為所有節點執行 n 次近鄰聚合(也就是消息傳遞);
- 然後再在所有節點的嵌入向量上求和以得到圖表征 H;
- 最後可以完全跳過 H 直接向更高層級進發或者也可使用 H 來表征該圖的獨有性質。
小結現在我們清楚地了解圖神經網絡的運行方式了。得益于 GNN 在圖節點之間依賴關系進行建模的強大性能,它在社交網絡、知識圖譜和推薦系統方面都有廣泛的應用。以社交網絡圖為例,GNN 在内容推薦方面表現很好。舉個例子,當一個用戶關注另一個政治傾向相似的用戶時,GNN 可用于節點分類,以預測是否可将網站上的特定内容發送到上述用戶的新聞流;當 GNN 用于「推薦關注」時,系統可以考慮用戶所在的行業,再提供潛在的連接——邊分類。圖深度學習其實非常有趣。本文的亮點在于使用一些可視化圖介紹了圖神經網絡的基礎概念,但如果想要透徹地了解 GNN,大家最好自己寫代碼實現看看。
,