グラフニューラルネットワークへのやさしい入門
(distill.pub)- グラフニューラルネットワーク(GNN) は、ノード・エッジ・グローバルコンテキストと接続構造をあわせて扱うモデルで、ノードの順序が入れ替わっても同じグラフを同じ意味として処理すべきデータに適している
- 分子、ソーシャルネットワーク、引用ネットワークだけでなく、画像のピクセル格子やテキストのトークン列もグラフとして見なせるが、グラフはサイズや接続性がそれぞれ異なるため、一般的な配列入力のようには扱いにくい
- GNNの予測問題はグラフ全体、ノード、エッジのレベルに分かれ、同系統のモデルが入力構造を保ちながら異なるレベルのラベルを予測できる
- 中核演算は隣接ノード・エッジの情報を集めて更新する メッセージパッシング であり、複数レイヤーを積み重ねると、より遠い k-hop 近傍の情報まで表現に反映される
- 実際の性能は、レイヤーの深さ、埋め込み次元、集約関数、ノード・エッジ・グローバル表現間のメッセージの流れに左右され、パラメータや深さを増やせば常に最良の結果になるわけではない
グラフデータとGNNの基本概念
- グラフは、エンティティである ノード(node) と、ノード間の関係である エッジ(edge) で構成される
- ノード、エッジ、グラフ全体にはそれぞれ追加情報を保存できる
- ノードには原子の種類、ピクセルの RGB 値、文書埋め込みのような特徴を入れられる
- エッジには結合の種類や関係タイプのような情報を入れられる
- グラフ全体にはグローバルコンテキストを置ける
- エッジは向きのある directed edge または向きのない undirected edge として表現できる
- GNNはノード・エッジ・グローバルコンテキストを学習可能な形で変換しながら、ノードの順序が変わっても同じグラフ構造を同じ意味として扱わなければならない
グラフで表現できるデータ
- 画像は通常 244×244×3 のような配列で表現されるが、各ピクセルをノードと見なし、隣接ピクセルをエッジで結んだ 規則的なグラフ としても見られる
- 境界でないピクセルはちょうど 8 個の近傍を持つ
- 各ノードには RGB 値を表す 3 次元ベクトルが保存される
- テキストは文字・単語・トークンをノードとし、次のトークンへ向かうエッジを持つ 有向グラフ として見られる
- RNN のトークン列表現とつながる
- Transformer はトークン間の関係を学習する完全結合グラフとして見られる
- 画像とテキストは構造が非常に規則的なため、グラフ表現が冗長になることもある
- 画像の隣接行列は格子状の接続のため帯状の構造を持つ
- テキストの隣接行列は各単語が前後の単語とだけつながるため、対角線に近い構造になる
- 分子は原子をノード、共有結合をエッジとするグラフで表現しやすい
- 単結合、二重結合など、原子対と結合タイプによって距離が異なる
- ソーシャルネットワークは人・機関・組織をノード、関係をエッジとしてモデル化する
- 引用ネットワークは論文をノード、ある論文が別の論文を引用する関係を 有向エッジ で表す
- 各論文ノードには要旨の単語埋め込みのような情報を追加できる
- コンピュータビジョンの場面内オブジェクト、機械学習モデル、プログラムコード、数式も、変数やオブジェクトをノード、演算や関係をエッジとするグラフとして表現できる
グラフ予測問題の3つのレベル
- Graph-level task はグラフ全体に対する 1 つの属性を予測する
- 分子グラフがどんな匂いを持つか、疾患関連受容体に結合するかを予測する問題が例である
- 画像分類や文の感情分析のように、入力全体に 1 つのラベルを付ける
- Node-level task はグラフ内の各ノードの属性や役割を予測する
- Zach の karate club データセットは、政治的対立の後で 2 つのクラブのどちらに忠誠を示すかを個人ノードごとに分類する問題である
- 画像セグメンテーションで各ピクセルの役割をラベル付けする問題や、文中の各単語の品詞を予測する問題に似ている
- Edge-level task はエッジの属性や存在有無を予測する
- 画像のシーン理解でオブジェクトをノードとし、オブジェクト間に関係があるかを予測する問題が例である
- すべてのノード対を完全結合にしておき、予測値にもとづいてエッジを削除し、疎なグラフを作ることもできる
- グラフ生成やグラフ予測の説明も関連する研究領域に含まれる
グラフをニューラルネットワーク入力にするときの難しさ
- 一般的な機械学習モデルは長方形または格子状の配列入力に合わせて設計されているため、グラフの接続構造をそのまま入れるのは難しい
- グラフには最大で 4 種類の情報がある
- ノード
- エッジ
- グローバルコンテキスト
- 接続性
- ノード・エッジ・グローバルコンテキストは特徴行列にできるが、接続性 の表現はより厄介である
- 隣接行列はテンソル化しやすいが限界がある
- グラフのノード数は数百万規模になることがある
- ノードごとのエッジ数は大きく異なることがある
- 隣接行列は非常に疎になり、空間効率が低い
- 同じグラフ接続性を複数の隣接行列で表せるため、ニューラルネットワークが常に同じ結果を出す保証がない
- 隣接リストは疎グラフにより適している
- エッジ
e_kがノードn_iとn_jを結ぶという情報を(i, j)タプルとして保存する - 隣接行列の
O(n_nodes^2)の代わりに、エッジ数に比例するO(n_edges)表現が可能である
- エッジ
- 実際のテンソル表現では、ノード・エッジ・グローバル値はスカラーではなくベクトルである
- ノードテンソルは
[n_nodes]ではなく[n_nodes, node_dim]の形になる
- ノードテンソルは
GNNレイヤーとプーリング
- 最も単純な GNN はまだグラフ接続性を使わず、ノード・エッジ・グローバルコンテキストそれぞれに別個の MLP を適用して新しい埋め込みを学習する
- 各ノードベクトルは同じ方法で更新される
- 各エッジベクトルも更新される
- グローバルコンテキストベクトルも 1 つの埋め込みとして更新される
- GNN は入力グラフの接続性を変えない
- 出力グラフは同じ隣接リストと同じ数の特徴ベクトルを保つ
- 変わるのはノード・エッジ・グローバルコンテキストの埋め込みである
- 予測には プーリング(pooling) が使われる
- 集めたい対象の埋め込みを gather して行列として連結する
- 集めた埋め込みは通常 sum のような演算で aggregate する
- ノード予測でノード情報がすでにあるなら、各ノード埋め込みに線形分類器を適用できる
- ノード予測に必要な情報がエッジにしかないなら、エッジ情報をノードへプーリングして渡す必要がある
- エッジ予測に必要な情報がノードにしかないなら、ノード情報をエッジ側へ集めて予測に使う
- グラフ全体予測では、すべてのノードまたはエッジ情報を集めてグローバル表現に集約する
- CNN の Global Average Pooling に似た役割を果たす
- 分子の毒性有無や特定の匂いの有無の予測が例である
メッセージパッシングで接続構造を活用する
- 単純な GNN はレイヤー内部でグラフ接続性を使わず、予測直前のプーリングでのみ接続性を使う
- より強力な GNN はレイヤー内で メッセージパッシング(message passing) を行い、接続構造を埋め込み更新に反映する
- メッセージパッシングは 3 段階で動作する
- 各ノードが近傍ノード埋め込みまたはメッセージを gather する
- メッセージを sum のような集約関数で aggregate する
- 集めたメッセージを学習可能な更新関数に通す
- メッセージパッシングは標準的な畳み込みに似ている
- 画像ではピクセルが固定数の近傍ピクセル情報を集める
- グラフではノードが可変数の近傍ノード情報を集める
- 複数の GNN レイヤーを積み重ねると、より遠いノードの情報が反映される
- 3 層の後には、あるノードが 3 ステップ離れたノードの情報まで含められる
- メッセージパッシングはノード間だけでなく、エッジ間、ノードとエッジ間でも実行できる
エッジ表現とグローバル表現
- データセットが常にノード・エッジ・グローバルコンテキスト情報をすべて持つとは限らない
- エッジ情報しかなく、ノード予測が必要な場合は、エッジ情報をプーリングしてノードへ渡せる
- ノードとエッジの情報はサイズや形が異なることがあり、結合方法は設計上の選択になる
- エッジ空間からノード空間へ、またはその逆への線形写像を学習できる
- 2 つの表現を連結してから更新関数に入れることもできる
- どのグラフ属性をどの順番で更新するかも GNN 設計の一部である
- 先にノードを更新してからエッジを更新できる
- 先にエッジを更新してからノードを更新できる
- node-to-node、edge-to-edge、node-to-edge、edge-to-node 表現を組み合わせる weave 方式も可能である
- 離れたノード同士は、メッセージパッシングを何度行っても効率よく情報をやり取りしにくいことがある
- k 層では情報は最大 k-step までしか伝播しない
- グローバル表現
Uは master node またはコンテキストベクトルのように、すべてのノードとエッジに接続された役割を果たせる- 離れたノードやエッジ間の情報伝達の橋渡しになる
- グラフ全体についてより豊かな表現を作れる
- 新しいノード埋め込みは、近傍ノード、接続されたエッジ、グローバル情報などを連結して条件付けできる
- 線形写像の後に加算したり、feature-wise modulation を適用したりする方式も可能である
GNN Playground と分子の匂い予測の例
- GNN Playground は小さな分子グラフの graph-level 予測問題を扱う
- データは Leffingwell Odor Dataset で、分子と匂い知覚ラベルを含む
- 実験では、分子グラフが “pungent” な匂いを持つかどうかを単一の二値ラベルで分類する
- pungent は強く際立つ匂いを意味する
- allyl alcohol を含みうるニンニクやマスタード、peppermint-flavored candy に使われる piperitone が例である
- 分子は原子をノード、結合をエッジとして表現する
- ノードは Carbon、Nitrogen、Oxygen、Fluorine の原子種を one-hot encoding で持つ
- エッジは single、double、triple、aromatic の結合タイプを one-hot encoding で持つ
- モデルテンプレートは、逐次的な GNN レイヤーの後ろに sigmoid 活性化を持つ線形モデルをつなぐ構造である
- 設計上の選択肢は 4 つの軸で制御される
- GNN レイヤー数、すなわち 深さ
- 各属性の埋め込み次元
- pooling の集約関数: max、mean、sum
- ノード・エッジ・グローバル表現のうち、どの属性を更新しメッセージパッシングするか
- ブラウザで動作する Playground は tfjs 上で動く
- 高次元の graph embedding は PCA によって 2D に縮約し、決定境界周辺の表現を可視化する
実験で見られた GNN 設計の傾向
- 性能はデータ、グラフの構成方法、特徴化方法によって変わる
- パラメータ数が多いほど性能との相関はあったが、GNN は少ないパラメータでも高性能なモデルを見つけられた
- 約 3k パラメータでも高性能なモデルが見つかった
- 埋め込み次元が高いほど平均性能と下限性能が良くなる傾向があったが、最高性能モデルは小さな次元でも現れた
- レイヤー数が増えるほど平均性能は上がる傾向があったが、最高性能モデルは 3 層や 4 層ではなく 2 層で現れた
- 4 層では性能の下限が低くなった
- レイヤーが多いと情報はより遠くまで広がるが、ノード表現が繰り返しによって希釈される危険がある
- 集約関数では sum が平均性能でごくわずかに良く見えたが、max や mean でも同様に良いモデルを作れた
- ノード・エッジ・グローバル属性間のメッセージ伝達が多いほど、平均的なモデル性能が良くなる傾向があった
- この課題はグローバル表現中心であり、グローバル属性を明示的に学習することが性能向上につながる傾向があった
- ノード表現はエッジ表現より有用に見え、より多くの情報がノード属性に入っているためである
より複雑なグラフとバッチ学習
- メッセージパッシングのフレームワークは、より複雑なグラフ構造にも適用できる
- Multigraph では、同じノード対が複数種類のエッジを共有できる
- ソーシャルネットワークで acquaintance、friend、family のような関係タイプをエッジタイプにできる
- エッジタイプごとに異なるメッセージパッシング段階を置くこともできる
- nested graph では、1 つのノードが再びグラフを表すことがある
- 分子ネットワークで、ノードが分子、エッジがある分子を別の分子に変える反応を表すことができる
- 分子レベル GNN と反応ネットワークレベル GNN を交互に学習できる
- hypergraph では、エッジが 2 ノードではなく複数ノードに接続できる
- ノードコミュニティを識別し、コミュニティ全体に接続された hyper-edge を置ける
- グラフはノード数とエッジ数が一定でないため、一般的な固定サイズのミニバッチ学習が難しい
- グラフのバッチ学習の核心は、大きなグラフの重要な性質を保つ サブグラフ を作ることである
- citation network ではサブグラフサンプリングが自然なことがある
- 分子ではサブグラフが新しいより小さな分子を意味するため、強い操作になりうる
- 大きなグラフがメモリに収まらないとき、グラフサンプリングは特に重要である
- Cluster-GCN や GraphSaint のような構造と学習戦略が関連する
グラフに適した帰納バイアス
- モデルはデータの対称性や規則性を活用するよう設計されると、より良い予測性能、短い学習時間、少ないパラメータ、より良い汎化を示せる
- 画像モデルは、物体が画像のどこにあっても同じ物体であるという性質を活用するため、translation invariant な畳み込みを使う
- テキストではトークン順序が重要なので、RNN は逐次的に処理し、Transformer 系モデルは文の別の部分へ注意を向けられる
- グラフではエッジ・ノード・グローバル要素の関係が重要なため、関係的帰納バイアス が必要である
- 明示的な関係である隣接構造を保持しなければならない
- グラフの対称性である順列不変性を保持しなければならない
- ノードやエッジの順序に依存せず動作し、可変個数の入力を処理しなければならない
集約演算の選択
- 近傍ノードやエッジ情報を pooling することは、強力な GNN アーキテクチャの中核段階である
- 各ノードで近傍数が異なり、入力順序に依存してはならないため、微分可能で順列不変な集約関数が必要である
- 代表的な候補は sum、mean、max である
- いずれも可変個数の入力を受け取り、入力順序に依存しない出力を返す
- 特定の演算が常に最善とは限らない
- mean は近傍数が大きく異なる場合や、局所近傍特徴を正規化された観点で見たい場合に有用である
- max は局所近傍の中で目立つ単一の特徴を強調したい場合に有用である
- sum は局所特徴の分布を示しつつ、正規化されないため外れ値も強調しうる
- 実際には sum がよく使われる
- Principal Neighborhood Aggregation は複数の集約演算を連結し、接続次数に応じて変わる scaling function を追加する
- Tetrahedral Chirality のようなドメイン特化の集約演算も設計できる
GCN、行列積、グラフ走査
- k 層と 1-degree 近傍参照を持つ GCN または MPNN は、サイズ k のサブグラフ埋め込み上で動作するニューラルネットワークと見なせる
- あるノードの更新表現は、k-distance 内の近傍情報を限定的に反映する
- エッジ表現も同じように解釈できる
- 隣接行列
Aとノード特徴行列Xの積AXは、sum 集約を用いる単純なメッセージパッシングを実装するA_i,kが正ならnode_iとnode_kの間にエッジがあることを意味する- 行列積は、近傍ノードの特定特徴次元の値を集める演算と見なせる
- 疎な
Aでは 0 の項をすべて足し合わせる必要がないため、隣接リストのほうが効率的である - 隣接リストベースの実装は sum 以外の集約演算を使うのにも有利である
- 隣接行列の累乗
A^Kは長さ K の walk とつながるA^2_ijはnode_iからnode_jへ行く長さ 2 の walk の数を数える- この直感は
A^3からA^kまで続く
Attention、説明可能性、生成モデル
- Graph Attention Networks は近傍情報を単純に合計せず、重み付き和 として集める
- スコア関数
f(node_i, node_j)が中心ノードと近傍ノードの関連性を計算する - softmax で重みを正規化し、課題に重要な近傍へより大きな比重を与えられる
- ペア単位のスコア計算は順列不変性を保持する
- スコア関数
- Transformer は attention メカニズムを持つ GNN と見なせる
- 文字トークンのような要素を完全結合グラフのノードとしてモデル化する
- attention は各ノード対のエッジ埋め込みと重みを計算する
- GNN は疎な接続パターンを仮定し、Transformer はすべての接続をモデル化するという違いがある
- GNN の説明可能性は、モデルの信頼性、デバッグ、科学的発見にとって重要でありうる
- 分子では特定のサブグラフの有無が重要なことがある
- 引用ネットワークでは論文の接続度が重要なことがある
- GNNExplainer は課題に重要な関連サブグラフを抽出する形でアプローチする
- attribution 手法はグラフの一部に重要度ランキングを付ける
- グラフ生成モデルは、学習した分布から新しいグラフをサンプリングしたり、出発点が与えられたグラフを完成させたりする
- 特定の属性を持つ新しい分子グラフを創薬候補として設計する応用がある
- グラフ生成の核心的な難しさはグラフトポロジーをモデル化することにある
- トポロジーはサイズが大きく変動し、
N_nodes^2項を持ちうる - 隣接行列を画像のように autoencoder で直接モデル化できる
- 存在するエッジと存在しないエッジの一部だけを予測し、
N_nodes^2の負担を減らすこともできる - 別の方法として、ノードやエッジの追加・削除のような離散的行動を繰り返し、グラフを逐次的に作ることもできる
- トポロジーはサイズが大きく変動し、
まとめ
- グラフは画像やテキストとは異なる強みと制約を持つ構造化データ型である
- GNN はグラフのノード・エッジ・グローバルコンテキストを更新しながら、接続構造と順列不変性を扱う
- プーリング、メッセージパッシング、エッジ表現、グローバル表現、集約関数の選択は GNN 設計の中核要素である
- 実際の性能は、深さ、次元、パラメータ数だけでなく、どのグラフ属性同士がメッセージをやり取りするか、そしてグラフがどのように構成されるかにも大きく左右される
1件のコメント
Hacker News のコメント
物理シミュレーション(例:数値流体力学)に GNN を使う論文は多い。こうした応用では、問題領域を離散化する非構造メッシュがグラフ構造に非常によく合うため。
実際には、各メッシュ/グラフが特定の問題を1つ解くために一度だけ使われることが多く、特定のグラフ向けに GNN を学習することにはあまり意味がない。それでも大半の論文がそうしてきたのは、異なるメッシュ/グラフやシミュレーションのパラメータにうまく適応する GNN を作る方法が、まだ見つかっていないからだと思われる。こうした汎化を可能にするブレイクスルーが近いうちに出てくるのか気になる
最適な性能を出すには、おそらく別のトークナイザーが必要になりそう
仕事の品質は非常に高いのに、distill.pub が持続可能な道を見つけられなかったのは残念 [1]
GNN があまり話題にならない理由の1つは、データセット不足かもしれない [2]。これはセマンティック Web 分野にも影響した問題だった。
[1] https://distill.pub/2021/distill-hiatus/
[2] https://huggingface.co/datasets?task_categories=task_categor...
人気のある分野なら、短くて引き込まれる動画を作るインセンティブのある人が多く、かなり抽象的な数学のレベルでも品質が高いことが多い。視覚資料は抽象概念の感覚をつかむのに本当に役立つし、3Blue1Brown がすでにそれを証明している。GNN も10分に満たない良い動画をいくつか見るだけで、文献に入る足場ができる
GNN には個人的にはかなり失望した。研究で何度か適用してみたが、うまくいったことがない。
長い間 GNN は CNN の一般化のように紹介されてきたが、CNN は「隣接重み」により意味があるため、より強力だ。相対的な位置関係を学習するからだ。GNN は通常、ここで説明されているようにプーリングに依存する。CNN は画像を出力できるが、GNN でグラフを出力するのは簡単ではない。トポロジーは依然として事前に決める必要があり、場合によっては学習中にも決めなければならない。決定的なのは性能だ。GNN は CNN に比べて信じがたいほど遅い。
最近はこうした理由から、アテンションが GNN をかなり置き換えているように感じる。プーリングの代わりにアテンションを使う GNN も作れるが、大きな意味はあまりない。グラフはたいていマスク行列を作るためだけに走査され、残りは普通の Transformer を使う形になる。そもそも何らかの距離尺度がすでにあるなら、グラフの隣接性すら不要なことが多い。
どこかの誰かにとって GNN が非常に有用であることは確かだろうが、私の経験では、釘を探しているハンマーに近かった
ほとんどほかのすべての場合には、追加構造を活用してより効率的にできる。順序を定義できるなら逐次モデル、ユークリッド/リーマン構造なら CNN や多様体を考慮したモデル、グローバル状態が不要なら点群ネットワーク、明示的な階層があるならそのモダリティの U-Net 版、といった具合だ。
GNN が魅力的なのは、1)関係という概念そのものをエンコードし、2)完全に一般的な離散化微分方程式との相性が良いからだ。複雑系/力学系の人間としては興味深いが、特化できるならやはりもっと簡単な方法がある
述べた理由から、GNN が推薦のようにドメインモデル自体がグラフのように感じられる領域で主に人気なのは偶然ではないと思う。そうした領域では、有用なトポロジーへ到達する飛躍が小さい。
個人的にさらにもどかしかったのは、こうしたグラフ型ドメインの多くがログのような行動ベースの機械/人間データで、カテゴリ次元が非常に多い点だ。グラフ部分も役に立つが、カテゴリ次元をうまく捉えることも同じくらい重要で、それをうまくやろうとするとランダムフォレストのようなモデル外の方法に逃げることが多い。そういうものから始める方が簡単で、GNN 部分は「少し良い改善」のために作業量が大きく増える。
もちろんこれが中核事業で、数百万ドルがかかっているなら正当化できるかもしれない。それでも大半の運用チームには難しい。実際には pygraphistry のユーザーたちとは xgboost + umap のようなものをやって済ませることが多い。RGCN をうまく動かすだけでもかなり手間がかかる
GNN は固定されたトポロジーの上で動作するように見える。グラフのトポロジーの何らかの変換を近似したい場合はどうすればよいのだろうか。たとえばグラフレイアウトを学習したり、プログラムの抽象構文木をデータフローグラフに変換したりする場合だ
GNNの核心は、トポロジーを指定するグラフによって「近傍」という概念を明示的に条件付けし、任意のトポロジーへ汎化する点にある。グラフレイアウトはここで試みられており、https://github.com/limbo018/DREAMPlace が大きな注目を集めたが、最近は関連する論争もある https://www.semanticscholar.org/paper/The-False-Dawn%3A-Reev...
グラフ変換も研究されている https://arxiv.org/abs/2012.01470。ただし暗黙的にグラフマッチング問題を解く必要があるため、難しい問題だ
distillがまた戻ってきてくれるといい
distill.pubが新規投稿を受け付けていないのは本当に残念
あのインタラクティブ可視化ソフトウェアが何なのか気になる。D3.jsだろうか?
自分があまりに間抜けに感じる。そのページにはノード4個(a,b,c,d)の例があり、可能な組み合わせは合計24個だと示している
ノード数が与えられたとき、さらにエッジも考慮しなければならないときに、それを計算する一般化された公式が何なのか気になる。記事では説明していないようで、おそらく階乗かもしれないと思う
もっと慣れたいなら、このサイトがかなり良い概要を提供していると思う: https://www.geeksforgeeks.org/mathematics-combinatorics-basi...
各エッジは存在する場合と存在しない場合があるので、二項係数に2を掛けることもできるかもしれない