目次[隠す][見せる]
「グラフニューラルネットワーク」(GNN)として知られる深層学習技術は、グラフドメインで動作します。 これらのネットワークは最近、コンピューター ビジョン、レコメンダー システム、組み合わせ最適化など、さまざまな分野で使用されています。
さらに、これらのネットワークを使用して、ソーシャル ネットワーク、タンパク質間相互作用ネットワーク、ナレッジ グラフなど、いくつかの研究分野における複雑なシステムを表すことができます。
非ユークリッド空間は、画像などの他のタイプのデータとは対照的に、グラフ データが動作する場所です。 ノードを分類し、リンクを予測し、データをクラスター化するために、グラフ分析が使用されます。
この記事では、グラフを調べます ニューラルネットワーク PyTorch を使用した実用的な例を提供するだけでなく、その型を詳細に説明します。
では、グラフとは何ですか?
グラフは、ノードと頂点で構成されるデータ構造の一種です。 さまざまなノード間の接続は、頂点によって決定されます。 ノードで方向が示されている場合、グラフは有向であると言われます。 それ以外の場合は無向です。
グラフの優れたアプリケーションは、さまざまな個人間の関係をモデル化することです。 社会的ネットワーク. リンクや交換などの複雑な状況を扱う場合、グラフは非常に役立ちます。
レコメンデーション システム、セマンティック分析、ソーシャル ネットワーク分析、パターン認識で使用されます。
. グラフベースのソリューションの作成は、複雑で相互に関連するデータを洞察に満ちた理解を提供するまったく新しい分野です。
グラフ ニューラル ネットワーク
グラフ ニューラル ネットワークは、グラフ データ形式で動作できる特殊なニューラル ネットワーク タイプです。 グラフの埋め込みと畳み込みニューラル ネットワーク (CNN) は、それらに大きな影響を与えます。
グラフ ニューラル ネットワークは、ノード、エッジ、およびグラフの予測を含むタスクで使用されます。
- CNN は、画像の分類に使用されます。 同様に、クラスを予測するために、グラフ構造を表すピクセル グリッドに GNN が適用されます。
- 再帰ニューラル ネットワークを使用したテキストの分類。 GNN は、フレーズ内の各単語がノードであるグラフ アーキテクチャでも使用されます。
ノード、エッジ、または完全なグラフを予測するために、ニューラル ネットワークを使用して GNN を作成します。 たとえば、ノード レベルでの予測は、スパム検出などの問題を解決できます。
リンク予測はレコメンダー システムの典型的なケースであり、エッジワイズ予測の問題の例である可能性があります。
グラフ ニューラル ネットワークの種類
多数のニューラル ネットワークの種類が存在し、畳み込みニューラル ネットワークはそれらの大部分に存在します。 このパートでは、最もよく知られている GNN について学びます。
グラフ畳み込みネットワーク(GCN)
それらは従来の CNN に匹敵します。 近くのノードを見て特性を取得します。 活性化関数は、ノード ベクトルを集約し、出力を密層に送信した後に、非線形性を追加するために GNN によって使用されます。
本質的には、グラフ畳み込み、線形層、および非学習者活性化関数で構成されています。 GCN には、スペクトル畳み込みネットワークと空間畳み込みネットワークの XNUMX つの主要な種類があります。
グラフ オートエンコーダー ネットワーク
エンコーダーを使用してグラフの表現方法を学習し、デコーダーを使用して入力グラフの再構築を試みます。 エンコーダーとデコーダーを接続するボトルネック層があります。
自動エンコーダーはクラス バランスの処理に優れているため、リンク予測に頻繁に使用されます。
リカレント グラフ ニューラル ネットワーク (RGNN)
単一のノードが多数の関係を持つマルチリレーショナル ネットワークでは、最適な拡散パターンを学習し、グラフを管理できます。 滑らかさを増し、過度のパラメータ化を減らすために、この形式のグラフ ニューラル ネットワークでは正則化が使用されます。
より良い結果を得るために、RGNN はより少ない処理能力を必要とします。 それらは、テキスト生成、音声認識、機械翻訳、画像の説明、ビデオのタグ付け、およびテキストの要約に利用されます。
ゲーテッド ニューラル グラフ ネットワーク (GGNN)
長期依存タスクに関しては、RGNN よりも優れています。 ゲーテッド グラフ ニューラル ネットワークは、長期的な依存関係にノード、エッジ、およびテンポラル ゲートを含めることで、リカレント グラフ ニューラル ネットワークを強化します。
ゲートは、さまざまな段階でデータを想起および忘却するために使用されるという点で、Gated Recurrent Unit (GRU) と同様に機能します。
Pytorch を使用したグラフ ニューラル ネットワークの実装
私たちが注目する特定の問題は、一般的なノードの分類の問題です。 と呼ばれるかなりのソーシャルネットワークがあります ムサエ-githubGitHub 開発者向けのオープン API からコンパイルされた .
エッジは、ノード間の相互フォロワー関係を示します。これは、少なくとも 10 個のリポジトリでスターを付けた開発者 (プラットフォーム ユーザー) を表します (相互という言葉は無向の関係を示すことに注意してください)。
ノードの場所、スター付きリポジトリ、雇用主、電子メール アドレスに基づいて、ノードの特性が取得されます。 GitHub ユーザーが Web 開発者か Web 開発者かを予測する 機械学習開発者 が私たちの仕事です。
各ユーザーの役職は、このターゲティング関数の基礎として機能しました。
PyTorch のインストール
まず、最初にインストールする必要があります パイトーチ. からマシンに応じて構成できます。 こちら. これが私のものです:
モジュールのインポート
次に、必要なモジュールをインポートします
データのインポートと探索
次の手順では、データを読み取り、ラベル ファイルから最初の XNUMX 行と最後の XNUMX 行をプロットします。
1 つの列のうち、ノードの ID (ユーザー) と ml_target (ユーザーが機械学習コミュニティのメンバーである場合は 0、それ以外の場合は XNUMX) の XNUMX つだけが、この状況に関連しています。
クラスが XNUMX つしかないことを考えると、タスクが二項分類の問題であると確信できます。
重大なクラスの不均衡の結果として、分類器は過小評価されたクラスを評価するのではなく、どのクラスが多数派であるかを仮定することができるため、クラスのバランスを考慮すべきもう XNUMX つの重要な要素となります。
ヒストグラム (度数分布) をプロットすると、他のクラスよりも機械学習 (ラベル = 1) からのクラスが少ないため、不均衡が明らかになります。
機能エンコーディング
ノードの特性は、各ノードに関連付けられている機能を通知します。 データをエンコードするメソッドを実装することで、これらの特性を即座にエンコードできます。
この方法を利用して、ネットワークのごく一部 (たとえば 60 ノード) をカプセル化して表示したいと考えています。 コードはここにリストされています。
グラフの設計と表示
トーチ ジオメトリックを使用します。 グラフを作成するためのデータ。
異なる (オプションの) プロパティを持つ単一のグラフをモデル化するには、単純な Python オブジェクトであるデータが使用されます。 このクラスと次の属性 (すべてトーチ テンソル) を利用して、グラフ オブジェクトを作成します。
符号化されたノードの特徴に割り当てられる値 x の形式は、[ノードの数、特徴の数] です。
y の形状は [ノード数] で、ノード ラベルに適用されます。
エッジ インデックス: 無向グラフを記述するには、元のエッジ インデックスを展開して、同じ XNUMX つのノードをリンクするが反対方向を指す XNUMX つの異なる有向エッジの存在を可能にする必要があります。
100 つはノード 200 から 200 を指し、もう 100 つはノード 100 から 200 を指すエッジのペアが必要です。たとえば、ノード 2,2 と XNUMX の間です。 [XNUMX*元のエッジ数] はテンソル形式になります。
グラフを表示する draw graph メソッドを作成します。 最初のステップは、同種ネットワークを NetworkX グラフに変換することです。これは、NetworkX.draw を使用して描画できます。
GNN モデルを作成してトレーニングする
まず、encode data を light=False で実行し、construct graph を light=False で呼び出してグラフ全体を構築することにより、データ セット全体をエンコードします。 リソースが限られているローカル マシンを使用していると想定しているため、この大きなグラフは描画しません。
マスクは、数字 0 と 1 を使用して各特定のマスクに属するノードを識別するバイナリ ベクトルであり、トレーニング中にどのノードを含める必要があるかをトレーニング フェーズに通知し、どのノードがテスト データであるかを推論フェーズに通知するために使用できます。 幾何学的な変換をトーチします。
ノード レベルの分割は、AddTrainValTestMask クラスのトレーニング マスク、val マスク、およびテスト マスク プロパティを使用して追加できます。これを使用してグラフを取得し、マスクの作成方法を指定できます。
トレーニングに 10% を使用し、データの 60% をテスト セットとして使用し、30% を検証セットとして使用します。
ここで、XNUMX つの GCNConv レイヤーをスタックします。最初のレイヤーの出力フィーチャ数は、グラフ内の入力フィーチャとしてのフィーチャ数と同じです。
クラスの数に等しい出力ノードを含む XNUMX 番目のレイヤーでは、relu 活性化関数を適用し、潜在機能を提供します。
エッジ インデックスとエッジ ウェイトは、GCNConv がフォワード関数で受け入れることができる多くのオプション x のうちの XNUMX つですが、この状況では、最初の XNUMX つの変数のみが必要です。
モデルはグラフ内のすべてのノードのクラスを予測できるという事実にもかかわらず、フェーズに応じて各セットの精度と損失を個別に決定する必要があります。
たとえば、トレーニング中は、トレーニング セットを利用して精度とトレーニングの損失を判断したいだけなので、ここでマスクが役立ちます。
適切な損失と精度を計算するために、マスク損失とマスク精度の関数を定義します。
モデルのトレーニング
これで、トーチを使用するトレーニングの目的が定義されました。 Adam はマスター オプティマイザです。
検証の精度を見ながら、特定のエポック数のトレーニングを実施します。
また、さまざまなエポック全体でのトレーニングの損失と精度をプロットします。
グラフ ニューラル ネットワークの欠点
GNN の使用には、いくつかの欠点があります。 GNNa をいつ採用するか、機械学習モデルのパフォーマンスを向上させる方法は、それらをよりよく理解した後に明らかになります。
- GNN は通常 XNUMX 層の浅いネットワークですが、ほとんどのニューラル ネットワークはパフォーマンスを向上させるために深くすることができます。 この制限により、大規模なデータセットを最先端で実行することはできません。
- グラフの構造ダイナミクスは動的であるため、グラフでモデルをトレーニングすることはより困難です。
- これらのネットワークの計算コストが高いため、生産用のモデルのスケーリングには課題があります。 グラフ構造が巨大で複雑な場合、本番用に GNN をスケーリングするのは困難です。
まとめ
過去数年間で、GNN は、グラフ領域における機械学習の問題に対する強力で効果的なツールに発展しました。 この記事では、グラフ ニューラル ネットワークの基本的な概要を説明します。
その後、モデルのトレーニングとテストに使用されるデータセットの作成を開始できます。 それがどのように機能し、何ができるかを理解するために、さらに進んで、別の種類のデータセットを使用してトレーニングすることもできます。
ハッピーコーディング!
コメントを残す