Graph Neural Networksを完全に理解したい

Dca4f8abd1e78940052ee52c85c4d2ed?s=47 shimacos
November 07, 2019

Graph Neural Networksを完全に理解したい

社内の輪講で発表した資料です。
Graph Neural NetworksについてSpectral MethodとSpatial Methodについて代表的な手法を簡単に紹介し、更にDeep Graph Library (DGL)を用いた具体的な実装方法を紹介しています。

Dca4f8abd1e78940052ee52c85c4d2ed?s=128

shimacos

November 07, 2019
Tweet

Transcript

  1. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Copyright (C)

    2018 DeNA Co.,Ltd. All Rights Reserved. 1 Graph Neural Networks を完全に理解したい (株) Mobility Technologies AIシステム部 データサイエンスG (DeNAから出向) 島越 直⼈ 2019/11/07
  2. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. (DeNA在籍時の成果をまとめたものなので、DeNAフォーマットの資料になります) 2

  3. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. ⾃⼰紹介 •

    名前 • 島越 直⼈ (シマコシ ナオト) • よくトリゴエと間違えられますがシマコシです。 • Twitter • @nt_4o54 • 経歴 • 奈良県出⾝ • KUの機械系⼤学院 卒 • 2019/04 ~ 2020/03 DeNA • 2020/04 ~ Mobility Technologiesに出向 • Kaggle • @shimacos (⾦ 1, ソロ銀 2) • Kaggle Master • ⾊々なドメインのデータに触れるのが好き
  4. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. ⽬的 n

    Graph Neural Networks (GNN)と⼀⾔に⾔っても⾊々な種類があってわかりにく い。体系的に理解したい。 ⁃ Graphの対象が広い (Knowledge Graph, 道路ネットワーク, 分⼦構造, etc …) ⁃ その結果として解きたいタスクも様々 ⁃ 少し調べると数式が多く出てきて実装が⾒えにくい n 今⽇は「完全に理解した」ところまで到達するのが⽬標 ⁃ なるべく抽象度をあげて理解することでそれぞれのアルゴリズムが得意なタスクを知る 4 https://note.mu/kaneshin/n/n11ec6c23fb11
  5. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 今⽇話すこと n

    GNNがどのように派⽣してきたか ⁃ RecGNN ⁃ Spectral-based GNN ⁃ Spacial-based GNN n どのように実装すればよいか ⁃ Deep Graph LibraryによるGraph Convolutional Networkの実装例 5
  6. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. GNNとは︖ n

    ⼀⾔でいうとGraphデータに対して応⽤したNeural Network n 画像との違いは︖ ⁃ 畳み込みたいノードの数が不変 ⁃ ノードの並び順に意味がない 6 Image Graph https://arxiv.org/abs/1901.00596
  7. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Graph Neural

    Networkの種類 7 だいたいこの順番で 発展してきた https://arxiv.org/abs/1901.00596 今回主に話すのはこの辺り
  8. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 数式 n

    基本的にhttps://arxiv.org/abs/1901.00596に基づいています。 8
  9. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Recurrent Graph

    Neural Networks 9 n 初期に提案されたGNN n 周囲ノードの情報の伝播を同じ関数を⽤いて再帰的に⾏う ⁃ ConvGNNは畳み込みごとに異なる重みを⽤いる ⁃ 計算コストが⾮常に⾼い n 再帰関数にGRUを⽤いたGated Graph Neural Network [Y. LI et al., 2015] など RecGNNとConvGNNの違い https://arxiv.org/abs/1901.00596
  10. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Spectral-based Convolutional

    Graph Neural Networks 10 n RecGNNは計算コストが⾼い ⁃ CNNのような並列計算可能な畳み込みを定義したい n グラフ信号処理的に畳み込みを定義 (詳細は@yiemon773さんの素晴らしい資料を参照) ⁃ グラフラプラシアン の固有値分解 を考える ⁃ グラフフーリエ変換を として定義 ⁃ を でfilteringする問題として置き換えることができる n 問題点 ⁃ 固有値分解の計算コストが⾼い ⁃ が に依存しているため、異なる構造のグラフ間でパラメータを共有できない をlearnableにする →意味のあるfilterを学習させる 固有⾏列
  11. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Spectral-based Convolutional

    Graph Neural Networks 11 n ChebNet [M. Differrard et al., 2016] ⁃ をチェビシェフ多項式 で近似することで固有値分解の計算を省略 n Graph Convolutional Network (GCN) [T. N. Kipf et al., 2017] ⁃ ChebNetにおいて と仮定をおく ⁃ この学習は経験的に不安定であることが知られており、⾃⼰ノードへのエッジを加えて 正規化するnormalization trickによってこの問題を回避 , ⾃⾝を含む周辺ノードを重み付けて ⾜し合わせることに対応。 直感的に理解しやすい形になった。 = Spatial-based ConvGNNの始まり
  12. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Spatial-based Convolutional

    Graph Neural Networks n グラフの空間的な関係に基づいて畳み込みを定義 ⁃ Spectal-basedよりも直感的で最近の研究はSpatial-basedのものが多数派 ⁃ この研究の先駆けはNeural Network for Graphs [A. Micheli et al., 2009] の周辺ノードの特徴量 を 重み で⾜し合わせる Residual connection and Skip connection
  13. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Spatial-based Convolutional

    Graph Neural Networks n グラフの空間的な関係に基づいて畳み込みを定義 ⁃ Spectal-basedよりも直感的で最近の研究はSpatial-basedのものが多数派 ⁃ この研究の先駆けはNeural Network for Graphs [A. Micheli et al., 2009] ⁃ GCNとの違いは隣接⾏列がnormalizeされていないため学習が不安定になる点 • Residual connectionやskip connectionも悪さしてそう 隣接⾏列によって近傍ノードの畳み込みを表現
  14. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Spatial-based Convolutional

    Graph Neural Networks n Diffusion Graph Convolutional Network [J. Atwood et al., 2016] ⁃ グラフ上の畳み込みを拡散過程として捉えて定義 ⁃ あるノードからノードへの情報の伝播は特定の遷移確率によって⾏われるという仮定をおい た ⁃ K回上記の畳み込みを⾏ったのちに⾜し合わせる ⁃ Center nodeから遠いノードの情報がほとんど伝達されないという問題が存在 • ノード間距離に応じて隣接⾏列を⽤意し、shortest pathsを追加した PGC-DGCNN [D. V. Tran et al., 2018] • 近傍ノードをQグループに分割し、グループごとにパラメータを持たせるPartition Graph Convolution[S. Yan et al., 2018]
  15. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Spatial-based Convolutional

    Graph Neural Networks n GraphSage [W. Hamilton et al., 2017] ⁃ ⼤規模グラフに対するグラフ畳み込み ⁃ 近傍ノードの数はノードによって⼤幅に異なることが多いため、⾮効率になりがち ⁃ 近傍ノードをエッジに沿って固定ステップだけRandom Sampling ( ) ⁃ Update function は順番に依存しない関数である必要がある ⁃ 更に多くの効率的なアルゴリズムが登場している • 各レイヤーで固定数のノードをRandom SamplingするFast-GCN[J. Cheng et al., 2018] • グラフクラスタリングアルゴリズムを⽤いてsubgraphを作成し、その中でのみ畳み込みを⾏う Cluster-GCN [W. L. Chiang et al., 2019]
  16. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Spatial-based Convolutional

    Graph Neural Networks n Graph Attention Network [P. Velickovic et al., 2017] ⁃ 近傍ノードがどの程度central nodeの更新に寄与するかを学習させる ⁃ Multi-head Attentionを⽤いることでnode classificationにおいてGraphSageを⼤きく上回る ⁃ 発展系 • Self-Attentionを⽤いたGated Attention Network [J. Zhang et al., 2018] • LSTM-likeなgating mechanismを⽤いた GeniePath [Z.Liu et al., 2018] https://arxiv.org/pdf/1802.00910.pdf
  17. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Spatial-based Convolutional

    Graph Neural Networks n Relational Graph Convolutional Network [S. Michael et al., 2017] ⁃ エッジの向きに意味のある有向グラフの特徴を利⽤するネットワーク ⁃ エッジの種類ごとに異なる重み を⽤いる https://arxiv.org/pdf/1703.06103.pdf
  18. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. まとめ n

    Spectral-ConvGNNよりSpacial-ConvGNNが現在は主流 ⁃ Spectral-basedはグラフ全体を同時に扱うため、scalabilityが低い。 • Spacial-basedはノードに着⽬するため、⼯夫することで⼤規模グラフも扱うことができる ⁃ Spectral-basedはグラフが固定されてることが前提 • Spacial-basedは異なる場所のノードでも容易に重みを共有することができる ⁃ Spectral-basedは有向グラフを扱えない n ConvGNNの⽅向性としては以下のようなものが多い印象 ⁃ 離れているノードの情報をどのようにして⽤いるか ⁃ ⼤規模グラフに対してどのようにして情報を落とさず効率的に畳み込みを計算するか ⁃ EdgeのAttentionをどのようにして計算するか (Edgeの有無が定かではないグラフにどう適応 するか) 18
  19. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 19 なんとなく概念的には分かってきたような気がするけど

    どうやって実装するの︖︖
  20. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 20 なんとなく概念的には分かってきたような気がするけど

    どうやって実装するの︖︖ Deep Graph Library (DGL)が便利︕︕︕
  21. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Deep Graph

    Library の使い⽅ n G = dgl.DGLGraph(graph_data) でグラフを作成 ⁃ An edge list (e.g. [(0, 1), (1, 2), ...]) ⁃ networkx graph object. ⁃ scipy sparse matrix n G.ndata[‘feat’] = torch.randn((num_node, num_feature)) : 各nodeに特徴量を持たせる ⁃ G.ndata 内にdict型で保存 n G.edata[‘feat’] = torch.ones(( num_edge, )) : 各edgeに特徴量を持たせる n G.nodes[node_idx], G.edges[src, dst] : 特徴量辞書にアクセス n G.in_degrees[node_idx] : node_idx の node と繋がるnodeの数を取得 21
  22. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Deep Graph

    Library の使い⽅ n G.update_all(message_func, reduce_func, [apply_node_func]) ⁃ message_func : srcの特徴がdstにedgeを通ってどのように伝播されるかを定義 ⁃ reduce_func : message_funcによって伝播された特徴をどのようにaggregateするかを定義 22 https://docs.dgl.ai/tutorials/basics/3_pagerank.html message_func を通して edge.dst.mailbox に ⼀時的に値が格納される srcのnodeに apply_node_funcを適⽤ srcのnodeとdstのnodeから dstのnodeを resuce_funcで更新
  23. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Message Passing

    Neural Network (MPNN) [Glimer et al., 2017] 23 n GNNを3つの関数でフレームワーク化 ⁃ Message Function • エッジの特徴と周辺ノードから特徴量を伝達する役割 ⁃ Update Function • Message Functionで伝播された特徴と⾃ノードの特徴から⾃ノードをUpdateする役割 ⁃ Readout Function • 最終的な出⼒を作成する関数 (Graphの特徴を得るときに⽤いられることが多い) n これに則ればDGLのupdate_allで任意のGNNを表現できる (はず) update_allの message_funcに対応 update_allの reduce_funcに対応
  24. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Graph Convolutional

    Network の DGL 実装 24 with n GCNの定義
  25. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Graph Convolutional

    Network の DGL 実装 25 with 事前にグラフに⾃⼰回帰の edgeを組み込むことで解決 g.add_edges(g.nodes(), g.nodes()) n GCNの定義
  26. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Graph Convolutional

    Network の DGL 実装 26 with 各nodeにおける次数の normを計算して g.ndataに格納する n GCNの定義
  27. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Graph Convolutional

    Network の DGL 実装 27 with mailboxに格納されている src nodeの ’m’ をsumして dst nodeの ‘h’ に格納する n GCNの定義 update_allで 全てのnodeの値を更新
  28. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 既に多くのGNNが組み込まれているため⾮常に便利 28

    めちゃくちゃ簡単に書ける︕︕ n GraphConv (GCN) n RelGraphConv (Relational GCN) n GATConv (GAT) n SAGEConv (Graph SAGE) n GINConv (GIN) n ChebConv (ChebNet) など
  29. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 参考 29

    n A Comprehensive Survey on Graph Neural Networks n @shionhondaさんのGNNまとめシリーズ n Learning Graph Neural Networks with Deep Graph Library (KDD'19 hands-on tutorial ) n はじめてのGraph Convolutional Network