本日はGNNを学びます。機械学習分野は応用範囲が広すぎて大変ですね。
いろんな記事を漁ってみます。
いきなりすごいのに当たってしまいました。
グラフニューラルネットワーク(GNN)徹底解説!用途と仕組みからPyGでの実装まで
https://zenn.dev/dena/articles/83c2daff760f5d
ちょっと今回はグラフ問題自体の説明は割愛します。点と線からなるグラフ問題を扱います。
「グラフニューラルネットワークとは、グラフデータをニューラルネットワークで扱うものの総称です。近年非常に注目されている分野で、関連論文が増えています。」
ということです、
「多くのGNNでは、入力データとなるグラフをGNNの層に通し、出力として得られる 頂点/辺/グラフ の埋め込み表現をその後の学習や予測に用います。」
入力としてグラフを入れて、出力から埋め込み表現を使うようです。
モデルは、
「入力として与えられたグラフに対して、「GNN Layer」を複数適用し、得られた埋め込み表現(Embedding)を用いて学習時に損失(loss)を計算したり、推論時に予測したりします。」
いろいろな種類があるようですが、GNN Layer等のに通して、最終的に出力を得て、損失関数に入れるようです。
その後、spectral graph theoryに関連するGNNについての解説が入ります。
Spectral GNN
・ラプラシアン行列(量子コンピュータやってるとおなじみ。。。)
・グラフフーリエ変換(こちらも量子コンピュータやってるとお馴染み。。。)
・畳み込み(フーリエ変換をかけた後のスペクトル空間上で計算するみたいです。最後に逆フーリエ変換)
次に近傍の情報を使うSpatial GNN
これもいろんな種類があるようです。
「Convolutional
Attentional
Message-passing」
「サンプリングを使うモデル
Node sampling: 集約する頂点をサンプリング
Layer sampling: 各層で集約のための小さなノード集合を保持
Subgraph sampling: 複数のサブグラフをサンプリングして、そのなかで学習を行う」
複数のモデルや活用が全般的に解説されていました。GNNはモデルが多岐にわたっていてどれを使えばいいのかちょっとわからなくなりました。
最後はpython実装も紹介されていました。
二つ目の記事
グラフってこんなにすごい!深層学習との融合をレビュー
https://ai-scholar.tech/articles/gnn/GNN_review
どうやらこちらのレビュー論文をベースに解説をしているようです。
Graph Neural Networks: A Review of Methods and Applications
Jie Zhou, Ganqu Cui, Shengding Hu, Zhengyan Zhang, Cheng Yang, Zhiyuan Liu, Lifeng Wang, Changcheng Li, Maosong Sun
https://arxiv.org/abs/1812.08434
「グラフの構造はアプリケーションの中から見つけ出します。通常2つのシナリオがあり、構造的シナリオと非構造シナリオです。前者では、例えば分子構造、物理システムなどアプリケーションの持つ構造を明示的に表現します。後者では、例えば言葉、画像の場合、最初全結合でモデルを作成し、その後、最適化を行います。」
全結合からスタートするんですね。。。
損失関数
「・ノードレベルノードにフォーカスします。
ノード分類、ノード回帰、ノードクラスタリングなどを含みます。
・エッジレベルエッジタイプを分類するエッジ分類と、2つの与えられたノード間にエッジが存在するか予測するリンク予測です。
・グラフレベルグラフの分類、回帰、クラスタリングです。いずれも、グラフ表現を学習するモデルが必要です。」
とのこと。対象によって学習したいものが変わりますね。
どうやら、さっき紹介した記事とほとんど内容は同じようです。
ちょっとモデルは無数にあるようですね。まだこれといった方向性が確立はしていないように見えましたが、と期待問題ありきでモデルを探すのが良さそうです。この解説も相当長かったです。。。
次の記事
グラフニューラルネットワーク(GNN; Graph Neural Network)入門
https://www.hello-statisticians.com/ml/deeplearning/gnn1.html
グラフとTransformerは理解する上で関連があるようです。
https://www.hello-statisticians.com/ml/deeplearning/transformer1.html
こちらの記事もわかりやすかったです。
こちらの解説では、まずノードごとに特徴量を割り当てていました。
また、ノード分類やグラフ分類などの概念についても図式してわかりやすく書いてあります。
次です
グラフニューラルネットワークをざっくり紹介します
https://www.vext.co.jp/vextblog/210901/
こちらでは分類がさっぱりと行われていました。
「(1)Graph Recurrent Networks (再帰型ネットワーク)
初期に提案されたモデルで、情報の伝播は同じ関数を用いて再帰的に行います。 計算効率が高くないという問題があると言われます。
(2)Graph Convolutional Networks (畳み込み型ネットワーク、以下GCNと称する)
CNNの仕組みを参考して提案されたモデルで、並列計算が可能ですので、計算効率が改善されています。 そして、畳み込みの定義から、Spectral MethodとSpatial Methodの2種類に分けることができます。 前者は、グラフを信号処理と扱っています。後者は、グラフ自身の関係性に基づいて定義し、前者に比べてより直感的ですので、前者より人気だそうです。
(3)Graph Attention Networks (アテンションベースのネットワーク)
(2)のGCNモデルでは、ノードの関係性を同じ重要度と扱っていますが、Attentionを導入することにより、関係性に重要度のスコアを付けることができ、より柔軟な判定ができるようになるのです。」
トレンド把握はわかりやすいです。
いくつか解説記事を見ましたが、GNNは魔境でした。成果が出始めている実例もあるようなので、注意深く行いたいと思いました。。。