發布人:Sibon Li、Jan Pfeifer、Bryan Perozzi 和 Douglas Yarrington
日前,我們很高興發布了 TensorFlow 圖神經網絡 (Graph Neural Networks, GNNs),此庫可以幫助開發者利用 TensorFlow 輕松處理圖結構化數據。我們已在 Google 的多個生產環境中使用了該庫的早期版本(例如,垃圾郵件和異常檢測、數據流量估計、YouTube 內容標簽),并作為可擴容的圖挖掘管道的一個組成部分。特別是,鑒于 Google 的數據類型繁多,我們的庫在設計時就考慮到了異構圖。發布此庫的初衷是為了鼓勵與業界研究人員的合作。
TensorFlow 圖神經網絡
https://github.com/tensorflow/gnn
為何使用 GNNs?
在現實世界和我們的工程系統中,“圖”無處不在。一組物體、地點或人以及它們之間的聯系通常都可以用圖來表述。通常情況下,我們在機器學習問題中看到的數據是結構化或關系化的,因此也可以用圖來表述。雖然關于 GNNs 的基礎研究可能只有幾十年的歷史,但當代 GNNs 最近取得的功能進展已經幫助推動了多個領域的進步,其中包括數據流量預測、謠言和假新聞檢測、疾病傳播建模、物理學模擬和理解分子有氣味的原因等。
數據流量預測
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
圖可以對多種不同類型數據之間的關系進行建模,
包括網頁(左)、社交關系(中)或分子(右)等
圖代表了一組實體(節點或頂點)之間的關系(邊)。我們可以通過描述每個節點、邊或整個圖的特征,從而將信息存儲在圖的每一塊中。此外,我們還可以賦予邊方向性,來描述信息或數據流,等等。
若這些圖有多個特征,則可以用 GNNs 來解決這類問題。通過圖層級的研究,我們嘗試預測整個圖的特征。我們可以識別某些“形狀”的存在,如圖中的圓圈,可能代表亞分子,也可能代表密切的社會關系。GNNs 可以用于節點級的任務,對圖的節點進行分類,并預測圖中的分區和相似性,類似于圖像分類或分割。最后,我們可以在邊層級上使用 GNNs 來發現實體之間的聯系,或許可以使用 GNNs 來“修剪”邊,以確定場景中對象的狀態。
結構
TF-GNN 提供了基本模塊,以便在 TensorFlow 中實現 GNN 模型。除了建模 API,我們的庫還針對處理圖數據的困難任務提供了大量的工具:基于 Tensor 的圖數據結構、數據處理管道,以及一些供用戶快速上手的示例模型。
組成工作流的各種 TF-GNN 組件
TF-GNN庫的初始版本包含一些實用程序和功能,初學者和有經驗的用戶都能使用,其中包括:
TF-GNN 庫
https://github.com/tensorflow/gnn
高階 Keras 式 API,用于創建 GNN 模型,可以輕松地與其他類型的模型組合。GNNs 經常與排名、深度檢索(雙編碼器)結合使用或與其他類型的模型(圖像、文本等)混合使用。
用于異構圖的 GNN API。我們在 Google 和現實世界中處理的許多圖問題都包含不同類型的節點和邊。因此,我們選擇提供一種簡單的方法來對此建模。
定義明確的架構,用于聲明圖的拓撲,以及驗證架構的工具。此架構描述了其訓練數據的形狀,并用于指導其他工具。
GraphTensor 復合張量類型,它持有圖數據,可以分批處理,還有圖操作例程可用。
關于 GraphTensor 結構的操作庫:
對節點和邊的各種有效的廣播和池化運算,以及相關工具。
標準并入的卷積庫,ML 工程師/研究人員可以輕松地對其進行擴展。
高階 API,幫助產品工程師快速構建 GNN 模型,而不必擔心其細節問題。
磁盤上的圖形訓練數據的編碼,以及用來將該數據解析為數據結構的庫,您的模型可以從該庫中提取各種特征。
示例用法
在下面的例子中,我們使用 TF-GNN Keras API 構建一個模型,根據用戶觀看的內容和喜歡的類型向其推薦電影。
我們使用 ConvGNNBuilder 方法來指定邊類型和節點配置,即對邊使用 WeightedSumConvolution(定義如下)。每次通過 GNN 時,我們將通過 Dense 互連層來更新節點值:
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 使用更強大的自定義模型架構。例如,在之前的用例中,我們可能想指定某些電影或類型,讓它們在我們進行推薦時擁有更多權重。在下列片段中,我們用自定義圖卷積定義了一個更高級的 GNN,例子中使用的是加權邊。我們定義了 WeightedSumConvolution 類來匯集邊值,讓其作為所有邊的權重之和:
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
請注意,盡管卷積的編寫只考慮了源節點和目標節點,但 TF-GNN 保障了其適用性,讓其能夠在異構圖(有各種類型的節點和邊)上無縫工作。
更多信息
您可以查看 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 計劃向我們提交作品,分享您的構建成果。如需提供反饋,您可以在 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 圖神經網絡 (GNNs)
文章出處:【微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
-
谷歌
+關注
關注
27文章
6196瀏覽量
106020 -
神經網絡
+關注
關注
42文章
4781瀏覽量
101178 -
開發者
+關注
關注
1文章
590瀏覽量
17097
原文標題:推出 TensorFlow 圖神經網絡 (GNNs)
文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論