首頁 > 科技

七個用於圖形深度學習的開原始碼庫

2021-07-17 03:10:42

如果你是一名深度學習的愛好者,那麼可能已經熟悉一些基本的數學原語,這些原語推動了具有強大功能的深度神經網路的發展。儘管很多人喜歡將基本的人工神經網路視為具有一些加權連線的一些節點,但將神經網路視為矩陣乘法在計算上更有效。

公共領域的多層感知器

這種類型的神經網路是一種前饋多層感知器(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將是一個理想選擇。


IT145.com E-mail:sddin#qq.com