圖簡介
-
Graph
- 表示 Entity (nodes) 間的 relations (edges)
- 組成
- Vertex attributes (V)
- Edge attributes and directions (E)
- Global attributes (U)
- 下文簡稱 U, V, E
-
可以表示成圖的範例
- Images
- 相鄰 pixel 建無向邊
- Text
- 詞和下一個詞建單向邊
- Molecules
- 分子的連接處建無向邊
- Social networks
- 人和人之間建無向邊
- Images
定義問題
- 種類
- Graph-level
- Node-level
- Edge-level
- 個別講的是基於什麼東西做分類,比如對每個人(node)分類一個陣營,就算 Node-level
挑戰
- 儲存邊的關係
- 鄰接矩陣
- 在節點多的情況下佔用空間大,而且可能非常稀疏
- 同一張圖,換個點的順序後鄰接矩陣看起來就會不同
- 難以保證這些東西餵入神經網路後輸出相同
- 可以用兩個 list,一個儲存邊的向量,另一個是 Adjacency list,依序紀錄邊的關係
- 稀疏矩陣
- 難以用 GPU 運算
- 鄰接矩陣
Graph Neural Network
-
GNN 是對圖上所有屬性的 optimizable transformation,而且可以保持 graph symmetries (permutation invariances,把 node 排序後結果不變)
-
下文用的 GNN 是 message passing neural network
- graph-in, graph-out
- 不改變圖的 connectivity
最簡單的 GNN
- U, V, E 個別餵給不同的 MLP,組成一個 GNN 的 layer
- MLP 單獨餵入每一個點,不考慮連接訊息,保持了 graph symmetries
預測
- 假如要對每個頂點做預測,最後再加個全連接層分類
pooling
- 假如要對一個沒有向量的頂點做預測,我們可以用 pooling,蒐集相鄰邊和全局向量的資訊
- 對於沒有頂點資訊的圖,我們可以用 pooling layer 獲取全部點的資訊,再做分類
- 對於沒有邊資訊的圖,我們也可以用 pooling 去從相鄰點和全局向量獲得資訊
- 對於沒有全局向量的圖,我們可以用 pooling 去從全部的點或邊獲得資訊
缺陷
- 中間的 layer 沒有利用圖的訊息,都是各自進入各自的 MLP 做轉換
Passing messages
在做轉換前,先做一些 pooling
匯聚頂點資訊
- 不是單單把點向量進行轉換,而是和相鄰的點一起做 aggregation 後再做轉換
- 如果 aggregation 是加總,和卷積有一點像,只不過是權重一樣的版本
匯聚頂點和邊的資訊
- 可以先把頂點匯聚給邊,再把邊匯聚回頂點,反之亦然
- 順序不同會導致不同結果
- 兩種方法可以一起同步做,交替更新
全局資訊
- 每次 layer 只看鄰居,要傳遞到遠的點須要走很多層
- 導入 master node (context vector),他連接了所有的點和邊
相關主題
-
採樣
- 考量到計算梯度可能需要儲存過多的中間資訊,可以考慮採樣一些點,只在子圖上做計算
-
Batch
- 每個點鄰居各數不同,使做 batch 成為有挑戰性的問題。
-
Inductive Bias
- graph symmetries
-
Aggregation
- 目前沒有一個最佳選擇
-
Graph Convolutional Network
- node 是根據鄰居 node 去做某種 aggregate,事後再做更新
- 由於每次都看鄰居,假如有 k 層,可以把圖看做解 n 個子圖,每個子圖就是基於每個點去走 k 步所形成的
-
Graph Attention Network
- 用 attention 決定其它點的權重,而不像 GCN 一樣把鄰居加起來