發(fā)布人:Sibon Li、Jan Pfeifer、Bryan Perozzi 和 Douglas Yarrington
日前,我們很高興發(fā)布了 TensorFlow 圖神經(jīng)網(wǎng)絡 (Graph Neural Networks, GNNs),此庫可以幫助開發(fā)者利用 TensorFlow 輕松處理圖結(jié)構(gòu)化數(shù)據(jù)。我們已在 Google 的多個生產(chǎn)環(huán)境中使用了該庫的早期版本(例如,垃圾郵件和異常檢測、數(shù)據(jù)流量估計、YouTube 內(nèi)容標簽),并作為可擴容的圖挖掘管道的一個組成部分。特別是,鑒于 Google 的數(shù)據(jù)類型繁多,我們的庫在設計時就考慮到了異構(gòu)圖。發(fā)布此庫的初衷是為了鼓勵與業(yè)界研究人員的合作。
TensorFlow 圖神經(jīng)網(wǎng)絡
https://github.com/tensorflow/gnn
為何使用 GNNs?
在現(xiàn)實世界和我們的工程系統(tǒng)中,“圖”無處不在。一組物體、地點或人以及它們之間的聯(lián)系通常都可以用圖來表述。通常情況下,我們在機器學習問題中看到的數(shù)據(jù)是結(jié)構(gòu)化或關系化的,因此也可以用圖來表述。雖然關于 GNNs 的基礎研究可能只有幾十年的歷史,但當代 GNNs 最近取得的功能進展已經(jīng)幫助推動了多個領域的進步,其中包括數(shù)據(jù)流量預測、謠言和假新聞檢測、疾病傳播建模、物理學模擬和理解分子有氣味的原因等。
數(shù)據(jù)流量預測
https://deepmind.com/blog/article/traffic-prediction-with-advanced-graph-neural-networks
謠言和假新聞檢測
https://arxiv.org/abs/2108.03548
疾病傳播建模
https://arxiv.org/abs/2007.03113
物理學模擬
http://proceedings.mlr.press/v80/sanchez-gonzalez18a/sanchez-gonzalez18a.pdf
理解分子有氣味的原因
https://arxiv.org/abs/1910.10685
圖可以對多種不同類型數(shù)據(jù)之間的關系進行建模,
包括網(wǎng)頁(左)、社交關系(中)或分子(右)等
圖代表了一組實體(節(jié)點或頂點)之間的關系(邊)。我們可以通過描述每個節(jié)點、邊或整個圖的特征,從而將信息存儲在圖的每一塊中。此外,我們還可以賦予邊方向性,來描述信息或數(shù)據(jù)流,等等。
若這些圖有多個特征,則可以用 GNNs 來解決這類問題。通過圖層級的研究,我們嘗試預測整個圖的特征。我們可以識別某些“形狀”的存在,如圖中的圓圈,可能代表亞分子,也可能代表密切的社會關系。GNNs 可以用于節(jié)點級的任務,對圖的節(jié)點進行分類,并預測圖中的分區(qū)和相似性,類似于圖像分類或分割。最后,我們可以在邊層級上使用 GNNs 來發(fā)現(xiàn)實體之間的聯(lián)系,或許可以使用 GNNs 來“修剪”邊,以確定場景中對象的狀態(tài)。
結(jié)構(gòu)
TF-GNN 提供了基本模塊,以便在 TensorFlow 中實現(xiàn) GNN 模型。除了建模 API,我們的庫還針對處理圖數(shù)據(jù)的困難任務提供了大量的工具:基于 Tensor 的圖數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)處理管道,以及一些供用戶快速上手的示例模型。
組成工作流的各種 TF-GNN 組件
TF-GNN庫的初始版本包含一些實用程序和功能,初學者和有經(jīng)驗的用戶都能使用,其中包括:
TF-GNN 庫
https://github.com/tensorflow/gnn
高階 Keras 式 API,用于創(chuàng)建 GNN 模型,可以輕松地與其他類型的模型組合。GNNs 經(jīng)常與排名、深度檢索(雙編碼器)結(jié)合使用或與其他類型的模型(圖像、文本等)混合使用。
用于異構(gòu)圖的 GNN API。我們在 Google 和現(xiàn)實世界中處理的許多圖問題都包含不同類型的節(jié)點和邊。因此,我們選擇提供一種簡單的方法來對此建模。
定義明確的架構(gòu),用于聲明圖的拓撲,以及驗證架構(gòu)的工具。此架構(gòu)描述了其訓練數(shù)據(jù)的形狀,并用于指導其他工具。
GraphTensor 復合張量類型,它持有圖數(shù)據(jù),可以分批處理,還有圖操作例程可用。
關于 GraphTensor 結(jié)構(gòu)的操作庫:
對節(jié)點和邊的各種有效的廣播和池化運算,以及相關工具。
標準并入的卷積庫,ML 工程師/研究人員可以輕松地對其進行擴展。
高階 API,幫助產(chǎn)品工程師快速構(gòu)建 GNN 模型,而不必擔心其細節(jié)問題。
磁盤上的圖形訓練數(shù)據(jù)的編碼,以及用來將該數(shù)據(jù)解析為數(shù)據(jù)結(jié)構(gòu)的庫,您的模型可以從該庫中提取各種特征。
示例用法
在下面的例子中,我們使用 TF-GNN Keras API 構(gòu)建一個模型,根據(jù)用戶觀看的內(nèi)容和喜歡的類型向其推薦電影。
我們使用 ConvGNNBuilder 方法來指定邊類型和節(jié)點配置,即對邊使用 WeightedSumConvolution(定義如下)。每次通過 GNN 時,我們將通過 Dense 互連層來更新節(jié)點值:
import tensorflow as tf
import tensorflow_gnn as tfgnn
# Model hyper-parameters:
h_dims = {'user': 256, 'movie': 64, 'genre': 128}
# Model builder initialization:
gnn = tfgnn.keras.ConvGNNBuilder(
lambda edge_set_name: WeightedSumConvolution(),
lambda node_set_name: tfgnn.keras.layers.NextStateFromConcat(
tf.keras.layers.Dense(h_dims[node_set_name]))
)
# Two rounds of message passing to target node sets:
model = tf.keras.models.Sequential([
gnn.Convolve({'genre'}), # sends messages from movie to genre
gnn.Convolve({'user'}), # sends messages from movie and genre to users
tfgnn.keras.layers.Readout(node_set_name="user"),
tf.keras.layers.Dense(1)
])
以上代碼很好用,但有時我們可能想要為 GNNs 使用更強大的自定義模型架構(gòu)。例如,在之前的用例中,我們可能想指定某些電影或類型,讓它們在我們進行推薦時擁有更多權(quán)重。在下列片段中,我們用自定義圖卷積定義了一個更高級的 GNN,例子中使用的是加權(quán)邊。我們定義了 WeightedSumConvolution 類來匯集邊值,讓其作為所有邊的權(quán)重之和:
class WeightedSumConvolution(tf.keras.layers.Layer):
"""Weighted sum of source nodes states."""
def call(self, graph: tfgnn.GraphTensor,
edge_set_name: tfgnn.EdgeSetName) -> tfgnn.Field:
messages = tfgnn.broadcast_node_to_edges(
graph,
edge_set_name,
tfgnn.SOURCE,
feature_name=tfgnn.DEFAULT_STATE_NAME)
weights = graph.edge_sets[edge_set_name]['weight']
weighted_messages = tf.expand_dims(weights, -1) * messages
pooled_messages = tfgnn.pool_edges_to_node(
graph,
edge_set_name,
tfgnn.TARGET,
reduce_type='sum',
feature_value=weighted_messages)
return pooled_messages
請注意,盡管卷積的編寫只考慮了源節(jié)點和目標節(jié)點,但 TF-GNN 保障了其適用性,讓其能夠在異構(gòu)圖(有各種類型的節(jié)點和邊)上無縫工作。
更多信息
您可以查看 TF-GNNGitHub repo,以獲得更多信息。
GitHub repo
https://github.com/tensorflow/gnn
歡迎加入 TensorFlow 論壇,隨時關注 TensorFlow 博客、Twitter 或 YouTube,獲悉最新消息。
TensorFlow 論壇
https://discuss.tensorflow.google.cn/
博客
https://blog.tensorflow.google.cn/
http://twitter.com/tensorflow
YouTube
http://youtube.com/tensorflow
您還可以通過 Community Spotlight 計劃向我們提交作品,分享您的構(gòu)建成果。如需提供反饋,您可以在 GitHub 上提交問題。我們歡迎您的貢獻和參與,謝謝!
Community Spotlight 計劃
http://goo.gle/TFCS
GitHub
https://github.com/tensorflow/gnn/issues
致謝
本文所介紹的研究來自以下各位的合作成果:來自 Google 的 Oleksandr Ferludin?、Martin Blais、Jan Pfeifer?、Arno Eigenwillig、Dustin Zelle、Bryan Perozzi 和 Da-Cheng Juan,以及來自 DeepMind 的 Sibon Li、Alvaro Sanchez-Gonzalez、Peter Battaglia、Kevin Villela、Jennifer She 和 David Wong。
原文標題:推出 TensorFlow 圖神經(jīng)網(wǎng)絡 (GNNs)
文章出處:【微信公眾號:谷歌開發(fā)者】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
-
谷歌
+關注
關注
27文章
6241瀏覽量
110011 -
神經(jīng)網(wǎng)絡
+關注
關注
42文章
4820瀏覽量
106346 -
開發(fā)者
+關注
關注
1文章
690瀏覽量
17879
原文標題:推出 TensorFlow 圖神經(jīng)網(wǎng)絡 (GNNs)
文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發(fā)者】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
TF之CNN:Tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡CNN的嘻嘻哈哈事之詳細攻略
【PYNQ-Z2試用體驗】神經(jīng)網(wǎng)絡基礎知識
發(fā)布MCU上跑的輕量神經(jīng)網(wǎng)絡包 NNoM, 讓MCU也神經(jīng)一把
卷積神經(jīng)網(wǎng)絡如何使用
【案例分享】ART神經(jīng)網(wǎng)絡與SOM神經(jīng)網(wǎng)絡
TensorFlow是什么
【AI學習】第3篇--人工神經(jīng)網(wǎng)絡
如何移植一個CNN神經(jīng)網(wǎng)絡到FPGA中?
如何構(gòu)建神經(jīng)網(wǎng)絡?
如何使用TensorFlow將神經(jīng)網(wǎng)絡模型部署到移動或嵌入式設備上
用TensorFlow寫個簡單的神經(jīng)網(wǎng)絡
如何使用Numpy搭建神經(jīng)網(wǎng)絡

谷歌正式發(fā)布TensorFlow 圖神經(jīng)網(wǎng)絡
評論