2005 年、画期的な著作「グラフ ニューラル ネットワーク モデル」のリリースにより、グラフ ニューラル ネットワークがすべての人に知られるようになりました。
これ以前は、科学者がグラフ データを処理する方法は、データの前処理段階でグラフを一連の「ベクトル表現」に変換することでした。
CNN の出現により、情報損失というこの欠点は完全に変わりました。過去 20 年間、モデルの世代が進化し続け、ML 分野の進歩を促進しました。
本日、Google は TensorFlow GNN 1.0 (TF-GNN) のリリースを正式に発表しました。これは、大規模な GNN を構築するための実稼働テスト済みライブラリです。
TensorFlow でのモデリングとトレーニングの両方をサポートするだけでなく、大規模なデータ ストアからの入力グラフの抽出もサポートします。
TF-GNN は、オブジェクトと関係のタイプがノードとエッジの異なるセットで表される異種グラフ向けにゼロから構築されています。
実世界のオブジェクトとその関係はさまざまなタイプで表示されますが、TF-GNN の異種混合の焦点により、それらの表現が非常に自然になります。
Google の科学者 Anton Tsitsulin 氏は、複雑な異種モデリングが戻ってきたと述べました。
#世界中のどこにでも存在するオブジェクトとその関係。
関係性は、オブジェクトを理解する上で、輸送ネットワーク、生産ネットワーク、ナレッジ グラフ、ソーシャル ネットワークなど、オブジェクト自体のプロパティを個別に見るのと同じくらい重要です。
離散数学とコンピューターサイエンスは、長い間、さまざまな不規則な方法でエッジによって任意に接続された「ノード」で構成される、このようなネットワークをグラフとして形式化してきました。
ただし、ほとんどの機械学習アルゴリズムでは、ピクセルのグリッド、単語のシーケンスなど、入力オブジェクト間の規則的かつ均一な関係のみが許可されるか、まったく関係が許可されません。
グラフィック ニューラル ネットワーク (略して GNN) は、グラフの接続性 (初期のアルゴリズム DeepWalk や Node2Vec など) とさまざまなノードおよびエッジ入力機能の両方を活用できる強力なテクノロジです。 。
GNN は、グラフ全体 (この分子は何らかの方法で反応しますか?)、または個々のノード (引用文によると、この文書のトピックは何ですか?)、予測のための潜在的なエッジ (この製品は別の製品と一緒に購入される可能性がありますか?)。
GNN は、グラフで予測を行うだけでなく、より一般的なニューラル ネットワークの使用例とのギャップを埋めるための強力なツールです。
グラフの離散関係情報を連続的にエンコードし、別の深層学習システムに自然に組み込むことができます。
Google は本日、大規模な GNN を構築するための実稼働テスト済みライブラリである TensorFlow GNN 1.0 (TF-GNN) を正式に発表しました。
TensorFlow では、このようなグラフは tfgnn.GraphTensor 型のオブジェクトによって表されます。
これは、tf.data.Dataset、tf.function などの「ファーストクラス オブジェクト」として受け入れられる複合テンソル型 (Python クラスのテンソルのコレクション) です。
グラフ構造だけでなく、ノード、エッジ、グラフ全体の特性も保存できます。
GraphTensor のトレーニング可能な変換は、高レベルの Kera API で Layers オブジェクトとして定義するか、tfgnn.GraphTensor プリミティブを直接使用して定義できます。
次に、TF-GNN についてさらに説明します。典型的なアプリケーションの 1 つを見てみましょう。
## 巨大なデータベース内の相互参照テーブルによって定義されたグラフ内の特定のタイプのノードの属性を予測します
たとえば、コンピューター サイエンス (CS) 引用データベース arxiv 論文には、1 対多の引用と多対 1 の引用関係があり、これにより対象分野を予測できます。各紙。
ほとんどのニューラル ネットワークと同様、GNN は多くのラベル付きサンプル (約数百万) のデータ セットでトレーニングされますが、各トレーニング ステップは小さな多数のトレーニング サンプル (たとえば、何百)。
数百万のサンプルにスケールするために、GNN は基礎となるグラフ内の適度に小さいサブグラフのストリームでトレーニングされます。各サブグラフには、中央のラベル付きノードの GNN 結果を計算し、モデルをトレーニングするのに十分な生データが含まれています。
このプロセスはサブグラフ サンプリングと呼ばれることがあり、GNN トレーニングにとって非常に重要です。
既存のツールのほとんどは、バッチ モードでサンプリングを完了し、トレーニング用の静的なサブグラフを生成します。
TF-GNN は、動的かつ対話型のサンプリングを通じてこれを改善するツールを提供します。
サブグラフ サンプリング プロセス、つまり、大きなグラフから実用的な小さなサブグラフを抽出して、GNN トレーニング用の入力例を作成します。
TF-GNN 1.0 では、関連するすべてのスケールで動的またはバッチのサブグラフ サンプリングを構成するための柔軟な Python API が導入されています。Colab ノートのインタラクティブ サンプリングです。
具体的には、単一のトレーニング ホストのメイン メモリに保存されている小さなデータ セット、または Apache Beam 経由でネットワーク ファイル システムに保存されている大規模なデータ セット (最大数百) の「効率的なサンプリング」です。分散サンプリングの場合、数百万のノードと数十億のエッジ)。
これらの同じサンプリングされたサブグラフ上で、GNN のタスクは、ルート ノードの隠れた (または潜在的な) 状態を計算することです。隠れた状態は、ルート ノードの近傍の関連情報を集約してエンコードします。 。
#一般的な方法は「メッセージ パッシング ニューラル ネットワーク」です。
メッセージングの各ラウンドで、ノードは入力エッジに沿って隣接ノードからメッセージを受信し、これらのエッジから自身の非表示状態を更新します。
n ラウンド後、ルート ノードの非表示状態は、n エッジ内のすべてのノードの集約情報を反映します (下の図に示すように、n=2)。メッセージと新しい隠れ状態は、ニューラル ネットワークの隠れ層によって計算されます。
異種グラフでは、多くの場合、さまざまな種類のノードとエッジに対して個別にトレーニングされた隠れ層を使用することが合理的です。
#図は単純な「メッセージ パッシング ニューラル ネットワーク」を示しています。このネットワークでは、ノードのステータスが外部ノードから内部ノードに伝播されます。各ステップでノードが生成され、内部ノード収集を通じて新しいノードのステータスが計算されます。ルート ノードに到達すると、最終的な予測を行うことができます。トレーニング セットアップは、ラベル付きノードの GNN の隠れ状態の上に出力層を配置し、 (予測誤差を測定するため) 損失を計算し、バックプロパゲーションを通じてモデルの重みを更新します。これは、ニューラル ネットワークのトレーニングでは一般的です。
教師ありトレーニングに加えて、GNN は教師なしでトレーニングすることもできるため、ノードとその特徴の離散グラフ構造の連続表現 (または埋め込み) を計算できます。
これらの表現は、他の ML システムで一般的に使用されます。
このようにして、グラフによってエンコードされた離散リレーショナル情報を、より一般的なニューラル ネットワークの使用例に組み込むことができます。 TF-GNN は、異種グラフ上の教師なしターゲットの詳細な指定をサポートします。
最高レベルでは、ユーザーはライブラリにバンドルされている事前定義モデル (Kera レイヤーとして表される) を使用できます。
研究文献からの少数のモデル セットに加えて、TF-GNN には、慎重に精選されたモデリングの選択肢を提供する、高度に構成可能なモデル テンプレートが付属しています。
Google は、これらの選択肢が社内の問題の多くに対する強力なベースラインを提供することを発見しました。テンプレートは GNN 層を実装しており、ユーザーは Kera 層から初期化するだけで済みます。
うわー
在最低层,用户可以根据用于在图中传递数据的原语,从头开始编写GNN模型,比如将数据从节点广播到其所有传出边,或将数据从其所有传入边汇集到节点中。
当涉及到特征或隐藏状态时,TF-GNN 的图数据模型对节点、边和整个输入图一视同仁。
因此,它不仅可以直接表示像MPNN那样以节点为中心的模型,而且还可以表示更一般形式的的图网络。
这可以(但不一定)使用Kera作为核心TensorFlow顶部的建模框架来完成。
虽然高级用户可以自由地进行定制模型训练,但TF-GNN Runner还提供了一种简洁的方法,在常见情况下协调Kera模型的训练。
一个简单的调用可能如下所示:
from tensorflow_gnn import runnerrunner.run( task=runner.RootNodeBinaryClassification("papers", ...), model_fn=model_fn, trainer=runner.KerasTrainer(tf.distribute.MirroredStrategy(), model_dir="/tmp/model"), optimizer_fn=tf.keras.optimizers.Adam, epochs=10, global_batch_size=128, train_ds_provider=runner.TFRecordDatasetProvider("/tmp/train*"), valid_ds_provider=runner.TFRecordDatasetProvider("/tmp/validation*"), gtspec=...,)
Runner为ML Pain提供了现成的解决方案,如分布式训练和云TPU上固定形状的 tfgnn.GraphTensor 填充。
除了单一任务的训练(如上所示)外,它还支持多个(两个或更多)任务的联合训练。
例如,非监督任务可以与监督任务混合,以形成具有特定于应用的归纳偏差的最终连续表示(或嵌入)。调用方只需将任务参数替换为任务映射:
from tensorflow_gnn import runnerfrom tensorflow_gnn.models import contrastive_lossesrunner.run( task={"classification": runner.RootNodeBinaryClassification("papers", ...),"dgi": contrastive_losses.DeepGraphInfomaxTask("papers"),},...)
此外,TF-GNN Runner还包括用于模型归因的集成梯度实现。
集成梯度输出是一个GraphTensor,其连接性与观察到的GraphTensor相同,但其特征用梯度值代替,在GNN预测中,较大的梯度值比较小的梯度值贡献更多。
总之,谷歌希望TF-GNN将有助于推动GNN在TensorFlow中的大规模应用,并推动该领域的进一步创新。
以上がGoogle が TensorFlow-GNN 1.0 のリリースを正式に発表しました。大規模なグラフ ニューラル ネットワークを構築するための動的かつインタラクティブなサンプリングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。