在上一篇文章中,我們探討了如何使用PyTorch來構建圖形對象,本篇專注於圖神經網絡(GNN)中的一個核心概念 — — 訊息傳遞(message passing)。我們先簡單回顧卷積神經網絡(CNN),它與 CNN 有些相似處,通過對CNN的理解,我們將更快地理解GNN所應用的關鍵技術概念。
還沒有看到上篇的可以點以下連結:
【邁向圖神經網絡GNN】Part1: 圖數據的基本元素與應用
【邁向圖神經網絡GNN】Part2: 使用PyTorch構建圖形結構的概念與實作
本篇文章引用: Graph Neural Network Tutorial 圖神經網路教學 (2022/01/28)
感謝周大的分享!!!那我們就開始吧!
在學習 GNN 重要概念 message passing 前,我們先複習一下 CNN 的 convolution
在卷積神經網絡(CNN)中,卷積操作主要是處理圖像數據。以一個圖片中的像素值“6”為例,卷積操作會考慮該像素及其周圍的八個鄰近像素(即3x3的鄰域)。這些像素的值會根據一個稱為卷積核的矩陣加權,然後將加權後的值相加,最終合成為單一的輸出值。
這個過程允許卷積層捕捉到局部特徵,如邊緣、角落或紋理等。通過這種方式,卷積層能夠學習從局部像素配置中抽象出有用的視覺特徵,這對於深度學習模型的圖像識別和分類非常關鍵。
那其實在 GNN 中重要的概念 message passing 可視為 CNN convolution 概念的一種形式,不同的地方在於原卷積的概念從歐幾里得數據(例如:圖像)擴展到非歐幾里得數據(如:graph),而透過局部區域聚合成訊息並產生新的特徵,和GNN 中把鄰居特徵傳遞聚合更新節點的行為。
Message passing 重要概念: create message 和 node update
在圖神經網絡(GNN)中的訊息傳遞機制可類比於卷積神經網絡(CNN)中的卷積操作。訊息傳遞的機制(message passing)主要有兩個步驟:
- 等待 create message 的 node,先關注 node 的鄰居們
- 有了 message 傳遞過來後,再做 node 的 update
以節點A為例,節點A的鄰居 — — 節點B、C、和D,與節點 A 相連的 3 個點,會將 message 傳遞給 A ,傳遞過去後, A 就會將傳遞的特徵通過一個權重匯總更新,這就是 node update 。
此外, graph 上的每個 node 都會進行 message passing ,通過一輪的 message passing 後就是一次完整的傳遞,這行為讓節點可以從鄰居獲得特徵並反映在自己身上,更新自己。
詳細說明 message passing 如何運作
一樣以 node A 為例,先訂一個傳遞與更新的權重:
- message = 0.5 * 自己 + 2 *鄰居
- update = 1倍* 自己 + 0.5* message
- create message :
- 等號左邊是一個 message , 表示為 node 1 傳給 node 0 的 message ,對應到圖上即為 node B 傳給 node A 的
- 等號右邊是剛剛定義的傳遞權重, 0.5 倍的 node A 加上 2 倍的 node B
- 以此類推至與 node A 相鄰的各個節點 C、D
- 這樣就會產生三個 message 分別來自 B 、C、D,再 node update 之前需對這三個 message 聚合(agg)
- 常見的 agg 方法: max 、add 、mean
- 聚合後就會是一個 message ,而這 message 準備來做 node update
2. node update :
- 等號左邊表達 node update ,表示 node 第一輪的對 node A update
- 等號右邊表達原本的 node A 加上剛剛 agg 的 message * 0.5
那這樣就完成了 message passing 的過程了~
補充討論 node update 之前 agg 的常見方法與效果
在不同的資料型態與場景可以選擇不同的 message agg 的方法,那以 message 傳遞的過程中資訊保留的程度應該是: add > mean > max
多數的場景下, 其對於模型成效表現應該也是 add > mean > max
小結
今天分享的 message passing 機制也是 GNN 中核心且重要的概念,它使得 GNN 能夠有效處理複雜的圖結構數據,透過這樣的機制,節點可以收集來自鄰居的訊息,並根據定義的規則更新自己的特徵,在這個過程中,確保模型預測前,可以考量的”關係”,也就是從鄰居來的特徵。同時也有一小部分提及到 agg 的常見方法,那下一篇將說明使用 torch 來實作 message passing 機制,下篇見!