今年 6 月份,Deepmind 發表了一篇論文,將圖與深度神經網路相結合,由此提出了一種新型圖網絡。由於圖網絡主要採用神經網路的方式對圖進行操作,因此它又可以稱為圖神經網路。本文介紹了 DeepMind 最近開源的圖網絡庫,它可以用 TensorFlow 和 Sonnet 快速構建圖網絡。
專案地址:https://github.com/deepmind/graph_nets
DeepMind 開源的這個專案主要是依據他們在 6 月份發表的論文《Relational inductive biases, deep learning, and graph networks》,他們在該論文中將深度學習與貝葉斯網路進行了融合,並提出了一種具有推理能力的機率圖模型。
圖網絡即可以在社交網路或其它基於圖形資料上執行的一般深度學習架構,它是一種基於圖結構的廣義神經網路。圖網絡一般是將底層圖形作為計算圖,並透過在整張圖上傳遞、轉換和聚合節點特徵資訊,從而學習神經網路基元以生成單節點嵌入向量。生成的節點嵌入向量可作為任何可微預測層的輸入,並用於節點分類或預測節點之間的連線,完整的模型可以透過端到端的方式訓練。
目前圖網絡在監督學習、半監督學習和無監督學習等領域都有探索,因為它不僅能利用圖來表示豐富的結構關係,同時還能利用神經網路強大的擬合能力。
一般圖網絡將圖作為輸入,並返回一張圖以作為輸入。其中輸入的圖有 edge- (E )、node- (V ) 和 global-level (u) 屬性,輸入也有相同的結構,只不過會使用更新後的屬性。如下展示了輸入圖、對圖實現的計算及輸出圖,更詳細的內容請參考文末提供的原論文地址。
安裝
圖網絡庫可以從 pip 安裝。此次安裝與 Linux/Mac OS X 和 Python 2.7 及 3.4+相容。
若要安裝該庫,執行:
$ pip install graph_nets
使用案例
如下程式碼將建立簡單的圖網絡模組,並將其連線到資料。注意我們需要匯入 Sonnet 庫,它允許定義一些前向傳播的計算模組。我們在使用 sonnet 建立三個多層感知機,並分別作為邊、節點和全域性模型的函式後,就能直接呼叫 GraphNetwork 方法建立整個圖網絡。
import graph_nets as gn
import sonnet as snt
# Provide your own functions to generate graph-structured data.
input_graphs = get_graphs()
# Create the graph network.
graph_net_module = gn.modules.GraphNetwork(
edge_model_fn=lambda: snt.nets.MLP([32, 32]),
node_model_fn=lambda: snt.nets.MLP([32, 32]),
global_model_fn=lambda: snt.nets.MLP([32, 32]))
# Pass the input graphs to the graph network, and return the output graphs.
output_graphs = graph_net_module(input_graphs)
Demo Jupyter notebooks
該庫包含一些 demo,展示瞭如何建立、操作及訓練圖網絡以在最短路徑搜尋任務、排序任務和物理預測任務中進行圖結構資料推理。每個 demo 使用相同的圖網絡結構,該結構可以突顯該方法的複雜性。
在 Colab 執行
若要嘗試 demo 而不在本地安裝任何東西,你可以藉助 Colaboratory 後端並在瀏覽器(甚至在手機上)中執行 demo。讀者可查閱下面的 demo 連結,並按照 notebook 中的說明操作。
「shortest path demo」建立隨機圖,並訓練一個圖網絡以在任何兩個節點的最短路徑上標記節點和邊。經過一個資訊傳遞步驟序列(如下圖所示),模型可以改善其對最短路徑的預測。
「sort demo」建立了隨機數的幾個列表,並訓練一個圖網絡來對列表進行排序。經過一個資訊傳遞步驟序列,模型會對哪個元素(圖中的列)出現在另一個元素(行)之後做出準確的預測。
「physics demo」建立了一個隨機彈簧物理系統,並訓練一個圖網絡來預測系統在下一個時間步的狀態。模型的下一步預測可以被反饋作為輸入,以構建未來軌跡。以下每個子圖展示了 50 步內的真實和預測的彈簧系統狀態。這和 Battaglia 等人(2016)的「interaction networks」中的模型和實驗相似。
本地執行
在你的本地計算機上執行 demo 要安裝必要的依賴,請執行:
$ pip install jupyter matplotlib scipy
試用 demo 請執行:
$ cd <path-to-graph-nets-library>/demos
$ jupyter notebook
然後透過 Jupyter notebook 介面開啟 demo。
論文: Relational inductive biases, deep learning, and graph networks
論文地址: https://arxiv.org/pdf/1806.01261.pdf
摘要:人工智慧最近經歷了一場復興,在視覺、語言、控制和決策等關鍵領域取得了重大進展。取得這些進展的部分原因是由於廉價的資料和計算資源,它們符合深度學習的天然優勢。然而,在不同壓力下發展起來的人類智力,其許多決定性特徵對於目前的方法而言仍是觸不可及的。特別是,超越經驗的泛化能力——人類智力從幼年開始發展的標誌——仍然是現代人工智慧面臨的巨大挑戰。
本論文包含部分新研究、部分回顧和部分統一結論。我們認為組合泛化是人工智慧實現與人類相似能力的首要任務,而結構化表示和計算是實現這一目標的關鍵。正如生物學把自然與人工培育相結合,我們摒棄「手動設計特徵」與「端到端」學習二選一的錯誤選擇,而是倡導一種利用它們互補優勢的方法。我們探索在深度學習架構中使用關係歸納偏置如何有助於學習實體、關係以及構成它們的規則。我們為具有強烈關係歸納偏置的 AI 工具包提出了一個新構造塊——圖網絡(Graph Network),它泛化並擴充套件了各種對圖進行操作的神經網路方法,併為操作結構化知識和產生結構化行為提供了直接的介面。我們討論圖網絡如何支援關係推理和組合泛化,為更復雜的、可解釋的和靈活的推理模式奠定基礎。