Graph Embedding學習筆記(3):Graph Convolution Networks

筆記

clipboard.png

從Graph的視角看CNN,上圖左右兩個部分是等價的。左子圖每一個網格的通道,對應右子圖每一個節點的一個屬性,左子圖卷積核的參數至關於右子圖邊的權重。所謂3x3卷積就是右子圖9個節點屬性的加權平均(注意右子圖中中間節點本身指向本身的邊)。html

clipboard.png

CNN目前主流的應用場景都是規則的空間結構數據,好比圖像是2D grids,語音和文本是1D grids。node

在Graph上應用CNN,面臨了較大的挑戰:空間結構不規整,每一個節點的鄰接節點數量不一樣,如何將變長的空間結構轉化爲定長的空間結構git

目前,將變長轉化爲定長的思路主要有兩個:一個方法比較直接,也比較暴力,就是對節點之間的關係進行排序,強行按照預設好的參數取出排序最前面的幾個節點做爲鄰接節點,從而將Graph的不定長結構轉化爲定長結構,典型表明Patchy-SAN;另外一個方法稍微優雅一些,也屬於典型的不定長變定長的思路,本質是加權求和,典型表明是Kipf & Welling (ICLR 2017),目前GCN討論的都是該做者提供的思路。github

Patchy-SAN

clipboard.png

上圖講解了PATCHY-SAN方法的整體流程。第一步是node sequence selection,輸入數據是最底層的Graph,將Graph節點按照進行排序,取出前w個節點。第二步是Neighborhood Assembly,即對於選出來的每一個節點逐個構建鄰域,方法很簡單就是BFS,先搜索直接相鄰的一級鄰域,再搜索下一級鄰域,直到找到超過k個鄰居位置。第三步是Neighborhood Normalization,由於BFS搜索出來的鄰域有可能超過k個,也有可能不足k個,須要normalize爲k個,具體方法是以選出來的每一個節點爲root,從鄰域中找出前k個與root最接近的節點。網絡

clipboard.png

上圖講解了neighborhood normalization後怎麼轉化爲標準的CNN問題進行求解。對於每一個節點,normalized neighborhoods能夠理解爲CNN中receptive fields,節點和邊的屬性attributes能夠理解爲CNN中的channel。扁平狀的長方體表示節點attribute,正方體表示邊的attribute(能夠理解爲邊是經過鄰接矩陣k*k的方式表示)iphone

clipboard.png

對於選出的每一個節點,normalize後的數據維度是[wk, n],使用M個一維的receptive fields爲k,stride爲k的卷積核,對n個通道的節點屬性進行卷積,就能夠獲得上圖所示的效果,輸出數據維度是[w, M]。一樣的,對於每條邊,normalize後的數據維度是[wk^2, n],使用M'個一維的receptive fields爲k^2,stride爲k^2的的卷積核,對m個通道的邊屬性進行卷積,輸出數據維度是[w, M']。以後就可使用任意的神經網絡結構對Graph進行建模了。ide

clipboard.png

Neighborhood Normalization是這篇文章的關鍵,上圖是做者對這個步驟的講解,具體含義尚未搞明白。函數

GCN

問題定義:學習一個函數,輸入數據是節點的屬性和圖的鄰接矩陣,輸出是一個NXF的特徵矩陣,F是每一個節點的輸出特徵數。學習

For these models, the goal is then to learn a function of signals/features on a graph G=(V,E) which takes as input:spa

  • A feature description xi for every node i; summarized in a N×D feature matrix X (N: number of nodes, D: number of input features)
  • A representative description of the graph structure in matrix form; typically in the form of an adjacency matrix A (or some function thereof)

and produces a node-level output Z (an N×F feature matrix, where F is the number of output features per node). Graph-level outputs can be modeled by introducing some form of pooling operation

先看一個簡單的函數定義:

clipboard.png

先看括號內的式子,含義很簡單,就是當前節點的輸出等於鄰接節點的加權平均。sigma函數是作一次非線性變換,以加強模型的能力,文章用ReLU。

上面這個式子有兩個侷限性,一是A只考慮了鄰接節點,缺乏自身節點的信息,能夠用A+I來替換A,以保持與傳統卷積定義一致。二是加權平均沒有歸一化處理,能夠用節點的出入度來歸一化,咱們用度矩陣D表示。綜上,做者作了如下調整,獲得了圖卷積操做:

clipboard.png

clipboard.png

看一下做者搭建的GCN結構。第一層,輸出的每一個節點只包含了一級鄰接節點的信息;第二層,輸出的每一個節點包含了上一個隱層的一級鄰接節點的信息,至關於輸入層多級鄰接節點的信息。層級越高,信息越宏觀。

附錄

Graph Convolution Networks

SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS

Learning Convolutional Neural Networks for Graphs

Patchy-SAN講義

極驗公衆號-淺析圖卷積神經網絡

雷鋒網

相關文章
相關標籤/搜索