SNSの友達関係、分子構造、知識グラフ。これらはグラフで表現されるが、通常のニューラルネットワークでは扱いにくい。グラフニューラルネットワーク(GNN)は、グラフ構造を直接入力として受け取り、ノードや辺、グラフ全体の表現を学習する。近傍の情報を集約するメッセージパッシングが、その核心にある。
GNN メッセージパッシング GCN GAT グラフ学習
なぜGNNが必要か
グラフデータの特徴:
| 特徴 | 問題点 |
|---|---|
| 可変サイズ | ノード数が固定でない → 固定長入力のNNに入らない |
| 順序なし | ノードに順番がない → 順列不変性が必要 |
| 非ユークリッド | グリッド構造でない → CNNが直接使えない |
メッセージパッシング
メッセージパッシング(Message Passing)
GNNの基本的な計算パターン:
1. 集約(Aggregate):近傍ノードの情報を集める
2. 更新(Update):自身の表現を更新する
h_v^(k) = UPDATE(h_v^(k-1), AGGREGATE({h_u^(k-1) : u ∈ N(v)}))
k回繰り返すと、k-hop近傍の情報が集約される。
代表的なGNNアーキテクチャ
GCN(Graph Convolutional Network)
GCN
H^(k) = σ(D̃^(-1/2) Ã D̃^(-1/2) H^(k-1) W^(k))
à = A + I(自己ループを追加した隣接行列)
D̃ = 次数行列
近傍の平均を取るシンプルな構造。
GAT(Graph Attention Network)
GAT
近傍ノードに異なる重み(attention)を付ける。
α_ij = softmax(LeakyReLU(a^T [Wh_i || Wh_j]))
重要な近傍に集中できる。
アーキテクチャ比較
| モデル | 集約方法 | 特徴 |
|---|---|---|
| GCN | 正規化平均 | シンプル、効率的 |
| GraphSAGE | サンプリング + 集約 | 大規模グラフ向け |
| GAT | Attention重み付き和 | 異質グラフに強い |
| GIN | 和 + MLP | 表現力が高い |
GNNのタスク
| タスク | 出力 | 例 |
|---|---|---|
| ノード分類 | 各ノードのラベル | 論文の分野分類 |
| リンク予測 | 辺の存在確率 | 友達推薦 |
| グラフ分類 | グラフ全体のラベル | 分子の毒性予測 |
実務での応用
WEB開発での応用
推薦システム:ユーザー-アイテム二部グラフでの協調フィルタリング。
不正検知:取引ネットワークでの異常パターン検出。
ナレッジグラフ補完:欠けている関係の推論。
AI/MLでの応用
創薬:分子グラフから物性・活性を予測。
タンパク質構造:AlphaFold2でも使われる構造予測。
シーン理解:物体間の関係をグラフでモデル化。
コード解析:AST(抽象構文木)からの脆弱性検出。
実装ライブラリ
| ライブラリ | ベース | 特徴 |
|---|---|---|
| PyTorch Geometric | PyTorch | 最も広く使われる、豊富なモデル |
| DGL | PyTorch/TensorFlow | 大規模グラフ、分散学習 |
| Spektral | TensorFlow/Keras | Keras風API |
深掘りリンク
- PyTorch Geometric ドキュメント
- 論文:Kipf & Welling (2017) "Semi-Supervised Classification with Graph Convolutional Networks"
- チュートリアル:Stanford CS224W(Graph ML)
- 次のステップ:Heterogeneous GNN、Temporal GNN