在傳統的深度學習中,卷積神經網絡(CNN)擅長處理網格結構數據(如圖像),循環神經網絡(RNN)擅長處理序列數據(如文本)。但當數據以圖的形式存在時(如社交網絡、分子結構、推薦系統),我們需要一種全新的架構——圖神經網絡(Graph Neural Network, GNN)。
文章目錄
- 一、GNN核心思想:圖上的信息傳遞
- 二、GNN三大核心流程
- 1. 聚合(Aggregate):收集鄰居信息
- 2. 更新(Update):融合自身信息
- 3. 循環(Loop):多層信息傳遞
- 三、 GNN的完整計算流程
- 四、GNN的應用場景
- 五、GNN的優勢與挑戰
- 六、總結
一、GNN核心思想:圖上的信息傳遞
GNN的核心思想是通過鄰居節點的信息聚合來學習節點表示。與傳統神經網絡不同,GNN考慮了圖結構中的拓撲關系,使每個節點的表示都包含其鄰居信息。
二、GNN三大核心流程
1. 聚合(Aggregate):收集鄰居信息
聚合操作是GNN的第一步,也是最重要的一步。每個節點從其鄰居節點收集信息,將這些信息聚合成一個單一向量。
數學表達:
hN(v)(k)=AGGREGATE(k)({hu(k?1),?u∈N(v)})h_{N(v)}^{(k)} = \text{AGGREGATE}^{(k)}\left(\{h_u^{(k-1)}, \forall u \in N(v)\}\right)hN(v)(k)?=AGGREGATE(k)({hu(k?1)?,?u∈N(v)})
其中:
- N(v)N(v)N(v) 表示節點 vvv 的鄰居集合
- hu(k?1)h_u^{(k-1)}hu(k?1)? 是鄰居節點 uuu 在上一層的表示
- AGGREGATE\text{AGGREGATE}AGGREGATE 可以是多種函數:均值、最大值、求和等
常用聚合函數:
聚合方式 | 公式 | 特點 |
---|---|---|
均值聚合 | hN(v)(k)=1N(v)∑u∈N(v)hu(k?1)h_{N(v)}^{(k)} = \frac{1}{ N(v) }\sum_{u\in N(v)}h_u^{(k-1)}hN(v)(k)?=N(v)1?∑u∈N(v)?hu(k?1)? | 平等對待所有鄰居 |
最大池化 | hN(v)=max?({hu,?u∈N(v)})h_{N(v)} = \max(\{h_u, \forall u\in N(v)\})hN(v)?=max({hu?,?u∈N(v)}) | 捕獲最顯著特征 |
求和聚合 | hN(v)=∑u∈N(v)huh_{N(v)} = \sum_{u\in N(v)}h_uhN(v)?=∑u∈N(v)?hu? | 保留鄰居信息總量 |
# 偽代碼示例:均值聚合
def aggregate(neighbors):total = sum(neighbor_features for neighbor in neighbors)return total / len(neighbors)
2. 更新(Update):融合自身信息
在聚合鄰居信息后,節點需要將鄰居信息與自身信息結合,更新自己的狀態表示。
數學表達:
hv(k)=UPDATE(k)(hv(k?1),hN(v)(k))h_v^{(k)} = \text{UPDATE}^{(k)}\left(h_v^{(k-1)}, h_{N(v)}^{(k)}\right)hv(k)?=UPDATE(k)(hv(k?1)?,hN(v)(k)?)
其中:
- hv(k?1)h_v^{(k-1)}hv(k?1)? 是節點 vvv 上一層的表示
- hN(v)(k)h_{N(v)}^{(k)}hN(v)(k)? 是當前聚合的鄰居信息
- UPDATE\text{UPDATE}UPDATE 通常是一個神經網絡(如MLP)或線性變換
更新函數示例:
hv(k)=σ(W(k)?CONCAT(hv(k?1),hN(v)(k)))h_v^{(k)} = \sigma\left(W^{(k)} \cdot \text{CONCAT}(h_v^{(k-1)}, h_{N(v)}^{(k)})\right)hv(k)?=σ(W(k)?CONCAT(hv(k?1)?,hN(v)(k)?))
其中:
- W(k)W^{(k)}W(k) 是可學習的權重矩陣
- σ\sigmaσ 是非線性激活函數(如ReLU)
- CONCAT\text{CONCAT}CONCAT 表示向量拼接操作
# 偽代碼示例:更新函數
def update(self_feature, aggregated_neighbors):combined = concatenate([self_feature, aggregated_neighbors])return relu(dense_layer(combined))
3. 循環(Loop):多層信息傳遞
單層GNN只能聚合直接鄰居的信息。通過堆疊多層GNN,信息可以在圖中傳播得更遠,捕獲更廣泛的圖結構信息。
數學表達:
H(k)=GNNLayer(k)(H(k?1),A)H^{(k)} = \text{GNNLayer}^{(k)}(H^{(k-1)}, A)H(k)=GNNLayer(k)(H(k?1),A)
其中:
- H(k)H^{(k)}H(k) 是第 kkk 層所有節點的表示矩陣
- AAA 是圖的鄰接矩陣
- 通常 H(0)H^{(0)}H(0) 是節點的初始特征矩陣 XXX
循環過程:
graph LRH0[初始特征 H???] --> L1[GNN層1]L1 --> H1[H?1?]H1 --> L2[GNN層2]L2 --> H2[H?2?]H2 --> L3[...]L3 --> HK[H??? 最終表示]
層數選擇:
- 2-3層通常足夠處理大多數任務
- 層數過多可能導致過度平滑(所有節點表示趨同)
- 層數過少則無法捕獲長距離依賴
三、 GNN的完整計算流程
讓我們通過一個具體例子理解三步流程:
一個完整的K層GNN可以表示為:
hN(v)(k)=∑u∈N(v)hu(k?1)∣N(v)∣(均值聚合)hv(k)=σ(W(k)?[hv(k?1)∥hN(v)(k)]+b(k))(更新)hvfinal=hv(K)(經過K層循環)\begin{aligned} h_{N(v)}^{(k)} &= \sum_{u \in N(v)} \frac{h_u^{(k-1)}}{|N(v)|} \quad \text{(均值聚合)} \\ h_v^{(k)} &= \sigma\left(W^{(k)} \cdot [h_v^{(k-1)} \| h_{N(v)}^{(k)}] + b^{(k)}\right) \quad \text{(更新)} \\ h_v^{\text{final}} &= h_v^{(K)} \quad \text{(經過K層循環)} \end{aligned} hN(v)(k)?hv(k)?hvfinal??=u∈N(v)∑?∣N(v)∣hu(k?1)??(均值聚合)=σ(W(k)?[hv(k?1)?∥hN(v)(k)?]+b(k))(更新)=hv(K)?(經過K層循環)?
四、GNN的應用場景
- 節點分類:預測節點類別(如用戶分類)
- 鏈接預測:預測缺失的邊(如推薦好友)
- 圖分類:對整個圖進行分類(如分子性質預測)
- 聚類:發現圖中的社區結構
- 生成任務:生成新的圖結構(如分子設計)
五、GNN的優勢與挑戰
優勢:
- 顯式利用圖結構信息
- 強大的關系推理能力
- 對不規則數據建模能力強
挑戰:
- 過度平滑問題
- 動態圖處理困難
- 大規模圖計算的效率問題
六、總結
GNN通過聚合-更新-循環的三步流程,巧妙地解決了圖結構數據的表示學習問題。這種架構讓神經網絡能夠理解復雜的關系網絡,在社交分析、生物化學、推薦系統等領域展現出強大潛力。隨著研究的深入,GNN正在不斷發展出更強大的變體,成為現代AI不可或缺的工具。