本文主要涉及圖機器學習的基礎知識。
我們首先學習什麼是圖,為什麼使用圖,以及如何最佳地表示圖。然後,我們簡要介紹大家如何在圖資料上學習,從神經網路以前的方法 (同時我們會探索圖特徵) 到現在廣為人知的圖神經網路 (Graph Neural Network,GNN)。最後,我們將一窺圖資料上的 Transformers 世界。
本質上來講,圖描述了由關係互相連結起來的實體。
現實中有很多圖的例子,包括社群網路 (如推特,長毛象,以及任何連結論文和作者的參照網路) 、分子、知識圖譜 (如 UML 圖,百科全書,以及那些頁面之間有超連結的網站) 、被表示成句法樹的句子、3D 網格等等。因此,可以毫不誇張地講,圖無處不在。
圖 (或網路) 中的實體稱為 節點 (或頂點) ,它們之間的連線稱為 邊 (或連結) 。舉個例子,在社群網路中,節點是使用者,而邊是他 (她) 們之間的連線關係;在分子中,節點是原子,而邊是它們之間的分子鍵。
可以存在不止一種型別的節點或邊的圖稱為 異構圖 (heterogeneous graph) (例子:參照網路的節點有論文和作者兩種型別,含有多種關係型別的 XML 圖的邊是多型別的) 。異構圖不能僅由其拓撲結構來表徵,它需要額外的資訊。本文主要討論同構圖 (homogeneous graph) 。
圖還可以是 有向 (directed) 的 (如一個關注網路中,A 關注了 B,但 B 可以不關注 A) 或者是 無向 (undirected) 的 (如一個分子中,原子間的關係是雙向的) 。邊可以連線不同的節點,也可以自己連線自己 (自連邊,self-edges) ,但不是所有的節點都必須有連線。
如果你想使用自己的資料,首先你必須考慮如何最佳地刻畫它 (同構 / 異構,有向 / 無向等) 。
我們一起看看在圖上我們可以做哪些任務吧。
在 圖層面,主要的任務有:
在 節點層面,通常用於預測節點屬性。舉個例子,Alphafold 使用節點屬性預測方法,在給定分子總體圖的條件下預測原子的 3D 座標,並由此預測分子在 3D 空間中如何摺疊,這是個比較難的生物化學問題。
在 邊層面,我們可以做邊屬性預測或缺失邊預測。邊屬性預測可用於在給定藥物對 (pair) 的條件下預測藥物的不良副作用。缺失邊預測被用於在推薦系統中預測圖中的兩個節點是否相關。
另一種可能的工作是在 子圖層面 的,可用於社群檢測或子圖屬性預測。社群網路用社群檢測確定人們之間如何連線。我們可以在行程系統 (如 Google Maps) 中發現子圖屬性預測的身影,它被用於預測到達時間。
完成這些任務有兩種方式。
當你想要預測特定圖的演化時,你工作在 直推 (transductive) 模式,直推模式中所有的訓練、驗證和推理都是基於同一張圖。如果這是你的設定,要多加小心!在同一張圖上建立訓練 / 評估 / 測試集可不容易。 然而,很多工其實是工作在不同的圖上的 (不同的訓練 / 評估 / 測試集劃分) ,我們稱之為 歸納 (inductive) 模式。
常用的表示圖以用於後續處理和操作的方法有 2 種:
注意:多數圖的邊連線並不稠密,因此它們的鄰接矩陣是稀疏的,這個會讓計算變得困難。
雖然這些表示看上去很熟悉,但可別被騙了!
圖與機器學習中使用的典型物件大不相同,因為它們的拓撲結構比序列 (如文字或音訊) 或有序網格 (如影象和視訊) 複雜得多:即使它們可以被表示成連結串列或者矩陣,但它們並不能被當作有序物件來處理。
這究竟意味著什麼呢?如果你有一個句子,你交換了這個句子的詞序,你就創造了一個新句子。如果你有一張影象,然後你重排了這個影象的列,你就創造了一張新影象。
但圖並不會如此。如果你重排了圖的邊列表或者鄰接矩陣的列,圖還是同一個圖 (一個更正式的叫法是置換不變性 (permutation invariance) ) 。
使用機器學習處理圖的一般流程是:首先為你感興趣的物件 (根據你的任務,可以是節點、邊或是全圖) 生成一個有意義的表示,然後使用它們訓練一個目標任務的預測器。與其他模態資料一樣,我們想要對這些物件的數學表示施加一些約束,使得相似的物件在數學上是相近的。然而,這種相似性在圖機器學習上很難嚴格定義,舉個例子,具有相同標籤的兩個節點和具有相同鄰居的兩個節點哪兩個更相似?
注意:在隨後的部分,我們將聚焦於如何生成節點的表示。一旦你有了節點層面的表示,就有可能獲得邊或圖層面的資訊。你可以通過把邊所連線的兩個節點的表示串聯起來或者做一個點積來得到邊層面的資訊。至於圖層面的資訊,可以通過對圖上所有節點的表示串聯起來的張量做一個全域性池化 (平均,求和等) 來獲得。當然,這麼做會平滑掉或丟失掉整圖上的一些資訊,使用迭代的分層池化可能更合理,或者增加一個連線到圖上所有其他節點的虛擬節點,然後使用它的表示作為整圖的表示。
在神經網路出現之前,圖以及圖中的感興趣項可以被表示成特徵的組合,這些特徵組合是針對特定任務的。儘管現在存在 更復雜的特徵生成方法,這些特徵仍然被用於資料增強和 半監督學習。這時,你主要的工作是根據目標任務,找到最佳的用於後續網路訓練的特徵。
節點層面特徵 可以提供關於其重要性 (該節點對於圖有多重要?) 以及 / 或結構性 (節點周圍的圖的形狀如何?) 資訊,兩者可以結合。
節點 中心性 (centrality) 度量圖中節點的重要性。它可以遞迴計算,即不斷對每個節點的鄰節點的中心性求和直到收斂,也可以通過計算節點間的最短距離來獲得,等等。節點的 度 (degree) 度量節點的直接鄰居的數量。聚類係數 (clustering coefficient) 度量一個節點的鄰節點之間相互連線的程度。圖元度向量 (Graphlets degree vectors,GDV) 計算給定根節點的不同圖元的數目,這裡圖元是指給定數目的連通節點可建立的所有迷你圖 (如:3 個連通節點可以生成一個有兩條邊的線,或者一個 3 條邊的三角形) 。
邊層面特徵帶來了關於節點間連通性的更多細節資訊,有效地補充了圖的表示,有:兩節點間的 最短距離 (shortest distance),它們的公共鄰居 (common neighbours),以及它們的 卡茲指數 (Katz index) (表示兩節點間從所有長度小於某個值的路徑的數目,它可以由鄰接矩陣直接算得) 。
圖層面特徵 包含了關於圖相似性和規格的高層資訊。總 圖元數 儘管計算上很昂貴,但提供了關於子圖形狀的資訊。核方法 通過不同的 「節點袋 (bag of nodes) 」 (類似於詞袋 (bag of words) ) 方法度量圖之間的相似性。
基於遊走的方法 使用在隨機遊走時從節點j存取節點i的可能性來定義相似矩陣;這些方法結合了區域性和全域性的資訊。舉個例子,Node2Vec模擬圖中節點間的隨機遊走,把這些遊走路徑建模成跳字 (skip-gram) ,這與我們處理句子中的詞很相似,然後計算嵌入。基於隨機遊走的方法也可被用於加速 Page Rank方法,幫助計算每個節點的重要性得分 (舉個例子:如果重要性得分是基於每個節點與其他節點的連通度的話,我們可以用隨機遊走存取到每個節點的頻率來模擬這個連通度) 。
然而,這些方法也有限制:它們不能得到新的節點的嵌入向量,不能很好地捕獲節點間的結構相似性,也使用不了新加入的特徵。
神經網路可泛化至未見資料。我們在上文已經提到了一些圖表示的約束,那麼一個好的神經網路應該有哪些特性呢?
它應該:
滿足置換不變性:
滿足置換等價性
典型的神經網路,如迴圈神經網路 (RNN) 或折積神經網路 (CNN) 並不是置換不變的。因此,圖神經網路 (Graph Neural Network, GNN) 作為新的架構被引入來解決這一問題 (最初是作為狀態機使用) 。
一個 GNN 由連續的層組成。一個 GNN 層通過 訊息傳遞 (message passing) 過程把一個節點表示成其鄰節點及其自身表示的組合 (聚合 (aggregation)) ,然後通常我們還會使用一個啟用函數去增加一些非線性。
與其他模型相比:CNN 可以看作一個鄰域 (即滑動視窗) 大小和順序固定的 GNN,也就是說 CNN 不是置換等價的。一個沒有位置嵌入 (positional embedding) 的 Transformer 模型可以被看作一個工作在全連線的輸入圖上的 GNN。
多種方式可用於聚合鄰節點的訊息,舉例來講,有求和,取平均等。一些值得關注的工作有:
選擇聚合方法:一些聚合技術 (尤其是均值池化和最大池化) 在遇到在鄰節點上僅有些微差別的相似節點的情況下可能會失敗 (舉個例子:採用均值池化,一個節點有 4 個鄰節點,分別表示為 1,1,-1,-1,取均值後變成 0;而另一個節點有 3 個鄰節點,分別表示為 - 1,0,1,取均值後也是 0。兩者就無法區分了。) 。
每加一個新層,節點表示中就會包含越來越多的節點資訊。
一個節點,在第一層,只會聚合它的直接鄰節點的資訊。到第二層,它們仍然只聚合直接鄰節點資訊,但這次,他們的直接鄰節點的表示已經包含了它們各自的鄰節點資訊 (從第一層獲得) 。經過 n 層後,所有節點的表示變成了它們距離為 n 的所有鄰節點的聚合。如果全圖的直徑小於 n 的話,就是聚合了全圖的資訊!
如果你的網路層數過多,就有每個節點都聚合了全圖所有節點資訊的風險 (並且所有節點的表示都收斂至相同的值) ,這被稱為過平滑問題 (the oversmoothing problem)。
這可以通過如下方式來解決:
過平滑問題是圖機器學習的重要研究領域,因為它阻止了 GNN 的變大,而在其他模態資料上 Transformers 之類的模型已經證明了把模型變大是有很好的效果的。
沒有位置嵌入 (positional encoding) 層的 Transformer 模型是置換不變的,再加上 Transformer 模型已被證明擴充套件性很好,因此最近大家開始看如何改造 Transformer 使之適應圖資料 (綜述) 。多數方法聚焦於如何最佳表示圖,如找到最好的特徵、最好的表示位置資訊的方法以及如何改變注意力以適應這一新的資料。
這裡我們收集了一些有意思的工作,截至本文寫作時為止,這些工作在現有的最難的測試基準之一 斯坦福開放圖測試基準 (Open Graph Benchmark, OGB) 上取得了最高水平或接近最高水平的結果:
最新的工作是 Pure Transformers are Powerful Graph Learners (Kim et al, 2022),它引入了 TokenGT。這一方法把輸入圖表示為一個節點和邊嵌入的序列 (並用正交節點標識 (orthonormal node identifiers) 和可訓練的型別標識 (type identifiers) 增強它) ,而不使用位置嵌入,最後把這個序列輸入給 Tranformer 模型。超級簡單,但很聰明!
稍有不同的是,Recipe for a General, Powerful, Scalable Graph Transformer (Rampášek et al, 2022) 引入的不是某個模型,而是一個框架,稱為 GraphGPS。它允許把訊息傳遞網路和線性 (長程的) transformer 模型結合起來輕鬆地建立一個混合網路。這個框架還包含了不少工具,用於計算位置編碼和結構編碼 (節點、圖、邊層面的) 、特徵增強、隨機遊走等等。
在圖資料上使用 transformer 模型還是一個非常初生的領域,但是它看上去很有前途,因為它可以減輕 GNN 的一些限制,如擴充套件到更大 / 更稠密的圖,抑或是增加模型尺寸而不必擔心過平滑問題。
如果你想鑽研得更深入,可以看看這些課程:
不錯的處理圖資料的庫有
PyGeometric (用於圖機器學習) 以及 NetworkX (用於更通用的圖操作)。
如果你需要質量好的測試基準,你可以試試看:
如果想要更多的資料集,可以看看:
縮圖中的 Emoji 表情來自於 Openmoji (CC-BY-SA 4.0),圖元的圖片來自於 Biological network comparison using graphlet degree distribution (Pržulj, 2007)。
英文原文: https://huggingface.co/blog/intro-graphml
譯者: Matrix Yao (姚偉峰)