グラフニューラルネットワーク

機械学習 / DeepLearning

概要

グラフニューラルネットワーク(Graph Neural Network、以下 GNN)は、グラフの各頂点にベクトル(数の並び)を持たせ、「各頂点が、隣の頂点のベクトルを集めて自分のベクトルを計算し直す」操作(1回分を層と呼ぶ)を決まった回数くり返し、最後のベクトルから頂点・辺・グラフ全体についての予測を出す関数である。計算し直すときに掛ける数(重み。このページの GNN では層ごとに別の重みを使う)は、正解の分かっている例から勾配降下法で決める。このページは、GNN で何が予測できるか、1回の計算し直しがどんな式か、重みをどう学習するか、どんな限界があるかを、式と小さな実例で示す。

読者は、グラフの用語(頂点・辺・隣接・次数・距離・幅優先探索)は知っているが、ニューラルネットワークとその学習の数学は知らない人を想定する。ニューラルネットワークの部品も、このページの中で定義してから使う。

読む順路は次のとおり。

  1. GNN で何ができるか:入力と出力の形、使われている例、よくある誤解。
  2. 記号とニューラルネットワークの部品:以下で使う文字と、全結合層・活性化関数。
  3. GNN の層:隣の平均をとる層を定義し、数値例で計算する。層を重ねたときにどこまでの頂点の情報が届くかもここで示す。
  4. 出力と学習:最後のベクトルから予測を作る式、損失、勾配降下法、頂点が多いときの学習の工夫。
  5. 例:空手クラブの分裂:34 頂点のグラフで、2 頂点だけ正解を教えて残り 32 頂点を当てる学習を実際に動かした結果。
  6. 層の選択肢:3 で定義した層と同じく隣から集めて計算し直す、よく知られた4つの層(GCN・GraphSAGE・GAT・GIN)と、その比較。
  7. GNN の限界:区別できないグラフがあること(グラフの頂点を色で分ける手続きとの比較)と、連結なグラフで隣との平均をくり返すと全頂点の値がそろうこと(過平滑化)。
  8. 確かめ問題、確認できていない点、参考。

GNN で何ができるか

この章では、GNN に何を入れて何を出させるのかを、式を使わずに示す。式による定義は記号の章から始める。

予測する対象

GNN の入力は、1つのグラフと、各頂点に付いたベクトル(以下、頂点の特徴)である。頂点の特徴は、その頂点について分かっている数を並べたもので、例えば分子なら原子の種類を表す数、論文なら本文に出てくる単語の有無を並べたものである。出力は、何について予測するかによって次の3種類がある。

予測する対象入力のグラフの例出力の例
頂点ごと論文の引用関係(頂点が論文、辺が引用)各論文の分野
辺ごと利用者と商品(頂点が利用者と商品、辺が購入)まだ辺の無い組(利用者, 商品)が将来辺になるかどうか、つまり買いそうな商品
グラフ全体分子(頂点が原子、辺が結合)その分子の性質(溶けやすさ、毒性の有無など)

このページでは、辺には特徴が無い(辺があるかないかだけが分かる)場合を扱う。分子の結合の種類のように、辺に付いた特徴も使う層もある。どの場合も、GNN の中で行う計算は同じで、各頂点のベクトルを計算し直すことである。違いは最後に予測を取り出す場所だけで、その式は出力の作り方で示す。

実際に使われている例(原論文)

arXiv の題名・著者・概要で確かめた(2026-10-21。確認できていない点)。

  • 分子の性質の予測:Gilmer ほか「Neural Message Passing for Quantum Chemistry」(arXiv:1704.01212、ICML 2017)。既存のモデルを、隣との間で情報を受け渡す形(メッセージパッシング。このページのメッセージパッシング型を、辺の特徴も使えるように広げたもの)にまとめ、分子の性質の予測のベンチマーク(手法を比べるための共通のデータと評価方法)で当時最も良い結果を出した。
  • 推薦:Ying ほか「Graph Convolutional Neural Networks for Web-Scale Recommender Systems」(arXiv:1806.01973、KDD 2018)。Pinterest に導入し、ピンとボードを表す 30 億頂点・180 億辺のグラフで学習した。
  • 到着時刻の予測:Derrow-Pinion ほか「ETA Prediction with Graph Neural Networks in Google Maps」(arXiv:2108.11482、CIKM 2021)。Google Maps の到着予想時刻の計算に GNN を導入した。

よくある誤解

この節では、GNN について持たれやすい誤解を先に挙げる。中央の列の内容は、右の列の節で式や例で確かめる。

誤解実際確かめる節
辺の有無を表す の表(隣接行列)を1列の数の並びにして、数の並びを受け取るよくある機械学習の関数に入れればよいそれをすると、一般には、頂点の番号の付け方を変えただけで出力が変わる。GNN は、番号を付けかえても頂点ごとの出力が同じように並べ替わるだけの計算を使う番号の付けかえ
頂点ごとに別々の重み(学習で決める数)を学習する全頂点が同じ重みを使う。そのため重みの数は、頂点の特徴の次元が頂点の数によらない限り、頂点の数によらず、大きさの違う別のグラフにも同じ重みを使える。ただし空手クラブの例のように、頂点の特徴を頂点ごとの番号を表すベクトルにすると、1層目は実質的に頂点ごとに別の重みになる平均による層
層を増やすほど遠くまで見えるので良くなる遠くまで見えるようになる一方で、計算を隣との平均をとることだけにして何回もくり返すと、連結なグラフでは全頂点の値が1つの値に近づく(このページで証明する)。重みなどを含む場合にどうなるかは、このページでは示していない過平滑化
2つのグラフが同じ形(同型。頂点の番号を付けかえると辺の集合が一致すること)かどうかを必ず見分けられる見分けられない組がある。例えば全頂点の特徴が等しいとき、6 頂点の閉路のグラフと三角形 2 つからなるグラフに、このページで扱う GNN は同じ出力を出す区別できないグラフ

記号

この章では、このページ全体で使う記号を決める。章の途中で新しい記号を足すときは、その場で定義する。

グラフ

  • グラフを と書く。 は頂点の集合、 は辺の集合である。辺に向きは無いものとし、辺は2頂点の組 で表す。自分自身への辺と、同じ2頂点の間の2本以上の辺は無いものとする。
  • 頂点の数を とし、頂点に の番号を付ける。以下、頂点 と書いたら である。
  • 頂点 に隣接する頂点の集合を 、次数を とする。
  • 自分を含めた隣の集合を 、その大きさを とする。このページの層の多くは、頂点が自分のベクトルも一緒に集めるので、この記号を使う。
  • 頂点の数が同じ2つのグラフが同型であるとは、一方の頂点の番号を付けかえると、辺の集合が他方と一致することをいう。
  • 隣接行列 は の行列で、 なら 、そうでなければ 0 とする。単位行列を とし、(自分への辺を足した隣接行列)、 を対角成分が の対角行列とする。