【邁向圖神經網絡GNN】Part4: 實作圖神經網路訊息傳遞機制

閱讀時間約 9 分鐘

在上一篇文章中,我們理解到GNN中的訊息傳遞機制,那在這一篇會透過 pytorch 實作訊息傳遞機制,還沒看過上篇的可以點以下連結:

【邁向圖神經網絡GNN】Part1: 圖數據的基本元素與應用

【邁向圖神經網絡GNN】Part2: 使用PyTorch構建圖形結構的概念與實作

【邁向圖神經網絡GNN】Part3: 圖神經網絡的核心-訊息傳遞機制

raw-image

定義 message passing 的 class


定義一個 class 執行 message passing ,有兩個重要的元素:

  1. init : 在這裡, init 會定義 agg 使用的 function ,這裡選用 max
  2. forward : 當資料餵進去之後,會執行 propagate 函數,那這個函數會去呼叫 message 和 update
  • 定義 message function:如同上篇的範例, 0.5 * 自己 + 2 *鄰居
  • 定義 update function : 也是同上篇,1倍自己 + 0.5 倍 message
class self_designed_MessagePassingLayer(MessagePassing):
def __init__(self, aggr='max'):
super(self_designed_MessagePassingLayer, self).__init__(aggr)
self.aggr = aggr

def forward(self, x, edge_index):
return self.propagate(edge_index, x=x)

def message(self, x_i, x_j):
return 0.5 * x_i + 2 * x_j

def update(self, aggr_out, x):
return x + 0.5 * aggr_out

實作 message passing class

# define message passing layer
self_designed_mp_layer = self_designed_MessagePassingLayer(aggr='max')

輸入這個 class 的資料是:

  • graph.x: node 的 feature
  • graph.edge_index : 哪些節點相連

input 資料餵進去後,會去呼叫 forward ,再去執行 message 和 update

產出一次傳遞的結果:

After 1 mp layer, graph.x =
tensor([[12.5000, 8.0000],
[ 6.0000, 5.2500],
[12.2500, 7.7500],
[ 6.2500, 5.5000]])

以 node 0 為例,推導過程:

  • from node 1 = 0.5*(6,4) + 2*(0,1) = (3,4)
  • from node 2 = 0.5*(6,4) +2*(5,3) = (13,8)

以 max 取得 agg_out ,所以選擇 (13,8)

再做 node update

(6,4) + 0.5*(13,8) = (12.5, 8)

一回合的 message passing 傳遞一步距離的鄰居,十回合的 message passing 傳遞十步距離的鄰居

我們做十回合的 message passing

# Go through 10 message passing:
graph = Data(x=x, edge_index=edge_index, edge_attr=edge_attr, y=y)
for i in range(10):
graph.x = self_designed_mp_layer(graph.x, graph.edge_index)
print(f"After 10 mp layer, graph.x = \n{graph.x}")

輸出的結果

After 10 mp layer, graph.x =  
tensor([[1839130.8750, 1406359.0000],
[1839130.8750, 1406359.0000],
[2298917.0000, 1758024.6250],
[ 919569.5000, 703268.6875]])

在這裡會發現目前使用到的 message passing 機制,僅用到 node feature ,並未加上 edge 的 feature ,所以其實還有很多更進階的 message passing 的 define。

各種不同的 message passing 機制

https://pytorch-geometric.readthedocs.io/en/1.7.2/modules/nn.html

https://pytorch-geometric.readthedocs.io/en/1.7.2/modules/nn.html

在 torch 的官網上,還有很多不同的 GNN ,主要的差別在於 message passing 的機制,最經常拿來使用與比較的是 GCNcov 的算法,我們也來實作看看~

特殊的 message passing 機制,讓 nn 自定義 message 和 update function

上述的基本範例是採用自定義的 message passing 機制,那進階與改良版之一,則是讓 neural network 自己學最適的機制。

class NN_MessagePassingLayer(MessagePassing):
def __init__(self, input_dim, hidden_dim, output_dim, aggr='mean'):
super(NN_MessagePassingLayer, self).__init__()
self.aggr = aggr

self.messageNN = nn.Linear(input_dim * 2, hidden_dim)
self.updateNN = nn.Linear(input_dim + hidden_dim, output_dim)

def forward(self, x, edge_index):
return self.propagate(edge_index, x=x, messageNN=self.messageNN, updateNN=self.updateNN)

def message(self, x_i, x_j, messageNN):
return messageNN(torch.cat((x_i, x_j), dim=-1))

def update(self, aggr_out, x, updateNN):
return updateNN(torch.cat((x, aggr_out), dim=-1))

1. __init__ 方法

input 包含:

  • input_dim:節點特徵的維度。
  • hidden_dim:隱藏層的維度。
  • output_dim:輸出特徵的維度。
  • aggr:聚合函數,default 為 'mean',可以根據需要改為 'max', 'add' 等。

在這個方法中,先 init ,並設定 agg ,再 create 兩個神經網路層 — message NN + update NN

  • messageNN:一個線性轉換層,用於將連接的節點對的特徵(x_i 和 x_j)轉換成隱藏層表示。其輸入維度是兩個節點特徵維度的總和。
  • updateNN:另一個線性轉換層,用於更新節點特徵。輸入為原始節點特徵和聚合後的訊息特徵,輸出為新的節點特徵。

2. forward 方法

這是NN的前向傳播方法,負責調用 propagate 方法進行訊息的傳遞。它接收節點特徵 x 和邊索引 edge_indexpropagate 方法是 MessagePassing 中定義的,用於處理訊息的生成、聚合和更新。

3. message 方法

定義了如何生成訊息。它接收來自兩個相連節點的特徵(x_i 和 x_j),並使用 messageNN 將它們拼接後轉換成一個訊息。這個訊息隨後將被聚合到相應的節點上。

4. update 方法

最後,update 方法定義了如何根據聚合的訊息更新每個節點的特徵。它接收聚合後的訊息 aggr_out 和原始節點特徵 x,使用 updateNN 將它們拼接後進行轉換,生成最終的節點特徵。

小結

今天探討了圖神經網絡(GNN)中的message passing 機制,並通過PyTorch實現了具體的程式碼實作。我們先回顧了其核心概念,然後進一步實作如何在PyTorch中定義和實現一個自定義的message passing layer。通過對單次和多次傳遞過程的結果,可以看到節點特徵如何逐步傳遞與更新。

後半部主要說明不同的 message passing 機制,像是最經典的加入 nn 變體,對於 message passing 機制的改良有一點想像,那以上是本篇的內容,下一篇見~

32會員
37內容數
歡迎來到《桃花源記》專欄。這裡不僅是一個文字的集合,更是一個探索、夢想和自我發現的空間。在這個專欄中,我們將一同走進那些隱藏在日常生活中的"桃花源"——那些讓我們心動、讓我們反思、讓我們找到內心平靜的時刻和地方
留言0
查看全部
發表第一個留言支持創作者!
Karen的沙龍 的其他內容
本篇文章專注於消息傳遞(message passing)在圖神經網絡(GNN)中的應用,並以簡單的例子解釋了消息傳遞的過程和機制。
本文主要筆記使用pytorch建立graph的幾個概念與實作。在傳統的神經網路模型中,數據點之間往往是互相連接和影響的,使用GNN,我們不僅處理單獨的數據點或Xb,而是處理一個包含多個數據點和它們之間連結的特徵。GNN的優勢在於其能夠將這些連結關係納入模型中,將關係本身作為特徵進行學習。
GNN發展背景 傳統的深度學習模型如在計算機視覺(CV)和自然語言處理(NLP)領域中極為成功,主要是處理結構化數據如影像和文本。這些數據類型通常具有固定且規律的結構,例如影像是由有序的像素點組成。然而,在真實世界中,許多數據是非結構化的,如化合物結構(原子和分子)。這些數據雖然具有一定的規則性,
本文探討了監督式學習、分群和相似度這幾個推薦系統算法,分別討論了它們的優點、缺點以及適用場景。這些算法在推薦系統中扮演著重要角色,並透過特徵選擇與預處理、相似度度量和鄰居的選擇等關鍵因素進行深入分析。文章最後提出在選擇推薦系統算法時應該考慮的因素,以及未來的研究方向。
Kafka是一個先進的分佈式流處理平臺,具有高吞吐量、可擴展性、容錯性和低延遲特性,提供瞭解耦、非同步和削峰特點。本文介紹了Kafka的通訊模式、適合的應用場景和未來發展趨勢,旨在幫助使用者更好地理解和應用Kafka。
本文探討了在使用 pandas 處理資料時應注意的幾個關鍵點,以及如何減少因資料型態問題而產生的錯誤,確保資料的原始意義得以保留。主要包括Pandas 資料處理深入解析,尋找CSV之外的數據儲存方案,以及優化資料處理策略。
本篇文章專注於消息傳遞(message passing)在圖神經網絡(GNN)中的應用,並以簡單的例子解釋了消息傳遞的過程和機制。
本文主要筆記使用pytorch建立graph的幾個概念與實作。在傳統的神經網路模型中,數據點之間往往是互相連接和影響的,使用GNN,我們不僅處理單獨的數據點或Xb,而是處理一個包含多個數據點和它們之間連結的特徵。GNN的優勢在於其能夠將這些連結關係納入模型中,將關係本身作為特徵進行學習。
GNN發展背景 傳統的深度學習模型如在計算機視覺(CV)和自然語言處理(NLP)領域中極為成功,主要是處理結構化數據如影像和文本。這些數據類型通常具有固定且規律的結構,例如影像是由有序的像素點組成。然而,在真實世界中,許多數據是非結構化的,如化合物結構(原子和分子)。這些數據雖然具有一定的規則性,
本文探討了監督式學習、分群和相似度這幾個推薦系統算法,分別討論了它們的優點、缺點以及適用場景。這些算法在推薦系統中扮演著重要角色,並透過特徵選擇與預處理、相似度度量和鄰居的選擇等關鍵因素進行深入分析。文章最後提出在選擇推薦系統算法時應該考慮的因素,以及未來的研究方向。
Kafka是一個先進的分佈式流處理平臺,具有高吞吐量、可擴展性、容錯性和低延遲特性,提供瞭解耦、非同步和削峰特點。本文介紹了Kafka的通訊模式、適合的應用場景和未來發展趨勢,旨在幫助使用者更好地理解和應用Kafka。
本文探討了在使用 pandas 處理資料時應注意的幾個關鍵點,以及如何減少因資料型態問題而產生的錯誤,確保資料的原始意義得以保留。主要包括Pandas 資料處理深入解析,尋找CSV之外的數據儲存方案,以及優化資料處理策略。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
🐳本篇獲邀 《1111人力銀行》刊登! 石頭哥以一位經理人的視角,今天要分享的是:找一句話,可以鞭策你持續邁向成功的巔峰!
Thumbnail
深陷財務危機的英國第二大城市伯明罕,出現了不少出售市議會資產作為現金週轉的討論,包含博物館、美術館和圖書館,真的可以被賣掉嗎?來聽聽第一線館員怎麼說...
Thumbnail
GoSky AI於2018年3月創立,GoSky AI共同創辦人暨執行長張聿瑋談及進場的時機點很重要,他提到我們這一代恰逢數位世代,Al 人工智慧技術已日趨成熟,應該廣泛運用 Al 科技去幫助更多人圓夢。
Thumbnail
人人都有不同的拍照動機,大部分是為了紀錄、分享或創作。至於修圖的理由又是什麼呢?虛榮?仔細思考,找尋更深層的意義,而後正確追求,生活更加自在快活。
Thumbnail
簡報的靈魂是「重點」;打造重點靠「對比」! 但PPT 不是專業設計軟體, 想把一張照片的某區域, 拉高視覺能見度, 真的不容易辦到! 後來,我才明白,一個有趣的組合: 圖片或材質填滿+ 投影片背景填滿,幫我打開了簡報設計的另一番小天地。
Thumbnail
主動脈瘤是主動脈出現異常膨大,當膨大部位的直徑超過正常主動脈直徑的1.5倍以上,就稱為「主動脈瘤」。國立臺灣大學醫學院附設醫院心臟血管外科吳毅暉醫師指出,主動脈瘤就像氣球一樣,越大越容易破裂;而主動脈瘤一旦破裂了,會導致大量出血,是極度危險的急症。
Thumbnail
腦動脈瘤破裂會引發爆炸性頭痛、頸部僵硬,可能在短時間內昏迷、甚至奪命。若能提早發現、提早治療,有助於改善預後,降低失能的風險!
Thumbnail
寫作與讀書關係非常大。善於寫作的人首先善於讀書,熱愛讀書。而不善於寫作的人,基本上對書沒有多少興趣。 讀書的最佳年齡是兒童青少年時期,這個時期如果熱愛閱讀,就可以保持一輩子。青少年時期不愛讀書,以後能夠愛上讀書的可能性不大。 每個年齡段都有最適合的事情,錯過了就難以彌補。年輕時沒有把最優秀思想裝
Thumbnail
非常開心地受到邀約來到南山微風幫三星NOTE10來做現場似顏繪的活動 一早到現場就被排隊等候的粉絲們嚇到了這次的旗艦機
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
🐳本篇獲邀 《1111人力銀行》刊登! 石頭哥以一位經理人的視角,今天要分享的是:找一句話,可以鞭策你持續邁向成功的巔峰!
Thumbnail
深陷財務危機的英國第二大城市伯明罕,出現了不少出售市議會資產作為現金週轉的討論,包含博物館、美術館和圖書館,真的可以被賣掉嗎?來聽聽第一線館員怎麼說...
Thumbnail
GoSky AI於2018年3月創立,GoSky AI共同創辦人暨執行長張聿瑋談及進場的時機點很重要,他提到我們這一代恰逢數位世代,Al 人工智慧技術已日趨成熟,應該廣泛運用 Al 科技去幫助更多人圓夢。
Thumbnail
人人都有不同的拍照動機,大部分是為了紀錄、分享或創作。至於修圖的理由又是什麼呢?虛榮?仔細思考,找尋更深層的意義,而後正確追求,生活更加自在快活。
Thumbnail
簡報的靈魂是「重點」;打造重點靠「對比」! 但PPT 不是專業設計軟體, 想把一張照片的某區域, 拉高視覺能見度, 真的不容易辦到! 後來,我才明白,一個有趣的組合: 圖片或材質填滿+ 投影片背景填滿,幫我打開了簡報設計的另一番小天地。
Thumbnail
主動脈瘤是主動脈出現異常膨大,當膨大部位的直徑超過正常主動脈直徑的1.5倍以上,就稱為「主動脈瘤」。國立臺灣大學醫學院附設醫院心臟血管外科吳毅暉醫師指出,主動脈瘤就像氣球一樣,越大越容易破裂;而主動脈瘤一旦破裂了,會導致大量出血,是極度危險的急症。
Thumbnail
腦動脈瘤破裂會引發爆炸性頭痛、頸部僵硬,可能在短時間內昏迷、甚至奪命。若能提早發現、提早治療,有助於改善預後,降低失能的風險!
Thumbnail
寫作與讀書關係非常大。善於寫作的人首先善於讀書,熱愛讀書。而不善於寫作的人,基本上對書沒有多少興趣。 讀書的最佳年齡是兒童青少年時期,這個時期如果熱愛閱讀,就可以保持一輩子。青少年時期不愛讀書,以後能夠愛上讀書的可能性不大。 每個年齡段都有最適合的事情,錯過了就難以彌補。年輕時沒有把最優秀思想裝
Thumbnail
非常開心地受到邀約來到南山微風幫三星NOTE10來做現場似顏繪的活動 一早到現場就被排隊等候的粉絲們嚇到了這次的旗艦機