搜尋意圖: 如果你在找「GNN 是什麼」、「graph neural network 怎麼用」或「和 CNN 差在哪」,先抓住一件事:GNN 處理的是節點與關係,不是只看單筆資料。
TL;DR: 圖神經網路會把資料看成節點和邊,讓模型同時理解單一物件與物件之間的連結。社群關係、知識圖譜、推薦系統和分子結構都常用這種思路。
實用情境: 適合用在理解推薦系統為什麼要看使用者和商品關係、金融風控為什麼要看交易網路,以及 iPAS 題目裡「圖資料」和一般表格資料的差別。
下一步: 先把 GNN 和 CNN 分清楚,再看 Graph RAG,就能理解「圖」在模型訓練和檢索增強裡分別扮演什麼角色。
你有沒有想過,朋友關係、分子結構這種「點和線」資料要怎麼給 AI 看?
你可以把 GNN 想成專門讀關係網的模型。 它不只看每個點本身,還會把鄰居之間的連結一起學進去,所以很適合社群、推薦和分子分析。
你可以把它想成一個把抽象概念拉回日常判斷的提示,先知道它解決什麼問題,再看技術細節。
容易混淆
GNN vs CNN CNN 擅長格狀資料,例如圖片 GNN 擅長圖結構資料,例如社群或分子 最關鍵的區別是網格,還是任意關係網
GNN vs 一般嵌入表示 一般嵌入主要把物件向量化 GNN 會把鄰居關係也一起納入 最關鍵的區別是只看自己,還是連鄰居一起看
記住這句就好
點和線一起學。
實際案例
推薦系統 如果你想根據朋友關係或商品關聯推薦內容,GNN 可以把節點和邊的資訊一起用上。
藥物分子分析 化學分子本身就是圖,GNN 很適合拿來預測分子的性質或反應結果。
算法與應用
常見做法是訊息傳遞,也就是讓每個節點從鄰居聚合資訊。 圖一大就會很吃資源,所以抽樣、分層和分散式訓練都很重要。
GNN 是怎麼運算的
幾乎所有 GNN 都走同一套流程,叫做訊息傳遞(message passing),每一層做三件事。
第一步,收訊息。 每個節點去拿它所有鄰居目前的向量。
第二步,聚合。 把拿到的一堆鄰居向量壓成一個向量,常見做法是取平均、取總和或取最大值。取總和能分辨鄰居數量,取平均對節點度數比較穩定。
第三步,更新。 把聚合結果和節點自己原本的向量一起丟進一個小型神經網路,算出這個節點的新向量。
疊 K 層,等於讓每個節點看到 K 步以內的鄰居。所以層數不是越多越好,疊太深會讓所有節點的向量收斂到同一個值,這個現象叫過度平滑(over-smoothing),實務上多數任務疊 2 到 3 層就夠。
三種最常見的 GNN 架構
GCN(Graph Convolutional Network,圖卷積網路) 聚合方式是對鄰居取加權平均,權重由節點度數決定。最單純,也最常當基準線。缺點是它是 transductive 的,訓練時沒看過的節點不好處理。
GraphSAGE(Graph Sample and Aggregate) 不聚合全部鄰居,而是每次抽樣固定數量的鄰居再聚合。這讓它能處理超大的圖,而且是 inductive 的,新節點進來也算得出向量,工業界的大規模推薦系統常用這一路。
GAT(Graph Attention Network,圖注意力網路) 用注意力機制學每條邊的權重,讓模型自己決定哪個鄰居比較重要,而不是靠度數決定。表現通常較好,代價是計算量比 GCN 大。
選型的判斷很直接:圖不大先用 GCN 當基準,圖很大或會長新節點用 GraphSAGE,鄰居重要性明顯不均就用 GAT。
情境判斷
Q1: 你要找「朋友的朋友也常買什麼」,會想到什麼模型? → GNN 很合適,因為它能把關係鏈一起學進去。
Q2: 你只有單張商品圖和標籤,沒有關係資料,還適合直接上 GNN 嗎? → 通常不適合,因為 GNN 的優勢建立在關係結構上。
常見問題
GNN 一定比 CNN 強嗎?
不是,資料型態不同,適用場景也不同。
大圖一定能直接跑嗎?
不一定,常要先採樣或分塊。
GNN 只能做分類嗎?
不是,也能做連結預測和圖分類。