什么是 GNN/圖神經(jīng)網(wǎng)絡(luò)?
圖神經(jīng)網(wǎng)絡(luò)是一類 ”用于處理可以表示為圖的數(shù)據(jù)“ 的人工神經(jīng)網(wǎng)絡(luò)。我們通常能看到的例子有: 社交網(wǎng)絡(luò)的商品的推薦,蛋白質(zhì)三維結(jié)構(gòu)的預(yù)測和芯片設(shè)計優(yōu)化等等。到目前為止,之所以圖神經(jīng)網(wǎng)絡(luò)能夠攻克了這些涉及領(lǐng)域比較核心的問題,包括其涉及的理論知識, 模型設(shè)計,benchmark 數(shù)據(jù)集效果驗證等等一系列工作, 都能反映出了它結(jié)合圖數(shù)據(jù)表達的能力和神經(jīng)網(wǎng)絡(luò)模型泛化的能力。
那我們又要基于什么樣的前提,在 GNN 的范疇開始我們自己的探索和應(yīng)用呢? 我希望通過對兩個“假設(shè)”的描述 ,讓大家更了解這個前沿技術(shù)背后的動機。
第一個假設(shè):關(guān)于數(shù)據(jù)樣本的分布、頻率和空間位置表示
6 年前,谷歌 AI 趣味實驗的一個展示平臺上 有一個機器學(xué)習任務(wù)非常吸引我。他們當時的目標是通過?叫聲分辨出?的種類。最左邊所有的小圖片,每一個代表北美一種?類叫聲的聲紋信息, 右邊則是我們找到的對應(yīng)的“鴛鴦”的照片。這個機器學(xué)習可視化項目,通過不使用標記訓(xùn)練的 t-SNE,將高維聲紋信息轉(zhuǎn)換為二維的空間位置來展示數(shù)據(jù) 并且驗證了相似的種群有相似的叫聲這個假設(shè)。
放在現(xiàn)在來看,我們有理由相信。當時研究人員的夢想 是可以用深度學(xué)習的模型去解決的, ?類有成千上萬種,一種?的不同叫聲也有很大的差別, 只要我們有大量的數(shù)據(jù)樣本和標簽可以去做訓(xùn)練,這個事情就是可行的。
我們知道深度學(xué)習,能解決這樣直觀但又復(fù)雜的事情, 恰恰是因為我們認定了這樣的假設(shè); 并且著眼于如何處理大量的數(shù)據(jù),使用更深層、更精妙的神經(jīng)網(wǎng)絡(luò)模型設(shè)計,來自動挖掘出數(shù)據(jù)的規(guī)律,并最終給出判斷。
假設(shè)二:一個種群有一個大致的活動范圍
假如我們把問題換做:我想知道在哪一個城市可以聽到這樣的?叫聲呢? 解答這個問題的方法是使用圖算法。我們可以看到數(shù)據(jù)中記錄的位置信息,屬于地理位置的不同區(qū)塊; 根據(jù)數(shù)據(jù)采集的密度決定區(qū)塊的大小,把小的區(qū)塊與種群關(guān)聯(lián), 再用社群發(fā)現(xiàn)的算法,得出不同物種的空間分布。
這個生物地理的問題,其實給定另一個假設(shè),即一個種群有一個大致的活動范圍。只不過這樣的假設(shè)比之前樣本特征分布的假設(shè),更加容易以一種顯式的方式體現(xiàn)。趨向于普遍事實的“假設(shè)”是可以被作為數(shù)據(jù)存儲下來的, 比如我們常說的知識圖譜中的三元組關(guān)系是對某一個事實關(guān)系的描述一樣。
圖神經(jīng)網(wǎng)絡(luò)
而圖神經(jīng)網(wǎng)絡(luò)模型,恰恰是在這兩個前提假設(shè)的融合之上建立的。如果我們也能夠確信,我們手上的數(shù)據(jù)蘊含了這樣的假設(shè), 即樣本特征分布的假設(shè)與邏輯關(guān)系的假設(shè), 我們一定可以去嘗試,并且有信心能構(gòu)建出有效的 GNN 模型。
回到今天的主題,當我們有數(shù)據(jù)集需要做模型訓(xùn)練時,我們是如何對其進行訓(xùn)練集、驗證集測試集的切分? 我們又是怎樣對大到無法放入內(nèi)存的數(shù)據(jù)進行分批次的訓(xùn)練?
如果放在 GNN 的場景下,我們需要考慮的是,如何切分圖數(shù)據(jù)集,又如何為 GNN 模型分批加載子圖。要知道在研究和應(yīng)用上,GNN 是機器學(xué)習領(lǐng)域最火熱的方向,各式各樣的理論和方法層出不窮。有一點可以確信的是,無論從理論還是工程方面,這兩個步驟并沒有太高深,卻也是 GNN 項目中比較重要的部分。
我也會在最后通過 TigerGraph 云實例,演示我們的圖機器學(xué)習工作臺,并在一個運用 GAT 模型進行反欺詐檢測的 Demo 中,展示這兩個步驟的作用。
圖數(shù)據(jù)切分
首先,我們來討論如何對圖數(shù)據(jù)進行切分:
對于有監(jiān)督機器學(xué)習模型,我們對樣本的變量都會有一個獨立同分布的假設(shè)。通過這個假設(shè)我們可以隨機的按比例去切分訓(xùn)練集和驗證集,用于調(diào)整模型的擬合,并在測試集上觀察泛化的效果?;蛘呖梢园凑諘r間發(fā)生的先后順序去切分, 因為我們希望新的數(shù)據(jù)的特征同樣能被模型識別到。然而通常來說,一定會遇到樣本的分布發(fā)生變化; 樣本存在分組; 有標記樣本數(shù)量的平衡性等現(xiàn)象。
按照統(tǒng)計經(jīng)驗的方式切分,模型會在真實的數(shù)據(jù)上發(fā)生變化,影響了實際業(yè)務(wù)的判斷。而這樣的現(xiàn)象,當我們用圖的思維去構(gòu)建數(shù)據(jù)時,會更加顯而易?的發(fā)現(xiàn)。可以假設(shè)一個生活中的例子來構(gòu)建一個圖機器學(xué)習任務(wù):
我們希望通過人群訪問地理位置的記錄去預(yù)測場所的標簽。這似乎與之前的種群分類的問題很像, 但顯然我們不能直接通過之前的圖算法給出結(jié)論: 因為標簽本身是有含義的,并且每個地點可能有多個標簽。
那如果我們?yōu)閭鹘y(tǒng)機器學(xué)習的模型提供圖特征呢? 比如我們把【人群】的特征,歸并到【地理位置】中去, 我們會在切分數(shù)據(jù)的時候發(fā)現(xiàn)一系列的問題??赡芪覀儠l(fā)現(xiàn)訓(xùn)練集中【人群】的多少,訪問時間段等信息與【場所】沒有太強的相關(guān)性 ;或者在驗證集上【地理位置】的特征的分布發(fā)生了偏移; 更重要的,我們?nèi)绾伪WC測試集上新的數(shù)據(jù),【地理位置】更新的生命周期,涉及到的【訪問】關(guān)系 不會顯著減少? 我們嘗試各種方法:延?樣本的時間跨度、在數(shù)據(jù)集上做交叉驗證,縮短模型上線后的運行周期,甚至嘗試剔除【人群】相關(guān)的變量。
這顯然不是我們希望看到的,在【人群】這類特征上來看,按時間切分顯然是不合適的。
我們是否應(yīng)該重新考慮修改圖模型本身呢? 答案是肯定的,我們可以嘗試把人群的特征作為【地理位置】間【轉(zhuǎn)移】的關(guān)系進行建模。這樣,我們的選擇就變多了:我們可以首先得到一個同構(gòu)圖,人群移動的信息就被包含在了地點之間【轉(zhuǎn)移】的關(guān)系里面,就像種群遷移一樣。我們還可以將轉(zhuǎn)移所需的時間,作為距離和關(guān)聯(lián)性的特征,也放在邊關(guān)系里。試想騎手們在趕單子和上了一天班的你坐地鐵回家,一定會產(chǎn)生不同的分布。甚至,我們還可以建立多條關(guān)系比如所有早高峰,午餐高峰等不同時間段的統(tǒng)計等等。這樣構(gòu)成的網(wǎng)絡(luò),就包含了【人群】帶來的真正有用的信息。
回到剛剛的切分數(shù)據(jù)的問題本身,我們可以思考一下為什么需要【地理位置】的標簽?zāi)? 其中一個最直接的原因是,大部分的地理位置標簽我們是沒法直接拿到的,并且也正是我們希望模型給出預(yù)測的。
比如開辟一個新地塊的【地理位置】標簽,或者說 【人群】活動較少的地方這些【地理位置】的標簽,就不會像大家常去的有 POI 的地方容易拿到標簽。在這種情況下,按照地理位置的”活躍度“切分數(shù)據(jù),恰恰是最合理的。
那么對于可以表示為圖的數(shù)據(jù),還有哪些切分方式呢?
我們可以看到 OGB這個專?為GNN模型準備的公開數(shù)據(jù)集,規(guī)范了一些切分方式。之前提到的人群遷移的這個例子,就是借鑒了這個數(shù)據(jù)集中【產(chǎn)品分類任務(wù)】的構(gòu)建關(guān)系和切分的方法。當然從實際出發(fā),我們也可以用不同的方式切分數(shù)據(jù)集,讓他們同時落在一張圖或者完全不相關(guān)的圖上。這些切分方法,其實并沒有在意樣本的數(shù)據(jù)分布是否均勻和時間發(fā)生的順序,而是根據(jù)實際情況出發(fā),在建立關(guān)聯(lián)關(guān)系的過程中,顯示的把邏輯表述出來,數(shù)據(jù)本身的變化和無法及時獲取的問題得以規(guī)避。最終,我們把發(fā)現(xiàn)分布的事交給各式各樣的圖神經(jīng)網(wǎng)絡(luò)模型,發(fā)揮他們不同的泛化能力。
總結(jié)一下,在圖上做機器學(xué)習的任務(wù),“切分數(shù)據(jù)” 這一步驟的目的,并非為了讓模型更容易訓(xùn)練, 而是讓模型訓(xùn)練的邏輯假設(shè)更加清晰,樣本主體的特征保持穩(wěn)定,模型結(jié)果更容易驗證,并且最終投入生產(chǎn)應(yīng)用。
模型數(shù)據(jù)載入
接下來,我們來看一下在訓(xùn)練階段 GNN模型對我們的數(shù)據(jù)載入有哪些要求。
從基本的模塊來看,圖神經(jīng)網(wǎng)絡(luò)模型和其他神經(jīng)網(wǎng)絡(luò)模型一樣可以堆疊層數(shù),但通常會有一個置換等變層。這一層的目標,就是收集模型訓(xùn)練樣本的鄰居,把他們的信息傳遞過來。根據(jù)模型的不同,可能是單跳的鄰居,也可能是多跳的鄰居。聚合時,可以用固定權(quán)重去聚合這些信息,也可以是一個參數(shù)的形式來學(xué)習鄰居之間的重要程度。
從這個過程來看,圖神經(jīng)網(wǎng)絡(luò),和其它一般的神經(jīng)網(wǎng)絡(luò)不一樣的是: 如果我們的輸入是圖片、聲音和文字這樣的高維數(shù)據(jù),我們可以想方設(shè)法做一些預(yù)處理來減少輸入維度。而對于組成網(wǎng)絡(luò)的數(shù)據(jù)而言,因為我們的初衷是希望盡可能地學(xué)習到圖拓撲結(jié)構(gòu)。我們很難在模型以外預(yù)處理他們(雖然也是有辦法的)。
這就導(dǎo)致像 Pytorch / Tensorflow 這樣的框架需要去做除了計算以外的事情,比如特征索引和鄰居索引的工作。
從數(shù)據(jù)集的?度來看,我們必須正視拓撲結(jié)構(gòu)對 GNN 模型架構(gòu)的影響。大批量數(shù)據(jù)集本身,是沒有辦法放入一臺機器的內(nèi)存中的。對于深度學(xué)習,分批次的載入數(shù)據(jù)到更快的計算單元的內(nèi)存(GPU), 是讓深度學(xué)習模型的訓(xùn)練擴展到大量數(shù)據(jù)至關(guān)重要的步驟。而大型的圖數(shù)據(jù)集,尤其是密度很高的圖數(shù)據(jù)集, 我們還需要額外的處理方式:比如通過鄰居采樣的方式去規(guī)避鄰域爆炸的問題。
當然,不是將數(shù)據(jù)進行分批就一勞永逸了。我們?nèi)孕枰紤]數(shù)據(jù)傳輸效率問題。舉一個 PyTorch 的數(shù)據(jù)載入模塊 DataLoader 為例,這個圖表模擬了模型在進行分批訓(xùn)練時,當載入速度(比如2秒)和批次消耗速度(比如每個批次的正向和反向傳播只需要 100 毫秒) 相差過大時,整體的訓(xùn)練速度會比平衡時慢兩倍多。
如果說,我的載入速度能降到700 毫秒, 但是我開了 7 個 worker,這樣的話就可以把消耗和載入速度平衡了。我們還要考慮每個批次的載入速度差異,差異過大,即使有很多worker 和管道,也會降低訓(xùn)練的速度。這樣看來,在關(guān)聯(lián)信息的圖上做這樣的控制,保證批次數(shù)據(jù)的載入速度和穩(wěn)定性也是十分重要的。
從架構(gòu)層面看,我們會發(fā)現(xiàn)特征索引和圖的索引是 GNN 模型中不可避免的工作。
我們看到 PyG(基于PyTorch的圖神經(jīng)網(wǎng)絡(luò)架構(gòu) ) 在對 GNN 的實例描述中,提及了這樣幾點發(fā)現(xiàn):
● 獲取具有足夠 CPU DRAM 來同時存儲圖形和特征,是非常具有挑戰(zhàn)性的;
● 使用數(shù)據(jù)并行性進行訓(xùn)練,需要在每個計算節(jié)點中復(fù)制圖特征和圖拓撲;
● 圖和特征很容易就超過了單臺機器的內(nèi)存。
因此他們額外抽象出了 FeatureStore, GraphStore 這樣遠程的抽象層,由開發(fā)者決定如何連接提供有效的圖特征采樣的外部存儲。作為同時具有擴展性和計算性能的圖數(shù)據(jù)庫,我們也明白這是TigerGraph需要出力的地方, 并同時達到一個實時的、安全的、穩(wěn)定的、更方便獲取特征的平臺,加速整個 GNN 項目的演化和上線。
審核編輯:劉清
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100778 -
機器學(xué)習
+關(guān)注
關(guān)注
66文章
8418瀏覽量
132655 -
GNN
+關(guān)注
關(guān)注
1文章
31瀏覽量
6344
原文標題:GNN課程詳解:圖數(shù)據(jù)切分與模型數(shù)據(jù)載入
文章出處:【微信號:TigerGraph,微信公眾號:TigerGraph】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論