GNN图神经网络
?論文鏈接:A Gentle Introduction to Graph Neural Networks (distill.pub)
零基礎多圖詳解圖神經網絡(GNN/GCN)【論文精讀】_嗶哩嗶哩_bilibili
?文章分為四塊:
什么樣的數據可以表示為一張圖
圖和別的數據有什么不一樣的地方 為什么要做圖神經網絡
構建GNN 看一下各個模塊長什么樣子
搭建了GNN的playground
圖神經網絡基于圖的對稱性的假設?
一、什么樣的數據可以表示為一張圖
圖就是表示實體(點nodes)的一些關系(邊edges)
U表示全局的信息
?點 用長度為6的向量來表示
邊用長度為8的向量來表示
全局信息用長為5的向量表示
?核心就是怎么樣把信息表示成向量,以及這向量是不是能夠通過數據來學到
圖可以分成兩類,一種是有方向的,一種是沒有方向的
怎么樣把數據表示成圖
把圖片表示成圖
0-0點表示第0列第0行,這樣就把圖上的每一個像素映射成圖上的每一個點
0-0的鄰居是1-0,1-1,0-1,對應最右邊0-0有三條邊
中間的 矩陣叫鄰接矩陣,他的每一行、每一列都是一個頂點,如果第i行和j列之間值為一的話有
藍色的點,表示i、j節點之間有邊,白色表示沒有邊,通常是一個很大的稀疏化的矩陣
在圖上面有什么樣的問題
三個問題:在圖層面、頂點層面、邊層面
圖層面:
哪個圖有兩個環?
頂點層面:
空手道比賽中有兩個指導老師,有一天這兩個老師因為政見不合決裂了,要求判斷學生是站在老師A這邊還是老師B這邊
邊層面:
預測邊上的屬性
?圖像場景理解是邊緣層次推理的一個實例。除了識別圖像中的對象,深度學習模型還可以用來預測它們之間的關系。我們可以將其稱為邊緣級別分類: 給定表示圖像中對象的節點,我們希望預測這些節點中的哪些節點共享邊緣,或者邊緣的值是什么。如果我們希望發現實體之間的聯系,我們可以認為圖是完全連通的,并根據它們的預測值修剪邊到達一個稀疏圖
?
?機器學習用在圖上面會遇到的挑戰
首先需要思考如何表示圖,讓圖和神經網絡兼容
圖上面有四種屬性,分別是頂點、邊、全局信息、和連接性。
頂點 邊 全局信息都是用像兩個表示
連接性就是頂點之間邊的鏈接,用鄰接矩陣表示,節點*節點用稀疏矩陣形式存儲,但稀疏矩陣高效運算是一個比較難的問題,運算效率很低
還有一個問題是鄰接矩陣可以對相同的連通性進行編碼,而且不能保證這些不同的矩陣在CNN中會產生相同的結果(也就是說他們不是置換不變的)
表示稀疏矩陣的一種節省內存的方法是將其作為鄰接表。
每個點、邊、全局信息的屬性用標量表示?
鄰接列表的長度=邊數,第i項表示連接的是第i條邊鏈接哪兩個點,在存儲上只存邊和屬性,且與順序無關,可以打亂邊和定點順序,只需要更新鄰接列表即可
GNN
A GNN is an optimizable transformation on all attributes of the graph (nodes, edges, global-context) that preserves graph symmetries (permutation invariances).?
圖的對稱信息,把頂點變換之后結果不變
GNN是圖輸入,圖輸出,更新屬性,不改變圖結構。
最簡單的GNN
對定點向量、邊向量、全局向量,分別構造一個MLP,這三個MLP就組成了一層GNN,輸入輸出都是圖,頂點、邊、全局向量分別經過對應MLP然后得到輸出,作為它的更新
對每個頂點做預測
最后一層輸出是圖,頂點由向量表示,然后加輸出為2的全連接層,然后softmax得到輸出?
?只有一個全連接層,所有的頂點會共享全連接層的參數
存在缺失值時怎么做預測
pooling匯聚
假設這個點沒有自己的向量,但想得到他的預測,我們就把這個點連接的邊、全局向量拿出來
?例如下圖中的頂點,把他的兩個邊向量、一個全局向量加起來,就得到代表這一個點的向量
注意,以上假設他們頂點、邊、全局向量的維度一樣,若不一樣需要做投影
?假設我們只有邊的向量,要得到頂點的向量,通過匯聚層把邊的向量匯聚到頂點上,最后到頂點共享的輸出層得到輸出
假設只有定點向量,沒有邊向量?
?
?假設只有頂點向量,沒有全局向量
?
?缺點:在這個最簡單的 GNN 公式中,我們根本沒有在 GNN 層中使用圖的連通性。每個節點、每個邊以及全局上下文都是獨立處理的。我們只在為預測匯集信息時使用連接。
?改進GNN以考慮圖的信息
信息傳遞:在更新節點時,他的鄰居節點向量加上自己的節點向量得到匯聚向量,匯聚向量進入MLP,得到頂點更新
下圖,頂點會通過距離為1的鄰居(1近鄰)把她的消息傳過來,即pv-v的匯聚過程,也就是最簡單的信息傳遞
這件事情可以不用再最后一步做
?
?先更新邊,然后更新節點
?
?節點后邊,或者交替更新(同時都做)
全局信息
?假設圖比較大,且連接不是很緊密的時候,消息從一個點傳遞到另一個點會經過很長的路程,解決方案就是加一個master node或者是context vector, 它是一個虛擬的點,他可以和所有的頂點和所有的邊相連
?在對邊更新的時候要匯聚頂點和全局信息,把和自己相關的向量都拿過來一起做預測
基于消息傳遞的圖神經網絡?
?實驗
作者做了一個比較小的分子圖的預測數據集,可以調節神經網絡的超參數,來看實際訓練的效果
邊框代表預測值,里面的顏色代表實際值22,只要邊框和內部的顏色一樣代表預測正確,否則錯誤
GNN對超參數很敏感,多少層,匯聚(aggregation)的操作(加起來、求平均、求最大),頂點、邊全局向量的大小,怎么做信息傳遞
?超參數對模型影響的解釋
?模型的大小和auc之間的關系
x軸是參數個數,y是測試的auc,可以看到模型參數變大時,整個auc的上限往上增加了
?每個屬性向量長度
中間橫線代表中值,中間的bar表示25%和75%的分位數,下面偶爾會有outlier,我們希望中值越大越好,bar不要特別長,bar長的話表示他很敏感
從作者的實驗模型來看,匯聚方式不太影響性能,層數越高你的中值就越高,但也需要調好剩下的參數,消息傳遞越多越好,但是值傳遞節點和全局信息效果也很好,似乎可以論證不傳遞邊也不是很重要
總結
- 上一篇: 【高通量测序】.dna文件批量读取CAG
- 下一篇: three.js顶点篇