En 2005, l'avènement de l'ouvrage qui a fait date "Le modèle de réseau neuronal graphique" a mis les réseaux neuronaux graphiques à la portée de tous.
Avant cela, la façon dont les scientifiques traitaient les données graphiques consistait à convertir le graphique en un ensemble de « représentations vectorielles » pendant la phase de prétraitement des données.
L'émergence de CNN a complètement modifié les inconvénients de cette perte d'informations. Au cours des 20 dernières années, des générations de modèles n'ont cessé d'évoluer, favorisant les progrès dans le domaine du ML.
Aujourd'hui, Google a officiellement annoncé la sortie de TensorFlow GNN 1.0 (TF-GNN) - une bibliothèque testée en production pour créer des GNN à grande échelle.
Il prend en charge à la fois la modélisation et la formation dans TensorFlow, ainsi que l'extraction de graphiques d'entrée à partir de grands magasins de données.
TF-GNN est conçu dès le départ pour les graphiques hétérogènes, où les types d'objets et de relations sont représentés par différents ensembles de nœuds et d'arêtes.
Les objets et leurs relations dans le monde réel apparaissent sous différents types, et l'orientation hétérogène de TF-GNN rend très naturel leur représentation.
Anton Tsitsulin, scientifique chez Google, a déclaré que la modélisation hétérogène complexe était de retour !
Les objets et leurs relations sont partout dans notre monde.
L'importance des relations pour comprendre un objet n'est pas moins importante que d'examiner les propriétés de l'objet lui-même de manière isolée, comme les réseaux de transport, les réseaux de production, les graphiques de connaissances ou les réseaux sociaux.
Les mathématiques discrètes et l'informatique ont depuis longtemps formalisé des réseaux tels que les graphes, constitués de « nœuds » arbitrairement reliés par des arêtes de diverses manières irrégulières.
Cependant, la plupart des algorithmes d'apprentissage automatique n'autorisent que des relations régulières et uniformes entre les objets d'entrée, tels que des grilles de pixels, des séquences de mots, ou aucune relation du tout.
Graphic Neural Network, ou GNN en abrégé, est une technologie puissante qui peut non seulement exploiter la connectivité des graphiques (tels que les premiers algorithmes DeepWalk et Node2Vec), mais également utiliser différentes fonctionnalités d'entrée de nœuds et de bords.
GNN peut travailler sur le graphe dans son ensemble (cette molécule réagit-elle d'une manière ou d'une autre ?), sur les nœuds individuels (d'après la citation, quel est le sujet de ce document ?), sur les arêtes potentielles (c'est le produit est susceptible d'être acheté avec un autre produit ? ) à des fins de prédiction.
En plus de faire des prédictions sur des graphiques, les GNN sont un outil puissant pour combler le fossé par rapport aux cas d'utilisation plus typiques des réseaux neuronaux.
Ils codent les informations relationnelles discrètes du graphe de manière continue, lui permettant d'être naturellement incorporé dans un autre système d'apprentissage profond.
Google a officiellement annoncé aujourd'hui TensorFlow GNN 1.0 (TF-GNN), une bibliothèque testée en production pour créer des GNN à grande échelle.
Dans TensorFlow, un tel graphique est représenté par un objet de type tfgnn.GraphTensor.
Il s'agit d'un type de tenseur composite (une collection de tenseurs dans une classe Python), accepté comme "objet de première classe" dans tf.data.Dataset , tf.function etc.
Il peut stocker non seulement la structure du graphique, mais également les caractéristiques des nœuds, des arêtes et de l'ensemble du graphique.
Les transformations entraînables pour GraphTensors peuvent être définies en tant qu'objets Layers dans l'API Kera de haut niveau, ou directement à l'aide de la primitive tfgnn.GraphTensor.
Ensuite, expliquez plus en détail TF-GNN, vous pouvez regarder l'une des applications typiques :
Prédiction dans une énorme base de données, par référence croisée Attributs de certains types de nœuds dans le graphe défini par le tableau
Par exemple, dans la base de données de citations informatiques (CS) arxiv papers, il existe des citations un-à-plusieurs et des relations de citation plusieurs-à-un, qui peuvent prédire le domaine de chaque article.
Comme la plupart des réseaux de neurones, les GNN sont formés sur des ensembles de données contenant de nombreux échantillons étiquetés (environ des millions), mais chaque étape de formation ne consiste qu'en un lot d'échantillons de formation beaucoup plus petits (tels que des centaines).
Pour s'adapter à des millions d'échantillons, les GNN sont formés sur un flux de sous-graphes raisonnablement petits dans le graphique sous-jacent. Chaque sous-graphique contient suffisamment de données brutes pour calculer les résultats GNN du nœud central étiqueté et entraîner le modèle.
Ce processus, souvent appelé échantillonnage de sous-graphes, est extrêmement important pour la formation GNN.
La plupart des outils existants effectuent l'échantillonnage par lots et génèrent des sous-graphiques statiques pour la formation.
Et TF-GNN fournit des outils pour améliorer cela grâce à un échantillonnage dynamique et interactif.
Le processus d'échantillonnage de sous-graphes, qui extrait de petits sous-graphes exploitables d'un graphe plus grand pour créer des exemples d'entrée pour la formation GNN
TF-GNN 1.0 introduit une API Python flexible, pour configurer des sous-graphes dynamiques ou par lots échantillonnage de toutes les échelles pertinentes : échantillonnage interactif dans les notes Colab.
Plus précisément, un « échantillonnage efficace » de petits ensembles de données stockés dans la mémoire principale d'un seul hôte de formation, ou d'énormes ensembles de données (jusqu'à des centaines de millions de nœuds et de données) stockés dans des systèmes de fichiers réseau via Apache Beam. bords) pour un échantillonnage distribué.
Sur ces mêmes sous-graphes échantillonnés, la tâche de GNN est de calculer l'état caché (ou potentiel) du nœud racine ; l'état caché agrège et code les informations pertinentes du voisinage du nœud racine.
Une méthode courante est le "réseau neuronal de transmission de messages".
À chaque cycle de messagerie, un nœud reçoit des messages des nœuds voisins le long des bords entrants et met à jour son propre état caché à partir de ces bords.
Après n tours, l'état caché du nœud racine reflète les informations agrégées de tous les nœuds dans n bords (comme le montre la figure ci-dessous, n=2). Le message et le nouvel état caché sont calculés par la couche cachée du réseau neuronal.
Dans les graphiques hétérogènes, il est souvent judicieux d'utiliser des couches cachées entraînées séparément pour différents types de nœuds et d'arêtes.
L'image montre un simple "réseau neuronal passant un message". Dans ce réseau, l'état du nœud est propagé du nœud externe au nœud interne à chaque étape, et le nouvel état du nœud est calculé au niveau interne. nœud. Une fois le nœud racine atteint, la prédiction finale peut être faite
La configuration de la formation consiste à placer la couche de sortie au-dessus de l'état caché du GNN du nœud étiqueté, en calculant la perte (pour mesurer l'erreur de prédiction) et mise à jour du modèle via rétropropagation. Cela se fait à l'aide de poids, ce qui est courant dans toute formation de réseau neuronal.
En plus de la formation supervisée, les GNN peuvent également être formés de manière non supervisée, ce qui nous permet de calculer des représentations continues (ou intégrations) de structures graphiques discrètes de nœuds et de leurs caractéristiques.
Ces représentations sont ensuite couramment utilisées dans d'autres systèmes ML.
De cette manière, les informations relationnelles discrètes codées par le graphe peuvent être incorporées dans des cas d'utilisation de réseaux neuronaux plus typiques. TF-GNN prend en charge la spécification fine de cibles non supervisées sur des graphiques hétérogènes.
La bibliothèque TF-GNN prend en charge la création et la formation de GNN à différents niveaux d'abstraction.
Au plus haut niveau, les utilisateurs peuvent utiliser n'importe quel modèle prédéfini fourni avec la bibliothèque, qui est représenté sous forme de couches Kera.
En plus d'un petit ensemble de modèles issus de la littérature de recherche, TF-GNN est livré avec un modèle hautement configurable qui fournit des choix de modélisation soigneusement sélectionnés.
Google a découvert ces choix, fournissant une base de référence solide pour bon nombre de nos problèmes internes. Le modèle implémente la couche GNN ; l'utilisateur n'a qu'à l'initialiser à partir de la couche Kera.
import tensorflow_gnn as tfgnnfrom tensorflow_gnn.models import mt_albisdef model_fn(graph_tensor_spec: tfgnn.GraphTensorSpec):"""Builds a GNN as a Keras model."""graph = inputs = tf.keras.Input(type_spec=graph_tensor_spec)# Encode input features (callback omitted for brevity).graph = tfgnn.keras.layers.MapFeatures(node_sets_fn=set_initial_node_states)(graph)# For each round of message passing...for _ in range(2):# ... create and apply a Keras layer.graph = mt_albis.MtAlbisGraphUpdate(units=128, message_dim=64,attention_type="none", simple_conv_reduce_type="mean",normalization_type="layer", next_state_type="residual",state_dropout_rate=0.2, l2_regularizatinotallow=1e-5,)(graph)return tf.keras.Model(inputs, graph)
在最低层,用户可以根据用于在图中传递数据的原语,从头开始编写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中的大规模应用,并推动该领域的进一步创新。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!