七個用于圖形深度學習的開源代碼庫
譯文【51CTO.com快譯】如果你是一名深度學習的愛好者,那么可能已經熟悉一些基本的數學原語,這些原語推動了具有強大功能的深度神經網絡的發展。盡管很多人喜歡將基本的人工神經網絡視為具有一些加權連接的一些節點,但將神經網絡視為矩陣乘法在計算上更有效。
公共領域的多層感知器
這種類型的神經網絡是一種前饋多層感知器(MLP)。如果想讓計算機計算這個模型的前向傳遞,它將在隱藏層中使用矩陣乘法和某種非線性數據。
前饋多層感知器(MLP)非常適合可以自然形成的一維向量數據。雖然很簡潔,但是當數據樣本很大時,前饋多層感知器(MLP)會采用大量參數,這對于處理高維數據(如2D圖像或3D體積)來說并不是一種非常有效的方法。2D類似數據的圖像自然適用于卷積運算,其中權重應用于整個圖像的局部鄰域,而不是賦予層之間的每個點對點連接自己的權重。這種類型的權重共享有許多優點,其中包括平移等方差、正則化和參數效率等。
卷積可以實現可視化。當然,開發人員現在不可能采用人工執行這些操作,他們想要的是一種能夠以計算機友好的方式在每個圖像通道上快速執行卷積的算法。
卷積運算再次實現為矩陣的乘法,盡管這次是按元素進行的。這要歸功于傅里葉變換的卷積定理,它指出傅里葉域中的乘法與空間域中的卷積有關。但是,當開發人員感興趣的數據不是特別適合表示為1D矢量或2D/3D圖像,而是自然地表示為圖形時會發生什么?
就開發人員的目的而言,圖形是由邊連接的節點的集合,邊可以具有自己的屬性,例如權重或方向性,并且節點通常具有某種狀態或特征,就像前饋多層感知器(MLP)中的節點激活一樣。
在圖形神經網絡中,每個“層”只是圖節點狀態的快照,這些狀態通過與每個節點及其相鄰節點相關的操作更新連接,例如作為節點之間邊的神經網絡。
如果想使用圖神經網絡在圖形結構數據上取得令人印象深刻的結果,就像卷積神經網絡對圖像進行深度學習所做的那樣,需要采用在計算機上實現這些模型的有效方法。這通常意味著需要一種方法將概念圖神經網絡框架轉換為適用于現代深度學習的東西。
圖形卷積網絡
那么怎么可能將圖形神經網絡的復雜思想轉換為矩陣乘法的另一種形式?表示連接的一種方法是使用鄰接矩陣。顧名思義,鄰接矩陣描述了圖中哪些節點彼此相鄰(即通過邊彼此連接)。
但是圖形神經網絡需要對具有任意結構的圖形進行操作,因此不能期望每次輸入的數據都有相同的鄰接矩陣,甚至每個鄰接矩陣都有相同的維數。開發人員可以通過將多個樣本的鄰接矩陣對角組合成一個更大的矩陣來描述一批中的所有連接來處理這個問題。
這使開發人員能夠在一個批次中處理具有不同結構的多個圖,他們會注意到其公式也會導致節點之間的權重共享。還有一些更多的細節:鄰接矩陣應該被歸一化,這樣特征尺度不會完全改變,除了在這里討論的圖形卷積神經網絡(GNN)方法之外,還有其他的圖卷積方法,但是這是理解圖形卷積神經網絡(GNN)前向傳遞的一個很好的起點。
這足以在圖形上實施深度學習所需的數據準備和數學運算。幸運的是,對圖形結構數據深度學習的興趣推動了許多用于圖形深度學習的開源庫的開發,為研究人員和工程師提供了更多的認知空間,使他們專注于架構、實驗和應用。
以下對7個新興的圖形深度學習開源代碼庫進行介紹,并按受歡迎程度進行從低向高排列。
7.GeometricFlux.jl
這個列表中的大多數條目都使用Python,并構建在TensorFlow、PyTorch或JAX之上,這反映了圖形深度學習語言的主導地位。然而,其第一個條目是一個基于Julia編程語言的Flux深度學習框架的圖形神經網絡開源庫。
由于從業者的數量相對較少,人們可能會放棄GeometricFlux.jl,甚至放棄使用Julia語言進行深度學習的整個想法,但它是一種不斷發展的語言,與Python相比具有許多技術優勢。人們很難預料到,DeepMind會在幾年前開始放棄TensorFlow,轉而支持JAX,同樣在短短幾年內,人們可能會看到Julia語言開始取代Python作為標準機器學習語言。
Julia編程語言從一開始就被設計為既高效(如Python)又快速(像C等編譯語言一樣)。Julia語言使用即時編譯來實現快速執行速度,而其read-execute-print循環(REPL)使得交互式和迭代編程具有相當高的效率。當用戶第一次運行代碼時,會注意到一點延遲,特別是當習慣于以一種特別交互式的方式使用Python時(比如在Jupyter記事本中),但是隨著時間的推移,給定工作流的速度會顯著提高。
Julia被設計為一種科學編程語言,在過去五年的時間,自動微分軟件包有了長足的發展。最終結果是其功能可以將諸如DifferentialEquations.jl包等以研究為中心的庫與機器學習功能相結合,正如人們在神經微分方程包DiffEqFlux.jl中看到的那樣。GeometricFlux.jl也是如此,它旨在與圖論研究JuliaGraphs生態系統以及Flux的其他部分相兼容。
如果在工作中使用圖形深度學習,那么堅持使用基于PyTorch的庫或用于其他項目的深度學習標準工作框架可能是最有效的。但是,如果是從頭開始或進行研究,GeometricFlux.jl為使用Julia進行圖深度學習和可微編程提供了一個引人注目的切入點。該庫友好的MIT許可證還可以輕松構建和貢獻開發人員需要的工具,或解決項目GitHub存儲庫中的一些未解決的問題。
6.PyTorch GNN
PyTorch GNN庫是微軟公司的圖形深度學習庫,在2020年5月發布之后仍在積極開發0.9.x版本。PyTorch GNN(PTGNN)旨在讓熟悉基于PyTorch構建模型的用戶容易熟悉torch.nn.Module類,并處理數據加載器的工作流任務。并將圖形轉換為PyTorch-ready tensors。
PTGNN基于一個有趣的架構,稱為Abstract Neural Model。這個類封裝了訓練圖神經網絡的整個過程,包括張量化和預處理原始數據,還包括從PyTorch的nn.Module類中提取的實際神經模型子類T Neural Module。神經模塊可以獨立于Abstract Neural Model對象使用,事實上,如果需要的話,可以與其他類型的Pytork模塊/層結合使用。
PTGNN比GeometricFlux.jl推出略晚,提交歷史不太活躍,但是GitHub的Star和Fork稍微多一些。它具有相同的寬松和開源MIT許可證,但如果正在尋找一個可以貢獻的項目,則需要大量的自我指導和學習。GitHub上的“問題”選項卡幾乎沒有提供需要修復或實施的內容方向。
PTGNN在其構造中有一些有趣的設計元素,可能會對其使用或使用感興趣,但如果開發人員是圖形神經網絡愛好者,并正在尋找基于PyTorch的圖深度學習庫,那么可以使用PyTorch Geometric。PyTorch Geometric更加成熟,已經開發了大約4年的時間,并且擁有一個成熟且不斷增長的用戶和開發者社區。
5.Jraph
人們可能已經注意到DeepMind在2020年12月發表的一篇博客文章,描述了他們在開發和使用基于功能可微編程庫JAX的深度學習研究庫的強大生態系統方面所做的持續努力。JAX是最初作為Python(尤其是NumPy)中簡單但幾乎通用的自動微分學術項目Autograd的概念產物推出的。
在谷歌公司招募到幾位最初負責Autograd開發的程序人員之后,他們開發了JAX。JAX是一個有趣的包,這在很大程度上歸功于它對可組合函數式編程范例的重視。它還關注“可微分編程”的一般概念,而不是主要關注像TensorFlow或PyTorch這樣的神經網絡。盡管PyTorch和TensorFlow都可用于構建可微物理模型而不是神經網絡,但JAX更容易從一開始就更適合用于科學和其他編程任務的靈活可微編程。盡管之前曾花費大量時間構建基于TensorFlow的工具(如Sonnet),但JAX產品足以促使DeepMind開始大量采用和開發。
作為DeepMind為深度學習研究開發基于JAX的生態系統的努力的一部分,他們開發了一個名為Jraph的圖學習庫。
與這一列表中的其他一些庫不同,Jraph是一個輕量級和簡約的圖學習庫,它通常不規定特定的使用方式。Jraph繼承了其前身Graph Nets的一些設計模式,它使用TensorFlow和Sonnet構建。也就是Jraph使用與Graph Nets相同的Graphs Tuple概念,它是一種包含描述節點、邊和邊方向的信息的數據結構。Jraph處理的另一個特性為使用掩碼和填充處理可變結構圖提供了特殊的便利。對于這一列表中的大多數其他Python庫,這不是一個問題,但由于在JAX中使用即時編譯,這是必要的。這可以確保在JAX中使用圖形,并不意味著放棄JAX在GPU和CPU硬件上提供的執行加速。
4.Spektral
Spektral是一個基于Tensorflow 2和Keras的圖形深度學習庫,其徽標明顯受到Pac-Man ghost villains的啟發。如果開發人員打算使用基于TensorFlow的庫來滿足其圖形深度學習需求,那么Spektral可能是最佳選擇。它旨在易于使用和靈活,同時保留盡可能接近熟悉的Keras API的用法。這意味著開發人員甚至可以使用方便的model.fit()方法訓練模型,只要提供Spetkral數據加載器來處理定義圖形的TensorFlow友好稀疏矩陣的形成。然而,Spektral的易用性需要權衡,與其他主要庫DGL和PyTorchGeometric相比,大多數任務的訓練速度明顯較慢。
Spektral已被廣泛采用,如果開發人員想使用TensorFlow構建圖形模型,它可能是一個有吸引力的選擇。它可能比Deepmind的GraphNets庫得到更好的支持,但從各方面來看,它正在逐步淘汰,取而代之的是基于JAX的Jraph。Spektral是在Apache2.0開源許可下發布的,并有一個活躍的問題板,它將定期將請求整合在一起,這使得這個庫成為一個吸引人的深度學習庫。
3.Graph Nets
Graph Nets是Deepmind的另一個圖形深度學習庫。它建立在TensorFlow和Sonnet(另一個DeepMind庫)之上,可能很快就會被前面描述的基于JAX的Jraph所取代。Graph Nets需要TensorFlow1,盡管它只有大約3年的使用歷史,但感覺有些過時。它在GitHub上擁有令人印象深刻的737個Fork和近5,000個Star,并且與來自Google/DeepMind的大多數其他庫一樣,在Apache2.0下獲得許可。Graph Nets起源于Jraph使用的Graphs Tuple數據結構。
盡管Graph Nets在GitHub上似乎很受歡迎,但它可能沒有這一列表中的其他庫那么吸引人,除非開發人員正在處理已經大量使用該庫的現有代碼庫。對于使用TensorFlow的新項目來說,Spektral和DGL可能是更好的選擇,因為它們是用更新的技術構建的,并且可能會在幾年內繼續獲得支持。
2.Deep Graph Library (DGL)
DGL與微軟的PTGNN或谷歌/DeepMind的Jraph和GraphNets等大型科技公司無關,而是一個名稱為“分布式深度機器學習社區”的一些深度學習愛好者的產品。它在GitHub上擁有超過100名貢獻者、1500次以上的提交和7,000多個Star。DGL在這一列表中也是獨一無二的,它提供了靈活的后端選擇。該模型可以運行PyTorch、TensorFlow或MXNet,同時提供與驅動實驗的體驗大致相似的體驗。它是這一列表中仍在積極開發中的壽命較長的庫之一,其第一次提交可追溯到2018年4月。DGL最近被用來構建SE(3)轉換器,這是一種強大的圖形轉換器,具有旋轉和平移等方差可能是AlphaFold2的構建塊或靈感。該模型是已經令人印象深刻的AlphaFold的繼承者,是DeepMind在2020年CASP14蛋白質結構預測挑戰賽上令人印象深刻的獲獎表現背后的明星。這一事件促使一些新聞機構宣布AlphaFold2是第一個解決重大科學挑戰的人工智能項目。
DGL是圍繞Gilmer等人描述的神經消息傳遞范式在2017年構建的。它提供了一個靈活的框架,涵蓋了用于構建圖形神經網絡的大多數類型的圖層。通過閱讀代碼存儲庫和文檔,就會注意到DGL是一個龐大的項目。這也意味著有很多(將近200個)未解決的問題,對于希望為具有重大影響的圖形深度學習項目做出貢獻的人來說,這是一個成熟的機會。DGL用于許多專門的應用程序,在一定程度上已經在它的基礎上構建了幾個額外的庫。DGL-LifeSci是一個專為應用于化學和生物信息學的深度學習圖而構建的庫,而DGL-KE是為處理知識圖嵌入而構建的。這兩個額外的庫都是由AWS實驗室開發的。
1. PyTorch Geometric
在這一列表中名列榜首的庫就是PyTorch Geometric。PyTorch Geometric或PyG是一個成熟的幾何深度學習庫,擁有1萬多個stars和4400次提交,其中大部分都是一名才華橫溢的博士生Ru Stu1s推出的。PyG提供了一個實現圖神經網絡層列表,它不僅可以非常快速地運行深度圖網絡,而且PyG還可以用于其他類型的幾何深度學習,例如點云和基于網格的模型。
PyG有一個精心編寫的示例教程介紹,自從2017年以來一直在開發,它非常完善,并得到了用戶社區和140多個貢獻者的大力支持。對于以前使用過PyTorch的任何人來說,使用PyG是非常熟悉的,最明顯的區別是數據輸入的一些差異。與通常的forward(x)編程模式不同,開發人員將習慣于使用forward(batch),其中“batch”是包含描述圖形特性和連接的所有信息的數據結構。
對于可以自由選擇庫的新項目,PyTorchGeometric很難被擊敗。
以下是這些用于圖形深度學習的開源代碼庫之間的比較:
如何選擇深度學習庫
在許多情況下,開發人員對深度圖學習庫的選擇將受到自己、雇主或指導人員之前選擇的深度學習庫的嚴重影響。例如,如果喜歡KerasAPI和TensorFlow,或者需要與預先存在的代碼庫保持一致的依賴關系,例如,Spektral可能是適合的庫。在此不建議使用DeepMind的GraphNets和TensorFlow1啟動新項目,但該庫仍然會偶爾更新,并且可能是支持遺留項目的合理選擇。
如果開發人員希望從頭開始,可能有幾個誘人的選擇。如果認為Julia Programming的深思熟慮的生產力+執行速度優先是機器學習和科學編程的未來,那么GeometricFlux.jl將面臨令人興奮的前景。如果對函數式編程范式感興趣,并希望保留即時編譯(如Julia)的一些速度優勢,那么使用基于JAX的Jraph是一個更具吸引力的選擇。最后,如果想要一個處于相對成熟和成熟的開發狀態的快速、功能強大的庫,那么PyTorchGeometric將是一個理想選擇。
原文標題:7 Open Source Libraries for Deep Learning Graphs,作者:Kevin Vu
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】