自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

七個用于圖形深度學(xué)習(xí)的開源代碼庫

譯文
人工智能 深度學(xué)習(xí)
如果你是一名深度學(xué)習(xí)的愛好者,那么可能已經(jīng)熟悉一些基本的數(shù)學(xué)原語,這些原語推動了具有強(qiáng)大功能的深度神經(jīng)網(wǎng)絡(luò)的發(fā)展。盡管很多人喜歡將基本的人工神經(jīng)網(wǎng)絡(luò)視為具有一些加權(quán)連接的一些節(jié)點(diǎn),但將神經(jīng)網(wǎng)絡(luò)視為矩陣乘法在計算上更有效。

【51CTO.com快譯】如果你是一名深度學(xué)習(xí)的愛好者,那么可能已經(jīng)熟悉一些基本的數(shù)學(xué)原語,這些原語推動了具有強(qiáng)大功能的深度神經(jīng)網(wǎng)絡(luò)的發(fā)展。盡管很多人喜歡將基本的人工神經(jīng)網(wǎng)絡(luò)視為具有一些加權(quán)連接的一些節(jié)點(diǎn),但將神經(jīng)網(wǎng)絡(luò)視為矩陣乘法在計算上更有效。 

[[411525]]

 

公共領(lǐng)域的多層感知器

這種類型的神經(jīng)網(wǎng)絡(luò)是一種前饋多層感知器(MLP)。如果想讓計算機(jī)計算這個模型的前向傳遞,它將在隱藏層中使用矩陣乘法和某種非線性數(shù)據(jù)。

前饋多層感知器(MLP)非常適合可以自然形成的一維向量數(shù)據(jù)。雖然很簡潔,但是當(dāng)數(shù)據(jù)樣本很大時,前饋多層感知器(MLP)會采用大量參數(shù),這對于處理高維數(shù)據(jù)(如2D圖像或3D體積)來說并不是一種非常有效的方法。2D類似數(shù)據(jù)的圖像自然適用于卷積運(yùn)算,其中權(quán)重應(yīng)用于整個圖像的局部鄰域,而不是賦予層之間的每個點(diǎn)對點(diǎn)連接自己的權(quán)重。這種類型的權(quán)重共享有許多優(yōu)點(diǎn),其中包括平移等方差、正則化和參數(shù)效率等。

卷積可以實現(xiàn)可視化。當(dāng)然,開發(fā)人員現(xiàn)在不可能采用人工執(zhí)行這些操作,他們想要的是一種能夠以計算機(jī)友好的方式在每個圖像通道上快速執(zhí)行卷積的算法。

卷積運(yùn)算再次實現(xiàn)為矩陣的乘法,盡管這次是按元素進(jìn)行的。這要?dú)w功于傅里葉變換的卷積定理,它指出傅里葉域中的乘法與空間域中的卷積有關(guān)。但是,當(dāng)開發(fā)人員感興趣的數(shù)據(jù)不是特別適合表示為1D矢量或2D/3D圖像,而是自然地表示為圖形時會發(fā)生什么?

就開發(fā)人員的目的而言,圖形是由邊連接的節(jié)點(diǎn)的集合,邊可以具有自己的屬性,例如權(quán)重或方向性,并且節(jié)點(diǎn)通常具有某種狀態(tài)或特征,就像前饋多層感知器(MLP)中的節(jié)點(diǎn)激活一樣。

在圖形神經(jīng)網(wǎng)絡(luò)中,每個“層”只是圖節(jié)點(diǎn)狀態(tài)的快照,這些狀態(tài)通過與每個節(jié)點(diǎn)及其相鄰節(jié)點(diǎn)相關(guān)的操作更新連接,例如作為節(jié)點(diǎn)之間邊的神經(jīng)網(wǎng)絡(luò)。

如果想使用圖神經(jīng)網(wǎng)絡(luò)在圖形結(jié)構(gòu)數(shù)據(jù)上取得令人印象深刻的結(jié)果,就像卷積神經(jīng)網(wǎng)絡(luò)對圖像進(jìn)行深度學(xué)習(xí)所做的那樣,需要采用在計算機(jī)上實現(xiàn)這些模型的有效方法。這通常意味著需要一種方法將概念圖神經(jīng)網(wǎng)絡(luò)框架轉(zhuǎn)換為適用于現(xiàn)代深度學(xué)習(xí)的東西。

圖形卷積網(wǎng)絡(luò)

那么怎么可能將圖形神經(jīng)網(wǎng)絡(luò)的復(fù)雜思想轉(zhuǎn)換為矩陣乘法的另一種形式?表示連接的一種方法是使用鄰接矩陣。顧名思義,鄰接矩陣描述了圖中哪些節(jié)點(diǎn)彼此相鄰(即通過邊彼此連接)。

但是圖形神經(jīng)網(wǎng)絡(luò)需要對具有任意結(jié)構(gòu)的圖形進(jìn)行操作,因此不能期望每次輸入的數(shù)據(jù)都有相同的鄰接矩陣,甚至每個鄰接矩陣都有相同的維數(shù)。開發(fā)人員可以通過將多個樣本的鄰接矩陣對角組合成一個更大的矩陣來描述一批中的所有連接來處理這個問題。

這使開發(fā)人員能夠在一個批次中處理具有不同結(jié)構(gòu)的多個圖,他們會注意到其公式也會導(dǎo)致節(jié)點(diǎn)之間的權(quán)重共享。還有一些更多的細(xì)節(jié):鄰接矩陣應(yīng)該被歸一化,這樣特征尺度不會完全改變,除了在這里討論的圖形卷積神經(jīng)網(wǎng)絡(luò)(GNN)方法之外,還有其他的圖卷積方法,但是這是理解圖形卷積神經(jīng)網(wǎng)絡(luò)(GNN)前向傳遞的一個很好的起點(diǎn)。

這足以在圖形上實施深度學(xué)習(xí)所需的數(shù)據(jù)準(zhǔn)備和數(shù)學(xué)運(yùn)算。幸運(yùn)的是,對圖形結(jié)構(gòu)數(shù)據(jù)深度學(xué)習(xí)的興趣推動了許多用于圖形深度學(xué)習(xí)的開源庫的開發(fā),為研究人員和工程師提供了更多的認(rèn)知空間,使他們專注于架構(gòu)、實驗和應(yīng)用。

以下對7個新興的圖形深度學(xué)習(xí)開源代碼庫進(jìn)行介紹,并按受歡迎程度進(jìn)行從低向高排列。

7.GeometricFlux.jl

這個列表中的大多數(shù)條目都使用Python,并構(gòu)建在TensorFlow、PyTorch或JAX之上,這反映了圖形深度學(xué)習(xí)語言的主導(dǎo)地位。然而,其第一個條目是一個基于Julia編程語言的Flux深度學(xué)習(xí)框架的圖形神經(jīng)網(wǎng)絡(luò)開源庫。

由于從業(yè)者的數(shù)量相對較少,人們可能會放棄GeometricFlux.jl,甚至放棄使用Julia語言進(jìn)行深度學(xué)習(xí)的整個想法,但它是一種不斷發(fā)展的語言,與Python相比具有許多技術(shù)優(yōu)勢。人們很難預(yù)料到,DeepMind會在幾年前開始放棄TensorFlow,轉(zhuǎn)而支持JAX,同樣在短短幾年內(nèi),人們可能會看到Julia語言開始取代Python作為標(biāo)準(zhǔn)機(jī)器學(xué)習(xí)語言。

Julia編程語言從一開始就被設(shè)計為既高效(如Python)又快速(像C等編譯語言一樣)。Julia語言使用即時編譯來實現(xiàn)快速執(zhí)行速度,而其read-execute-print循環(huán)(REPL)使得交互式和迭代編程具有相當(dāng)高的效率。當(dāng)用戶第一次運(yùn)行代碼時,會注意到一點(diǎn)延遲,特別是當(dāng)習(xí)慣于以一種特別交互式的方式使用Python時(比如在Jupyter記事本中),但是隨著時間的推移,給定工作流的速度會顯著提高。

Julia被設(shè)計為一種科學(xué)編程語言,在過去五年的時間,自動微分軟件包有了長足的發(fā)展。最終結(jié)果是其功能可以將諸如DifferentialEquations.jl包等以研究為中心的庫與機(jī)器學(xué)習(xí)功能相結(jié)合,正如人們在神經(jīng)微分方程包DiffEqFlux.jl中看到的那樣。GeometricFlux.jl也是如此,它旨在與圖論研究JuliaGraphs生態(tài)系統(tǒng)以及Flux的其他部分相兼容。

如果在工作中使用圖形深度學(xué)習(xí),那么堅持使用基于PyTorch的庫或用于其他項目的深度學(xué)習(xí)標(biāo)準(zhǔn)工作框架可能是最有效的。但是,如果是從頭開始或進(jìn)行研究,GeometricFlux.jl為使用Julia進(jìn)行圖深度學(xué)習(xí)和可微編程提供了一個引人注目的切入點(diǎn)。該庫友好的MIT許可證還可以輕松構(gòu)建和貢獻(xiàn)開發(fā)人員需要的工具,或解決項目GitHub存儲庫中的一些未解決的問題。

6.PyTorch GNN

PyTorch GNN庫是微軟公司的圖形深度學(xué)習(xí)庫,在2020年5月發(fā)布之后仍在積極開發(fā)0.9.x版本。PyTorch GNN(PTGNN)旨在讓熟悉基于PyTorch構(gòu)建模型的用戶容易熟悉torch.nn.Module類,并處理數(shù)據(jù)加載器的工作流任務(wù)。并將圖形轉(zhuǎn)換為PyTorch-ready tensors。

PTGNN基于一個有趣的架構(gòu),稱為Abstract Neural Model。這個類封裝了訓(xùn)練圖神經(jīng)網(wǎng)絡(luò)的整個過程,包括張量化和預(yù)處理原始數(shù)據(jù),還包括從PyTorch的nn.Module類中提取的實際神經(jīng)模型子類T Neural Module。神經(jīng)模塊可以獨(dú)立于Abstract Neural Model對象使用,事實上,如果需要的話,可以與其他類型的Pytork模塊/層結(jié)合使用。

PTGNN比GeometricFlux.jl推出略晚,提交歷史不太活躍,但是GitHub的Star和Fork稍微多一些。它具有相同的寬松和開源MIT許可證,但如果正在尋找一個可以貢獻(xiàn)的項目,則需要大量的自我指導(dǎo)和學(xué)習(xí)。GitHub上的“問題”選項卡幾乎沒有提供需要修復(fù)或?qū)嵤┑膬?nèi)容方向。

PTGNN在其構(gòu)造中有一些有趣的設(shè)計元素,可能會對其使用或使用感興趣,但如果開發(fā)人員是圖形神經(jīng)網(wǎng)絡(luò)愛好者,并正在尋找基于PyTorch的圖深度學(xué)習(xí)庫,那么可以使用PyTorch Geometric。PyTorch Geometric更加成熟,已經(jīng)開發(fā)了大約4年的時間,并且擁有一個成熟且不斷增長的用戶和開發(fā)者社區(qū)。

5.Jraph

人們可能已經(jīng)注意到DeepMind在2020年12月發(fā)表的一篇博客文章,描述了他們在開發(fā)和使用基于功能可微編程庫JAX的深度學(xué)習(xí)研究庫的強(qiáng)大生態(tài)系統(tǒng)方面所做的持續(xù)努力。JAX是最初作為Python(尤其是NumPy)中簡單但幾乎通用的自動微分學(xué)術(shù)項目Autograd的概念產(chǎn)物推出的。

在谷歌公司招募到幾位最初負(fù)責(zé)Autograd開發(fā)的程序人員之后,他們開發(fā)了JAX。JAX是一個有趣的包,這在很大程度上歸功于它對可組合函數(shù)式編程范例的重視。它還關(guān)注“可微分編程”的一般概念,而不是主要關(guān)注像TensorFlow或PyTorch這樣的神經(jīng)網(wǎng)絡(luò)。盡管PyTorch和TensorFlow都可用于構(gòu)建可微物理模型而不是神經(jīng)網(wǎng)絡(luò),但JAX更容易從一開始就更適合用于科學(xué)和其他編程任務(wù)的靈活可微編程。盡管之前曾花費(fèi)大量時間構(gòu)建基于TensorFlow的工具(如Sonnet),但JAX產(chǎn)品足以促使DeepMind開始大量采用和開發(fā)。

作為DeepMind為深度學(xué)習(xí)研究開發(fā)基于JAX的生態(tài)系統(tǒng)的努力的一部分,他們開發(fā)了一個名為Jraph的圖學(xué)習(xí)庫。

與這一列表中的其他一些庫不同,Jraph是一個輕量級和簡約的圖學(xué)習(xí)庫,它通常不規(guī)定特定的使用方式。Jraph繼承了其前身Graph Nets的一些設(shè)計模式,它使用TensorFlow和Sonnet構(gòu)建。也就是Jraph使用與Graph Nets相同的Graphs Tuple概念,它是一種包含描述節(jié)點(diǎn)、邊和邊方向的信息的數(shù)據(jù)結(jié)構(gòu)。Jraph處理的另一個特性為使用掩碼和填充處理可變結(jié)構(gòu)圖提供了特殊的便利。對于這一列表中的大多數(shù)其他Python庫,這不是一個問題,但由于在JAX中使用即時編譯,這是必要的。這可以確保在JAX中使用圖形,并不意味著放棄JAX在GPU和CPU硬件上提供的執(zhí)行加速。

4.Spektral

Spektral是一個基于Tensorflow 2和Keras的圖形深度學(xué)習(xí)庫,其徽標(biāo)明顯受到Pac-Man ghost villains的啟發(fā)。如果開發(fā)人員打算使用基于TensorFlow的庫來滿足其圖形深度學(xué)習(xí)需求,那么Spektral可能是最佳選擇。它旨在易于使用和靈活,同時保留盡可能接近熟悉的Keras API的用法。這意味著開發(fā)人員甚至可以使用方便的model.fit()方法訓(xùn)練模型,只要提供Spetkral數(shù)據(jù)加載器來處理定義圖形的TensorFlow友好稀疏矩陣的形成。然而,Spektral的易用性需要權(quán)衡,與其他主要庫DGL和PyTorchGeometric相比,大多數(shù)任務(wù)的訓(xùn)練速度明顯較慢。

Spektral已被廣泛采用,如果開發(fā)人員想使用TensorFlow構(gòu)建圖形模型,它可能是一個有吸引力的選擇。它可能比Deepmind的GraphNets庫得到更好的支持,但從各方面來看,它正在逐步淘汰,取而代之的是基于JAX的Jraph。Spektral是在Apache2.0開源許可下發(fā)布的,并有一個活躍的問題板,它將定期將請求整合在一起,這使得這個庫成為一個吸引人的深度學(xué)習(xí)庫。

3.Graph Nets

Graph Nets是Deepmind的另一個圖形深度學(xué)習(xí)庫。它建立在TensorFlow和Sonnet(另一個DeepMind庫)之上,可能很快就會被前面描述的基于JAX的Jraph所取代。Graph Nets需要TensorFlow1,盡管它只有大約3年的使用歷史,但感覺有些過時。它在GitHub上擁有令人印象深刻的737個Fork和近5,000個Star,并且與來自Google/DeepMind的大多數(shù)其他庫一樣,在Apache2.0下獲得許可。Graph Nets起源于Jraph使用的Graphs Tuple數(shù)據(jù)結(jié)構(gòu)。

盡管Graph Nets在GitHub上似乎很受歡迎,但它可能沒有這一列表中的其他庫那么吸引人,除非開發(fā)人員正在處理已經(jīng)大量使用該庫的現(xiàn)有代碼庫。對于使用TensorFlow的新項目來說,Spektral和DGL可能是更好的選擇,因為它們是用更新的技術(shù)構(gòu)建的,并且可能會在幾年內(nèi)繼續(xù)獲得支持。

2.Deep Graph Library (DGL)

DGL與微軟的PTGNN或谷歌/DeepMind的Jraph和GraphNets等大型科技公司無關(guān),而是一個名稱為“分布式深度機(jī)器學(xué)習(xí)社區(qū)”的一些深度學(xué)習(xí)愛好者的產(chǎn)品。它在GitHub上擁有超過100名貢獻(xiàn)者、1500次以上的提交和7,000多個Star。DGL在這一列表中也是獨(dú)一無二的,它提供了靈活的后端選擇。該模型可以運(yùn)行PyTorch、TensorFlow或MXNet,同時提供與驅(qū)動實驗的體驗大致相似的體驗。它是這一列表中仍在積極開發(fā)中的壽命較長的庫之一,其第一次提交可追溯到2018年4月。DGL最近被用來構(gòu)建SE(3)轉(zhuǎn)換器,這是一種強(qiáng)大的圖形轉(zhuǎn)換器,具有旋轉(zhuǎn)和平移等方差可能是AlphaFold2的構(gòu)建塊或靈感。該模型是已經(jīng)令人印象深刻的AlphaFold的繼承者,是DeepMind在2020年CASP14蛋白質(zhì)結(jié)構(gòu)預(yù)測挑戰(zhàn)賽上令人印象深刻的獲獎表現(xiàn)背后的明星。這一事件促使一些新聞機(jī)構(gòu)宣布AlphaFold2是第一個解決重大科學(xué)挑戰(zhàn)的人工智能項目。

DGL是圍繞Gilmer等人描述的神經(jīng)消息傳遞范式在2017年構(gòu)建的。它提供了一個靈活的框架,涵蓋了用于構(gòu)建圖形神經(jīng)網(wǎng)絡(luò)的大多數(shù)類型的圖層。通過閱讀代碼存儲庫和文檔,就會注意到DGL是一個龐大的項目。這也意味著有很多(將近200個)未解決的問題,對于希望為具有重大影響的圖形深度學(xué)習(xí)項目做出貢獻(xiàn)的人來說,這是一個成熟的機(jī)會。DGL用于許多專門的應(yīng)用程序,在一定程度上已經(jīng)在它的基礎(chǔ)上構(gòu)建了幾個額外的庫。DGL-LifeSci是一個專為應(yīng)用于化學(xué)和生物信息學(xué)的深度學(xué)習(xí)圖而構(gòu)建的庫,而DGL-KE是為處理知識圖嵌入而構(gòu)建的。這兩個額外的庫都是由AWS實驗室開發(fā)的。

1. PyTorch Geometric

在這一列表中名列榜首的庫就是PyTorch Geometric。PyTorch Geometric或PyG是一個成熟的幾何深度學(xué)習(xí)庫,擁有1萬多個stars和4400次提交,其中大部分都是一名才華橫溢的博士生Ru Stu1s推出的。PyG提供了一個實現(xiàn)圖神經(jīng)網(wǎng)絡(luò)層列表,它不僅可以非??焖俚剡\(yùn)行深度圖網(wǎng)絡(luò),而且PyG還可以用于其他類型的幾何深度學(xué)習(xí),例如點(diǎn)云和基于網(wǎng)格的模型。

PyG有一個精心編寫的示例教程介紹,自從2017年以來一直在開發(fā),它非常完善,并得到了用戶社區(qū)和140多個貢獻(xiàn)者的大力支持。對于以前使用過PyTorch的任何人來說,使用PyG是非常熟悉的,最明顯的區(qū)別是數(shù)據(jù)輸入的一些差異。與通常的forward(x)編程模式不同,開發(fā)人員將習(xí)慣于使用forward(batch),其中“batch”是包含描述圖形特性和連接的所有信息的數(shù)據(jù)結(jié)構(gòu)。

對于可以自由選擇庫的新項目,PyTorchGeometric很難被擊敗。

以下是這些用于圖形深度學(xué)習(xí)的開源代碼庫之間的比較: 

 

如何選擇深度學(xué)習(xí)庫

在許多情況下,開發(fā)人員對深度圖學(xué)習(xí)庫的選擇將受到自己、雇主或指導(dǎo)人員之前選擇的深度學(xué)習(xí)庫的嚴(yán)重影響。例如,如果喜歡KerasAPI和TensorFlow,或者需要與預(yù)先存在的代碼庫保持一致的依賴關(guān)系,例如,Spektral可能是適合的庫。在此不建議使用DeepMind的GraphNets和TensorFlow1啟動新項目,但該庫仍然會偶爾更新,并且可能是支持遺留項目的合理選擇。

如果開發(fā)人員希望從頭開始,可能有幾個誘人的選擇。如果認(rèn)為Julia Programming的深思熟慮的生產(chǎn)力+執(zhí)行速度優(yōu)先是機(jī)器學(xué)習(xí)和科學(xué)編程的未來,那么GeometricFlux.jl將面臨令人興奮的前景。如果對函數(shù)式編程范式感興趣,并希望保留即時編譯(如Julia)的一些速度優(yōu)勢,那么使用基于JAX的Jraph是一個更具吸引力的選擇。最后,如果想要一個處于相對成熟和成熟的開發(fā)狀態(tài)的快速、功能強(qiáng)大的庫,那么PyTorchGeometric將是一個理想選擇。

原文標(biāo)題:7 Open Source Libraries for Deep Learning Graphs,作者:Kevin Vu

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2024-11-22 15:59:00

2017-10-26 13:54:49

深度學(xué)習(xí)SparkMMLSpark

2023-11-13 22:33:47

低代碼無代碼

2021-11-09 10:02:37

Linux工具開源繪圖

2015-06-11 13:34:54

編程編程階段

2022-04-08 10:22:21

云原生Kubernetes

2022-07-05 08:00:00

云原生Java開發(fā)

2023-01-31 08:00:00

開源開發(fā)軟件

2021-09-22 12:45:47

Python數(shù)據(jù)分析

2023-06-04 17:13:26

.NET開發(fā)應(yīng)用程序

2018-12-06 10:17:10

2023-01-24 17:03:13

強(qiáng)化學(xué)習(xí)算法機(jī)器人人工智能

2022-03-10 09:28:24

Kubernete云原生

2024-08-30 09:13:56

2022-12-25 16:44:40

開源工具Github

2023-04-19 08:14:24

2022-12-27 15:09:30

2023-04-09 15:57:39

時間序列分析Python開發(fā)

2023-10-08 09:52:55

2022-05-19 15:51:35

開源筆記
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號