Graph 8 - GNN Prediction
28 Jun 2021 Paragraph : 4641 words.前面著重在建構GNN會遇到的問題,這篇把重點放在GNN效果的相關議題。
整個GNN的建立過程如下
Input Graph -> Graph Neural Network -> Node Embeddings -> Prediction Head -> Prediction -> Loss function and Evaluation metric
Prediction Head
把Embedding結果跟Prediction串起來的部分,不同task會有不同的Prediction Head,例如GNN的output會是一個h_v(L),透過Prediction Head可以把它轉成機率,可以根據不同特徵定義Prediction Head
Node-Level task
用node embedding做prediction,Prediction Head = W(H),是一個矩陣,乘以Embedding h得到一個機率分佈。
Edge-Level task
用pair of node embedding做prediction,Prediction Head = Head_edge(h1,h2),input是兩個embedding,output是他們之間連接的機率。
- 方法一 : 可以把hu跟hv接起來,然後通過一個Linear function(EX MLP) -> Linear(Concate(h_u,h_v))
- 方法二 : Dot product -> (h_u)^T * hv ,也可以做到k-way prediction上,直接做k次 -> (h_u)^T * W^(k) * h_v
Graph-Level task
用整張Graph做prediction,拿到每個node的embedding,可以做
-
Global mean pooling
-
Global max pooling
-
Global sum pooling 以上方法在小圖還可以,大圖上就效果不好了,除此之外也有很多種狀況不適合 例如:
兩張圖的embedding分別是{-1,-2,0,2,1} {-10,-20,0,10,20},在Sum的情況下都會等於0,但本質上特徵差很多,所以有一種簡單的做法是hierarchically aggregate並且加上非線性函數 -
Hierarchical Pooling 每一組一組的subgraph先pooling,在對這些結果分成一群一群再二次pooling
Prediction
主要分成Supervised和Unsupervised
- Supervised : label from external sources (groud true來自圖以外)
- Unsupervised : Sinals come from graphs 例如 link prediction 把某個edge遮起來去訓練判斷有沒有連線,沒有靠額外的外部資訊,label來自圖本身,link prediction看起來跟一般認知的supervised任務也有點像,因為是有label學習的,所以也稱這種的是self-supervised
根據label又可以分成Node label, Edge label, Graph label
- Node label : Node的分類
- Edge label : 是否有連線
- Graph label : 兩圖是否isomorphic
Loss Function and Evaluation Metric
這部分與一般NN差不多
- Loss Function : Cross Entropy, MSE ….
- Evaluation metric : acc, recall, f1, roc, auc ….
Dataset Split
對於拿到的一張Graph應該如何把他切成train, val, test 三個部分,圖的切法不像傳統ML的切法這麼簡單,因為圖資料彼此都不是獨立的,關於切的次數也有分以下兩種 :
- Fixed split : 一次把三個部分切出來
- Random split : 每次隨機切,最後回報avg performance
解法一 : Transductive setting
- embedding用整張圖來train,label才分開用train,val,test(把部分label遮起來)
- 適用於node, edge label task
解法二 Inductive setting
- 直接切開,分開train,val,test,把他們之間的edge給刪掉
- 分別算各自的Embedding,然後用各自有的label算Loss
- 適用於node, edge, graph label task
Example : Link Prediction
Inductive的作法
典型的Self-supervised任務,因為要的label都直接在圖結構裡了,在這種任務中edge可以分成兩種 :
- Message edges : 用來傳遞msg的edge
- Supervision edges : 用來當作label算loss的edge,不會做msg的傳遞,embedding階段當作不存在(不會進入GNN視野)
dataset split可以分成兩階段 :
- 階段一 : 將所有的edge分成msg edge和supervision
- 階段二 : 把整張圖再分成train, val, test
- 所以三個subgraph裡面都各自會有自己的兩種edge
Transductive
大部分的人在做link prediction的默認做法,在train時一樣分成msg edge和supervision edge,然後僅對supervision edge做切割。以下實線為training msg edges,虛線為supervision edges
- 在train階段,會拿training msg edges訓練,training supervision edges測試。
- 在val階段,會拿training msg edges, training supervision edges訓練,validation edges測試。
- 在test階段,會拿training msg edges, training supervision edges, validation edges訓練,test edges測試。