GNN の概要: グラフ ニューラル ネットワークへの優しい入門

元のリンク

グラフ ニューラル ネットワークの優しい入門 (distill.pub) icon-default.png?t=N6B9https://distill.pub/2021/gnn-intro/

はじめに: この記事は、「A Gentle Introduction to Graph Neural Networks」の読書メモです。GNN に初めて連絡するため、多くの難解な概念が理解できず、完全に読んでいません。後で追加されます。

グラフとは何ですか? グラフは実際には 3 つの要素で構成され、頂点はノード、エッジ、属性はグラフの特徴です

グラフ問題は何に使用されますか? これは 3 つのカテゴリに分類でき、1 つはトポロジ内のリングを持つグラフを見つけるなどのグラフ レベルに基づくもの、もう 1 つはエッジの関係に従って頂点をクラスタリングするもの、3 つ目は特徴を見つけるものです。頂点の特性に応じてエッジを調整します。

グラフ間で情報を転送および集約するにはどうすればよいですか? GNN における新しい情報伝達は、情報プーリング、つまりノード間で情報が伝達され、その情報が集約されることです。情報の集約には、平均、最大、または合計を使用できます

GNN を設計するためのルール? GNN を設計する場合、GNN のパフォーマンスは層の数が深ければ深いほど良いというわけではありません。層が増えると、最悪のソリューションのパフォーマンスと平均的なソリューションのパフォーマンスは向上しますが、最高のソリューションのパフォーマンスを向上させることはできません。より良いパフォーマンスを達成するには、1 つはより良い伝播メカニズムを設計すること、もう 1 つはグラフの属性を増やすことです。

GNN をトレーニングするときにサンプリングしますか? GNN の各ノードの隣接エッジと接続エッジは異なるため、トレーニングに固定サイズを取ることができる従来のニューラル ネットワークとは異なり、ランダム サンプリングやランダム ウォークなど、トレーニング用のサンプリングにはさまざまな方法があります。

GNNの拡張モード? GNN は、より複雑なグラフ構造に合わせて調整されています。たとえば、異なるプロパティの複数のエッジを共有するノードのペアなど、マルチエッジ グラフまたはマルチグラフを考慮できます。

理解されていない質問、グラフ間の情報伝達メカニズムは何ですか? そしてそれはどのように配達されますか?

グラフはどのようにトレーニングされますか? サンプリングにはどのような技術が使用されますか? より深い理解が必要です

1. グラフ化できるデータの種類

グラフは実際には頂点エッジとその属性で構成されるグラフです。

 2. どのような問題をグラフ構造問題に変換できますか?

次の 3 つのカテゴリがあります。

グラフレベルのタスクでは、グラフ全体の単一のプロパティを予測します。ノードレベルのタスクの場合、グラフ内の各ノードのプロパティを予測します。エッジレベルのタスクでは、グラフ内のエッジのプロパティまたは存在を予測する必要があります。

グラフレベルのタスク

たとえば、トポロジカル グラフのスタックから 2 つのリングを持つグラフを見つけます。

 ノードレベルのタスク

 クラスタリングノードと同様

 エッジレベルのタスク

ノード間の関係を見つける

隣接行列を使用してグラフを表現すると、特に隣接行列が疎行列の場合に大量のメモリを消費します。よりメモリ効率の高いグラフを表現するにはどうすればよいでしょうか?

 情報プールによる GNN 予測

GNN を構築した後、タスクを完了したり、予測を行ったりするにはどうすればよいですか? ?

プーリングは 2 つの手順で行われます。

1. プールする項目ごとに、それぞれの埋め込みを収集し、行列に連結します。

2. 収集された埋め込みデータは、通常は合計演算によって集計されます。

エッジ情報に基づいてノードを予測する

 ノード情報に基づいてエッジを予測

 ノードとエッジの情報に基づいてグローバル情報を予測する

 グラフの部分間でメッセージを渡す

GNN 層でプーリング技術を使用することで、より複雑な予測を行うことができます。これにより、学習された埋め込みがグラフの接続性を認識できるようになります。これは、隣接するノードまたはエッジが情報を交換し、互いの更新されたエンベディングに影響を与える情報の受け渡しを通じて実現できます。

メッセージパッシングは 3 つのステップに分かれています。

1. グラフ内の各ノードについて、すべての隣接ノードの埋め込み (または情報)、つまり上記の g 関数を収集します。

2. sum などの集計関数を使用してすべての情報を要約します。

3. プールされたすべての情報は、更新機能 (通常は学習されたニューラル ネットワーク) を介して渡されます。

基本的に、メッセージ パッシングと畳み込みはどちらも、要素の近傍に関する情報を要約および処理して要素の値を更新する操作です。グラフでは要素はノードですが、画像では要素はピクセルです。ただし、各ピクセルに固定数の隣接要素がある画像とは異なり、グラフ内の隣接ノードの数は可変です。

メッセージパッシング GNN レイヤーを積み重ねることにより、ノードは最終的にグラフ全体からの情報を統合できます。3 つのレイヤーを通過した後、ノードはそこから 3 ステップ離れたノードに関する情報を取得できます。

一般的なモデリング テンプレートでは、分類のためにシグモイド アクティベーションを伴う線形モデルが後に続くシーケンシャル GNN レイヤーを使用します。GNN の設計空間には、モデルをカスタマイズするために使用できる多くのレバーがあります。

1. GNN 層の数 (深さとも呼ばれます)。

2. 各属性の次元を更新します。アップデート関数は、relu アクティベーション関数とレイヤー正規化を備えた 1 レイヤー MLP です。

3. 集計関数は、最大値、平均値、または合計値の集計に使用されます。

4. 更新されたグラフのプロパティまたはメッセージング スタイル: ノード、エッジ、およびグローバル表現。これらはブール値の切り替え (オンまたはオフ) で制御します。ベースライン モデルはグラフに依存しない GNN (すべてのメッセージ パッシング オフ) となり、最終的にすべてのデータが単一のグローバル属性に集約されます。すべてのメッセージング機能をオンにすると、GraphNets アーキテクチャになります。

データは単一のグローバル属性に集約されます。すべてのメッセージング機能を切り替えると、GraphNets アーキテクチャになります。

これらは高次元ベクトルであるため、主成分分析 (PCA) によって 2D に削減します。完璧なモデルでは、ラベル付きデータをきれいに分離できるはずですが、次元を削減しており、モデルも不完全であるため、この境界が見えにくくなる可能性があります。

いくつかの経験的な GNN 設計レッスン

1. ネットワーク層が深いほどパフォーマンスが向上するわけではありません。

2. パフォーマンスは主に、メッセージ パッシングのタイプ、マッピングの次元、レイヤーの数、および集約操作のタイプに関連します。

平均パフォーマンスと最低パフォーマンスは GNN 層の数が増加するにつれて増加しますが、最高のパフォーマンスは層の数が増加しても増加しません。この効果は、より多くの層を持つ GNN が情報をより遠くまで伝播し、そのノード表現が複数の連続する反復によって「希釈」される可能性があるという事実によるものと考えられます。

伝達されるグラフィック プロパティが多いほど、モデルの平均パフォーマンスが向上します。私たちのタスクはグローバル表現に重点を置いているため、このプロパティを明示的に学習するとパフォーマンスも向上する傾向があります。また、ノード表現はエッジ表現よりも便利であるように見えますが、これらの属性にはより多くの情報がロードされるため、これは当然のことです。

パフォーマンスを向上するには、さまざまな方向から選択できます。2 つの一般的な方向性を強調したいと思います。1 つはより複雑なグラフ アルゴリズムに関連し、もう 1 つはグラフ自体に関連します。

これまでのところ、GNN は近傍プーリングに基づいて動作します。線形グラフ パス (接続されたノードのチェーン) など、一部のグラフ概念はこの方法で表現するのがより困難です。GNN でグラフ情報を抽出、実行、伝達するための新しいメカニズムを設計することは、現在の研究分野です。

GNN 研究の最前線は、新しいモデルやアーキテクチャを構築することではなく、「グラフを構築する方法」、より正確には、利用可能な追加の構造や関係をグラフに追加することですこれまで見てきたように、グラフのプロパティが多いほど、より良いモデルを構築できます。この特別なケースでは、ノード間の空間関係を追加したり、非結合エッジを追加したり、サブグラフ間の学習可能な関係を指定したりすることによって、分子グラフの機能を強化することを検討できます。

GNN関連のグラフ

各属性のベクトル化された情報を含むグラフについてのみ説明しますが、グラフ構造はより柔軟であり、他の種類の情報にも対応できます。幸いなことに、メッセージ パッシング フレームワークは十分に柔軟であるため、一般に、GNN をより複雑なグラフ構造に調整するには、新しいグラフ プロパティを通じて情報がどのように渡され、更新されるかを定義するだけで済みます。

たとえば、ノードのペアが複数の種類のエッジを共有できるマルチエッジ グラフ、またはマルチグラフを検討できます。たとえば、ソーシャル ネットワークでは、関係タイプ (知人、友人、家族) に基づいてエッジ タイプを指定できます。GNN は、エッジ タイプごとに異なるタイプの情報転送ステップを設定することで調整できます。また、ノードがグラフを表す、スーパーノード グラフとも呼ばれる、入れ子になったグラフを考慮することもできます。ネストされた図は、階層情報を表現するのに役立ちます。たとえば、ある分子を別の分子に変換する方法 (反応) があれば、ノードが分子を表し、エッジが 2 つの分子間で共有される分子ネットワークを考えることができます。この場合、1 つの GNN に分子レベルでの表現を学習させ、もう 1 つの GNN に反応ネットワーク レベルで表現を学習させ、訓練中にそれらを交互に使用することで、入れ子になったグラフで学習できます。

別の種類のグラフはハイパーグラフです。このグラフでは、エッジが 2 つだけではなく複数のノードを接続できます。特定のグラフについて、ノード コミュニティを識別し、コミュニティ内のすべてのノードを接続するハイパーエッジを割り当てることにより、ハイパーグラフを構築できます。

GNN でのグラフのサンプリングとバッチ処理 

通常、ニューラル ネットワークのトレーニングでは固定サイズのミニバッチを使用しますが、GNN ネットワークの各ノードに接続されているエッジは固定されておらず、一定のサイズがないため、GNN ネットワークには当てはまりません。グラフのバッチ処理の考え方は、サブグラフを構築することです。サブグラフの構築にはグラフのサンプリングが含まれます。

グラフをサンプリングする方法は未解決の研究問題です。

近傍レベルの構造を保存したい場合、1 つのアプローチは、特定の数のノード (ノード セット) をランダムにサンプリングすることです。次に、エッジを含むノード セットに隣接する距離 k の隣接ノードを追加します。各近傍は個別のグラフとして表示でき、GNN はこれらのサブグラフのバッチでトレーニングできます。すべての隣接ノードの近傍は不完全であるため、損失をマスクすることができ、ノードのセットのみが考慮されます。

より効率的な戦略は、最初にノードをランダムにサンプリングし、その近傍を距離 k まで拡張してから、拡張されたセット内の他のノードを選択することです。これらの操作は、一定数のノード、エッジ、またはサブグラフが構築されると終了できます。状況が許せば、最初のノードのセットを選択し、次に特定の数のノードをサブサンプリングする (たとえば、ランダムに、またはランダム ウォークやメトロポリス アルゴリズムを介して) ことによって、一定サイズの近傍を構築できます。

集計操作の比較

隣接するノードとエッジの情報を集約することは、GNN の重要なステップです各ノードの隣接ノードの数は固定されておらず、この情報を収集するには差別化された方法が必要であるため、収集操作はスムーズであり、ノードの順序やノードの数に依存しない必要があります。

最適な集計操作の選択と設計は未解決の研究課題です。集約操作の望ましい特性は、同様の入力から同様の集約出力が得られ、またその逆も同様であることです。エンベロープ不変演算の非常に単純な候補には、合計、平均、最大値などがあります。分散などの要約統計も利用できます。これらの操作はすべて、可変数の入力を受け取り、入力の順序に関係なく同じ出力を提供します。

操作に万能の最適な選択肢はありません。平均演算は、ノードの近傍ノードの数が大きく異なる場合、またはローカル近傍の特徴を正規化する必要がある場合に役立ちます。max演算は、ローカル近傍の 1 つの顕著なフィーチャを強調表示する場合に便利です。合計はこれら 2 つのバランスをとり、局所的な特徴分布のスナップショットを提供しますが、正規化されていないため外れ値も強調表示します。実際には、合計が通常の方法です。

おすすめ

転載: blog.csdn.net/qq_38480311/article/details/131953224