從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網絡模型 (三)


本文屬於圖神經網絡的系列文章,文章目錄如下:


恭喜你看到了本系列的第三篇!前面兩篇博客分別介紹了基於循環的圖神經網絡和基於卷積的圖神經網絡,那么在本篇中,我們則主要關注在得到了各個結點的表示后,如何生成整個圖的表示。其實之前我們也舉了一些例子,比如最朴素的方法,例如圖上所有結點的表示取個均值,即可得到圖的表示。那有沒有更好的方法呢,它們各自的優點和缺點又是什么呢,本篇主要對上面這兩個問題做一點探討。篇幅不多,理論也不艱深,請讀者放心地看。

圖讀出操作(ReadOut)

圖讀出操作,顧名思義,就是用來生成圖表示的。它的別名有圖粗化(翻譯捉急,Graph Coarsening)/圖池化(Graph Pooling)。對於這種操作而言,它的核心要義在於:操作本身要對結點順序不敏感

這是為什么呢?這就不得不提到圖本身的一些性質了。我們都知道,在歐氏空間中,如果一張圖片旋轉了,那么形成的新圖片就不再是原來那張圖片了;但在非歐式空間的圖上,如果一個圖旋轉一下,例如對它的結點重新編號,這樣形成的圖與原先的圖其實是一個。這就是典型的圖重構(Graph Isomorphism)問題。比如下面左右兩個圖,其實是等價的:

圖重構

為了使得同構圖的表示能夠保持一致,圖讀出的操作就需要對結點順序不敏感。在數學上,能表達這種操作的函數也被稱為對稱函數

那么我們一般如何實現圖讀出操作呢?筆者接下來主要介紹兩種方法:基於統計的方法基於學習的方法

基於統計的方法(Statistics Category)

基於統計的方法應該是最常見的,比如說我們在求各種抽象表示所使用的 平均(mean)求和(sum)取最大(max) 等操作。這些方法簡單有效,又不會帶來額外的模型參數。但同時我們必須承認,這些方法的信息損失太大。假設一個圖里有 1000個結點,每個結點的表示是 100維;整張圖本可表達 1000 * 100 的特征,這些簡單的統計函數卻直接將信息量直接壓縮到了100維。尤其是,在這個過程中,每一維上數據的分布特性被完全抹除。

考慮到這一點,文獻[1]的作者就提出要用類似直方圖的方法來對每維數據分布進行建模。具體而言,請讀者先通過下面的對比圖來直觀感受一下直方圖是如何巧妙平衡數據信息的壓縮增強的。假設我們有100個介於[-3,1]的數字,如果我們直接將它們求和,如左圖所示,我們完全看不出這100個數據的分布;而如果我們將[-3, 1]等分成4個區域,比如說就是[-3,-2),[-2,-1),[-1,0)[0,1)。我們分開統計各個區域的和,可以發現一點原數據的分布特征,就如下右側子圖所示:

直方圖

如果要實現上面這個直方圖的做法,該如何做呢?其實也很簡單,我們舉個例子。給定3個數據點,它們的特征向量(2維)分別是[-2, 1], [-1, 2][-1, 1]。如果直接求和,全局的特征向量是 [-2+-1+-1, 1+2+1][-4,4]。如果采取上述直方圖的方式,則可能會得到一個這樣的全局特征向量[-2, -1 + -1, 1 + 1, 2](第1,2維代表從原先的第1維統計的直方圖,對應的區域為[-2,1),[1,2),第3,4維的含義類似)。但在實踐中,文獻[1]沒有直接利用這種方法,而是采用高斯函數來實現名為模糊直方圖(Fuzzy Histogram)的操作。

模糊直方圖

模糊直方圖的原理也很簡單:預先定義幾個特征值區域的邊界點為各個高斯分布的均值,並預設好方差。對任一特征值,根據其與各個高斯分布交點的縱坐標作為其落入該區域的數值,然后將所有數值歸一化,就得到了該特征值分布在各個區間的比例。舉個例子,圖上的[1.8]與三個高斯分布的交點分別在0,0.3,0.9處,歸一化一下,即可知該特征值最終應該用一個3維向量[0.0, 0.25, 0.75]來表示。

基於學習的方法(Learning Category)

基於統計的方法的一個壞處大概是它沒辦法參數化,間接地難以表示結點到圖向量的這個“復雜”過程。基於學習的方法就是希望用神經網絡來擬合這個過程。

采樣加全連接(Sample And FC)

最簡單又最直接的做法,大概就是取固定數量的結點,通過一個全連接層(Fully Connected Layer)得到圖的表示。這里不論是隨機采樣也好,還是根據某些規則采樣,都需要得到確定數量的結點,如果不夠就做填充。公式也很簡單直接(\(\textbf{H}^𝐿\)指的是將采樣到的結點表示拼接在一起):

\[\textbf{h}_𝐺=FC(\textbf{H}^𝐿) \]

這種方法的一個問題在於很難適用於規模差距很大的圖。比如說訓練時見過的圖只有幾百個結點,但測試的圖可能有上千個結點,這種方法很難泛化。

全局結點(Global Node)

這一種做法的動機也很簡單,考慮到圖同構問題和基於統計的方法,從結點的表示生成最終的圖表示主要有兩個難點:

  1. 很多情況下我們很難找到一個合適的根結點(筆者覺得圖的根結點一般都是根據各個領域的領域知識來確定的,比如我們在第一篇博客中講到的化合物分類問題)
  2. 如果直接用基於統計的方法對各個結點一視同仁,無法區別對待(比如某些重要的結點信息更多,就應該表達得更多)。

那我直接引入一個全局結點代表這張圖的根結點,把它跟圖中的每個結點通過一種特殊的邊連接,最終拿這個結點的表示作為圖的表示,豈不妙哉。

可微池化(Differentiable Pooling)

上面兩種方法都比較簡單,不會層次化地去獲得圖的表示。所以在論文[2]中,作者提出了一種層次化的圖表示,而這則依賴於他們所提出的可微池化(Differentiable Pooling, DiffPool)技術。簡單來講,它不希望各個結點一次性得到圖的表示,而是希望通過一個逐漸壓縮信息的過程,來得到最終圖的表示,如下圖所示:

可微池化

相比於一般先通過GCN得到所有結點表示(H^l),再通過方法匯總得到圖的最終表示的方法,DiffPool則同時完成了兩個任務:結點聚類(Soft Clustering)結點表示(Node Representation)。這兩個任務是由兩個不共享參數的GCN模塊分別完成的,下文用 SC 和 NR 分別表示這兩個模塊。NR 模塊與傳統的GCN一樣,輸入是各結點的隱藏狀態,通過圖上的傳播,輸出是傳播后各個結點的表示。SC 模塊則不同,它的輸入雖然也是各結點的隱藏表示,但其輸出的是各結點屬於不同聚類簇的概率(注意這里每一層聚類簇的數目是預先定義的)。上圖中最左側每個結點右上方的表格即代表這個。舉個例子,假設本層子圖有6個結點,將各個結點輸出的簇分類概率堆疊在一起,即可得到矩陣\(\textbf{S}^l\),如下圖所示(藍色,橙色和綠色分別代表三個聚類簇。在實際中,聚類矩陣不是離散變量,而是連續變量。):

結點聚類

\(\textbf{A}^l\)表示第\(l\)層子圖結點的鄰接關系,\(\textbf{A}^0\)即是圖的鄰接矩陣,\(N_l\)表示第\(l\)層子圖結點的個數,\(\textbf{H}^l\)表示第\(l\)層子圖各個結點表示堆疊而成的隱狀態矩陣,DiffPool通過如下公式得到新子圖中各個結點的表示:

\[\textbf{S}^l=SC(\textbf{A}^l,\textbf{H}^l), 其中 \textbf{S}^l{\in}\mathbb{R}^{(N_l×N_{l+1})} \]

\[\tilde{\textbf{H}}^l = NR (\textbf{A}^l,\textbf{H}^l) \]

\[\textbf{H}^{l+1}=(\textbf{S}^l)^T\tilde{\textbf{H}}^l \]

除了各個結點的表示外,還有一個很重要的事情是生成新子圖\(\textbf{A}^{l+1}\)的鄰接關系:

\[\textbf{A}^{l+1}=(\textbf{S}^l)^T{\textbf{A}^l}\textbf{S}^l \]

其他方法

還有一些其他方法,就如前文所提到的 PATCHY-SAN,通過基於規則的方法對圖進行排序,將圖排成序列,然后使用類似於CNN做文本分類的方法,使用1-D Pooling都得到圖表示。

參考文獻

[1]. Molecular graph convolutions moving beyond fingerprints, https://arxiv.org/abs/1603.00856

[2]. Hierarchical Graph Representation Learning with Differentiable Pooling, https://arxiv.org/abs/1806.08804


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM