2005년 획기적인 작품인 "그래프 신경망 모델"의 출현으로 그래프 신경망이 모든 사람에게 전달되었습니다.
이전에 과학자들이 그래프 데이터를 처리하는 방식은 데이터 전처리 단계에서 그래프를 "벡터 표현" 집합으로 변환하는 것이었습니다.
CNN의 출현으로 이러한 정보 손실의 단점이 완전히 바뀌었습니다. 지난 20년 동안 여러 세대의 모델이 계속해서 진화하여 ML 분야의 발전을 촉진했습니다.
오늘 Google은 대규모 GNN 구축을 위한 프로덕션 테스트를 거친 라이브러리인 TensorFlow GNN 1.0(TF-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에 대해 자세히 설명합니다. 일반적인 애플리케이션 중 하나를 살펴볼 수 있습니다.
상호 참조를 통한 거대한 데이터베이스에서의 예측 테이블에 의해 정의된 그래프의 특정 유형의 노드
예를 들어 컴퓨터 과학(CS) 인용 데이터베이스 arxiv 논문에는 일대다 인용과 다대일 인용 관계가 있어 각 논문의 주제 영역을 예측할 수 있습니다.
대부분의 신경망과 마찬가지로 GNN은 많은 레이블이 지정된 샘플(약 수백만 개)이 있는 데이터 세트에서 훈련되지만 각 훈련 단계는 훨씬 작은 훈련 샘플(예: 수백 개)의 배치로만 구성됩니다.
수백만 개의 샘플로 확장하기 위해 GNN은 기본 그래프의 합리적으로 작은 하위 그래프 스트림에서 훈련됩니다. 각 하위 그래프에는 중앙 레이블이 지정된 노드의 GNN 결과를 계산하고 모델을 교육하기에 충분한 원시 데이터가 포함되어 있습니다.
하위 그래프 샘플링이라고도 하는 이 프로세스는 GNN 교육에 매우 중요합니다.
대부분의 기존 도구는 일괄 처리 방식으로 샘플링을 완료하고 훈련을 위한 정적 하위 그래프를 생성합니다.
그리고 TF-GNN은 동적 및 대화형 샘플링을 통해 이를 개선할 수 있는 도구를 제공합니다.
GNN 교육을 위한 입력 예제를 만들기 위해 더 큰 그래프에서 작고 실행 가능한 하위 그래프를 추출하는 하위 그래프 샘플링 프로세스
TF-GNN 1.0에는 동적 또는 일괄 하위 그래프 구성을 위한 유연한 Python API가 도입되었습니다. 모든 관련 척도의 샘플링: Colab 노트의 대화형 샘플링.
구체적으로는 단일 훈련 호스트의 메인 메모리에 저장된 소규모 데이터 세트 또는 Apache Beam Billion을 통해 네트워크 파일 시스템에 저장된 대규모 데이터 세트(최대 수억 개의 노드 및 데이터)를 "효율적으로 샘플링"합니다. 가장자리) 분산 샘플링을 위한 것입니다.
동일하게 샘플링된 하위 그래프에서 GNN의 작업은 루트 노드의 숨겨진(또는 잠재적) 상태를 계산하는 것입니다. 숨겨진 상태는 루트 노드 주변의 관련 정보를 집계하고 인코딩합니다.
일반적인 방법은 "메시지 전달 신경망"입니다.
각 메시징 라운드에서 노드는 들어오는 가장자리를 따라 인접한 노드로부터 메시지를 수신하고 이러한 가장자리에서 자체 숨겨진 상태를 업데이트합니다.
n회 라운드 후 루트 노드의 숨겨진 상태는 n개 가장자리 내의 모든 노드의 집계 정보를 반영합니다(아래 그림과 같이 n=2). 메시지와 새로운 숨겨진 상태는 신경망의 숨겨진 계층에 의해 계산됩니다.
이종 그래프에서는 다양한 유형의 노드와 간선에 대해 별도로 훈련된 숨겨진 레이어를 사용하는 것이 적합한 경우가 많습니다.
그림은 간단한 "메시지 전달 신경망"을 보여줍니다. 이 네트워크에서는 노드 상태가 각 단계에서 외부 노드에서 내부 노드로 전파되고 내부에서 새 노드 상태가 계산됩니다. 마디. 루트 노드에 도달하면 최종 예측이 가능합니다
교육 설정은 레이블이 지정된 노드의 GNN 숨겨진 상태 위에 출력 레이어를 배치하고 손실을 계산하는 것입니다(예측 오류 측정). 역전파를 통해 모델을 업데이트합니다. 이는 모든 신경망 훈련에서 흔히 사용되는 가중치를 사용하여 수행됩니다.
지도 학습 외에도 GNN은 비지도 방식으로 학습할 수 있으므로 노드와 해당 기능의 이산 그래프 구조에 대한 연속 표현(또는 임베딩)을 계산할 수 있습니다.
이러한 표현은 다른 ML 시스템에서 일반적으로 사용됩니다.
이러한 방식으로 그래프로 인코딩된 개별 관계 정보를 보다 일반적인 신경망 사용 사례에 통합할 수 있습니다. TF-GNN은 이종 그래프에서 감독되지 않은 대상의 세분화된 사양을 지원합니다.
TF-GNN 라이브러리는 다양한 추상화 수준에서 GNN 구축 및 교육을 지원합니다.
최고 수준에서 사용자는 Kera 레이어로 표시되는 라이브러리와 함께 번들로 제공되는 사전 정의된 모델을 사용할 수 있습니다.
연구 문헌의 소규모 모델 세트 외에도 TF-GNN에는 신중하게 선별된 모델링 선택을 제공하는 고도로 구성 가능한 모델 템플릿이 함께 제공됩니다.
Google은 이러한 선택을 발견하여 많은 내부 문제에 대한 강력한 기준을 제공했습니다. 템플릿은 GNN 레이어를 구현합니다. 사용자는 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中的大规模应用,并推动该领域的进一步创新。
위 내용은 Google은 TensorFlow-GNN 1.0 출시를 공식 발표했습니다! 대규모로 그래프 신경망을 구축하기 위한 동적 및 대화형 샘플링의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!