圖神經(jīng)網(wǎng)絡入門,圖神經(jīng)網(wǎng)絡的挑戰(zhàn)
目錄圖神經(jīng)網(wǎng)絡背后的動機GNN 算法GNN 在 Karate 網(wǎng)絡上的實現(xiàn)GNN 的應用GNN 的挑戰(zhàn)GNN 研究論文圖神經(jīng)網(wǎng)絡背后的動機由于圖形能夠以可以客觀分析的方式表示現(xiàn)實世界,因此如今它們受到了很多關注。圖可用于表示許多現(xiàn)實世界的數(shù)據(jù)集,如社交網(wǎng)絡、分子結構、地圖、網(wǎng)絡鏈接數(shù)據(jù)、自然科學、蛋白質(zhì)-蛋白質(zhì)相互作用網(wǎng)絡、知識圖等。此外,非結構化數(shù)據(jù),如圖像文本可以以圖形的形式建模。圖是對一組對象(節(jié)點)及其關系(邊)進行建模的數(shù)據(jù)結構。圖分析作為一種獨特的機器學習非歐數(shù)據(jù)結構,側重于節(jié)點分類、圖分類、鏈接預測、圖聚類和圖可視化等任務。圖神經(jīng)網(wǎng)絡 (GNN) 是基于深度學習的方法,可在圖域上運行。由于其在涉及非歐空間的現(xiàn)實世界問題中的良好表現(xiàn),GNN 已成為近來廣泛應用的圖分析方法。
圖神經(jīng)網(wǎng)絡算法一個節(jié)點可以用它的特征和圖中的相鄰節(jié)點來表示。GNN 的目標是學習一個狀態(tài)嵌入,它對每個節(jié)點的鄰域信息進行編碼。狀態(tài)嵌入用于產(chǎn)生輸出,例如預測節(jié)點標簽的分布。GNNs 是信息擴散機制和神經(jīng)網(wǎng)絡的結合,代表了一組轉(zhuǎn)換函數(shù)和一組輸出函數(shù)。信息擴散機制由節(jié)點表示,節(jié)點在其中更新其狀態(tài),并通過將“消息”傳遞給其相鄰節(jié)點來交換信息,直到它們達到穩(wěn)定的平衡。轉(zhuǎn)換函數(shù)以每個節(jié)點的特征、每個節(jié)點的邊緣特征、相鄰節(jié)點的狀態(tài)和相鄰節(jié)點的特征作為輸入,輸出是節(jié)點的新狀態(tài)。
圖 2
空手道俱樂部社交網(wǎng)絡上的圖神經(jīng)網(wǎng)絡實現(xiàn)
在本節(jié)中,讓我們看看如何將 GNN 應用于空手道網(wǎng)絡,這是一種簡單的圖網(wǎng)絡。
1. 空手道網(wǎng)絡資料背景:兩個 34×34 矩陣ZACHE 對稱,二進制ZACHC 對稱,有值。
這些數(shù)據(jù)是 Wayne Zachary 從大學空手道俱樂部成員那里收集的。ZACHE 矩陣表示俱樂部成員之間是否存在聯(lián)系;ZACHC 矩陣表示關聯(lián)的相對強度(發(fā)生互動的俱樂部內(nèi)外情況的數(shù)量)。
Zachary (1977) 利用這些數(shù)據(jù)和網(wǎng)絡沖突解決的信息流模型來解釋這個群體在成員之間發(fā)生糾紛后的分裂。
2.使用的數(shù)據(jù)
此數(shù)據(jù)可以轉(zhuǎn)換為 2 個 CSV 文件:
node.csv 存儲每個俱樂部成員及其屬性。34 名俱樂部成員用“Id”從 0 到 33 表示。他們所在的俱樂部 – Mr Hi(Node id 0) 或 Mr Officer(Node id 1) 用“Club”欄表示。
edge.csv 存儲兩個俱樂部成員之間的成對交互。權重被賦予由“權重”特征表示的節(jié)點 id 之間的這些交互。
Nodes.csv – Self Project
Edges.csv – Self Project
3. 使用 DGL 庫進行圖形表示:然后我們構建一個圖,其中每個節(jié)點都是俱樂部成員,每條邊代表他們的互動。在 DGL 中,節(jié)點是從零開始的連續(xù)整數(shù)。因此,在準備數(shù)據(jù)時,重要的是重新標記或重新洗牌行順序,以便第一行對應于第一個節(jié)點,依此類推。在本例中,我們已經(jīng)按照正確的順序準備了數(shù)據(jù),因此我們可以通過edges.csv 表中的“Src”和“Dst”列創(chuàng)建圖形。加載 DGL 圖的代碼:import dgl
src = edges_data['Src'].to_numpy()
dst = edges_data['Dst'].to_numpy()
# Create a DGL graph from a pair of numpy arrays
g = dgl.graph((src, dst))
出于可視化目的,我們可以將 DGL 圖轉(zhuǎn)換為網(wǎng)絡圖:import networkx as nx
# Since the actual graph is undirected, we convert it for visualization purpose.
nx_g = g.to_networkx().to_undirected()
# Kamada-Kawaii layout usually looks pretty for arbitrary graphs
pos = nx.kamada_kawai_layout(nx_g)
nx.draw(nx_g,pos, with_labels=True)
DGL 圖網(wǎng)絡
4. 空手道網(wǎng)絡上的 GNN 模型訓練:將俱樂部特征添加到 DGL 圖中:# The "Club" column represents which
community does each node belong to.
# The values are of string type, so we must convert it to either categorical
# integer values or one-h(huán)ot encoding.
club = nodes_data['Club'].to_list()
# Convert to categorical integer values with 0 for 'Mr. Hi', 1 for 'Officer'.
club = torch.tensor([c == 'Officer' for c in club]).long()
# We can also convert it to one-h(huán)ot encoding.
club_onehot = F.one_hot(club)
print(club_onehot)
# Use `g.ndata` like a normal dictionary
g.ndata.update({'club' : club, 'club_onehot' : club_onehot})
將邊緣特征更新為 DGL 圖:# Get edge features from the DataFrame and feed it to graph.
edge_weight = torch.tensor(edges_data['Weight'].to_numpy())
# Similarly, use `g.edata` for getting/setting edge features.
g.edata['weight'] = edge_weight
更新節(jié)點嵌入:node_embed = nn.Embedding(g.number_of_nodes(), 5) # Every node has an embedding of size 5.
inputs = node_embed.weight # Use the embedding weight as the node features.
nn.init.xavier_uniform_(inputs)
更新 2 個組長的標簽功能 - 0 和 33 ids 為:labels = g.ndata['club']
labeled_nodes = [0, 33]
使用 GraphSage 模型將 GNN 實現(xiàn)為:from dgl.nn import SAGEConv
# build a two-layer GraphSAGE model
class GraphSAGE(nn.Module):
def __init__(self, in_feats, h_feats, num_classes):
super(GraphSAGE, self).__init__()
self.conv1 = SAGEConv(in_feats, h_feats, 'mean')
self.conv2 = SAGEConv(h_feats, num_classes, 'mean')
def forward(self, g, in_feat):
h = self.conv1(g, in_feat)
h = F.relu(h)
h = self.conv2(g, h)
return h
# Create the model with given dimensions
# input layer dimension: 5, node embeddings
# hidden layer dimension: 16
# output layer dimension: 2, the two classes, 0 and 1
net = GraphSAGE(5, 16, 2)
設置損失和優(yōu)化器并將模型訓練為:# in this case, loss will in training loop
optimizer = torch.optim.Adam(itertools.chain(net.parameters(), node_embed.parameters()), lr=0.01)
all_logits = []
for e in range(100):
# forward
logits = net(g, inputs)
# compute loss
logp = F.log_softmax(logits, 1)
loss = F.nll_loss(logp[labeled_nodes], labels[labeled_nodes])
# backward
optimizer.zero_grad()
loss.backward()
optimizer.step()
all_logits.a(chǎn)ppend(logits.detach())
if e % 5 == 0:
print('In epoch {}, loss: {}'.format(e, loss))
輸出 :
獲得結果為:pred = torch.a(chǎn)rgmax(logits, axis=1)
print('Accuracy', (pred == labels).sum().item() / len(pred))
輸出 :
圖神經(jīng)網(wǎng)絡的應用GNN 能夠解決的問題 :節(jié)點分類:手頭的任務是通過利用其鄰居的標簽來確定節(jié)點的標簽。通常,這種類型的問題是以半監(jiān)督的方式訓練的,只有一部分圖被標記。圖分類:該過程是將整個圖分為不同的類別。
示例:在生物信息學中確定蛋白質(zhì)是否為酶,在 NLP或社交網(wǎng)絡分析中對文檔進行分類。圖形可視化:它處理圖形的可視化表示,揭示數(shù)據(jù)中可能存在的結構和異常,并幫助用戶理解圖形。正如本博客前面提到的,一些可視化圖形的方法是網(wǎng)絡和 dgl。鏈接預測:該算法用于理解圖中實體之間的關系,并嘗試預測兩個實體之間是否存在連接。它還可以用于推薦系統(tǒng)和預測犯罪組織。
它在社交網(wǎng)絡中用于推斷社交互動或向用戶推薦潛在朋友。圖聚類:這意味著以圖的形式對數(shù)據(jù)進行聚類。有兩種不同形式的聚類在圖數(shù)據(jù)頂點和圖聚類上執(zhí)行。頂點聚類是指 根據(jù)邊權重或邊距離將圖的節(jié)點聚類成一組密集連接的區(qū)域。圖聚類是將圖作為待聚類的對象,根據(jù)聚類特征的相似性對這些對象進行聚類。
圖神經(jīng)網(wǎng)絡的挑戰(zhàn)
1.動態(tài)特性——由于 GNN 是動態(tài)圖,處理具有動態(tài)結構的圖可能是一個挑戰(zhàn)。
2.可擴展性——在社交網(wǎng)絡或推薦系統(tǒng)中應用嵌入方法對于包括 GNN 在內(nèi)的所有圖嵌入算法來說在計算上可能很復雜。
3.非結構化數(shù)據(jù)——GNNs 也難以應用于非結構化場景。為 GNN 尋找最佳圖生成方法是一項具有挑戰(zhàn)性的任務。
圖神經(jīng)網(wǎng)絡研究論文列出了一些論文,以深入了解 GNN 及其在某些應用領域中正在進行的工作——A Comprehensive Survey on Graph Neural Networks. arxiv 2019. https://arxiv.org/pdf/1901.00596.pdfZonghan Wu, Shirui Pan, Fengwen Chen, Guodong Long, Chengqi Zhang, Philip S. Yu.Graph Neural Networks: A Review of Methods and Applications. AI Open 2020. https://doi.org/10.1016/j.a(chǎn)iopen.2021.01.001Jie Zhou, Ganqu Cui, Zhengyan Zhang, Cheng Yang, Zhiyuan Liu, Maosong Sun.Supervised Neural Networks for the Classification of Structures. IEEE TNN 1997. https://ieeexplore.ieee.org/abstract/document/572108Alessandro Sperduti and Antonina Starita.A new model for learning in graph domains. IJCNN 2005. https://www.researchgate.net/profile/Franco_Scarselli/publication/4202380_A_new_model_for_earning_in_raph_domains/links/0c9605188cd580504f000000.pdfMarco Gori, Gabriele Monfardini, Franco Scarselli.Deep Learning on Graphs: A Survey. arxiv 2018.Ziwei Zhang, Peng Cui, Wenwu Zhu.

最新活動更多
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達AI統(tǒng)治的開始
- 2 小米YU7新增835公里續(xù)航版,6-7月面市
- 3 昆侖萬維24年營收56億,AI出海商業(yè)化獲重要進展
- 4 “AI寒武紀”爆發(fā)至今,五類新物種登上歷史舞臺
- 5 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 6 大模型下半場:Agent時代為何更需要開源模型
- 7 中國“智造”背后的「關鍵力量」
- 8 優(yōu)必選:營收大增主靠小件,虧損繼續(xù)又逢關稅,能否乘機器人東風翻身?
- 9 全球無人駕駛技術排名:誰才是細分賽道的扛把子?
- 10 營收猛增46%,昆侖萬維成為AI“爆品工廠”