五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

圖學(xué)習(xí)項目合集&數(shù)據(jù)集分享&技術(shù)歸納業(yè)務(wù)落地技巧

2022-12-03 21:09 作者:汀丶人工智能  | 我要投稿

圖學(xué)習(xí)項目合集&數(shù)據(jù)集分享&技術(shù)歸納業(yè)務(wù)落地技巧[系列十]

1.PGL圖學(xué)習(xí)項目合集

**1.1 關(guān)于圖計算&圖學(xué)習(xí)的基礎(chǔ)知識概覽:前置知識點學(xué)習(xí)(PGL)系列一]** :[https://aistudio.baidu.com/aistudio/projectdetail/4982973?contributionType=1

本項目對圖基本概念、關(guān)鍵技術(shù)(表示方法、存儲方式、經(jīng)典算法),應(yīng)用等都進(jìn)行詳細(xì)講解,并在最后用程序?qū)崿F(xiàn)各類算法方便大家更好的理解。當(dāng)然之后所有圖計算相關(guān)都是為了知識圖譜構(gòu)建的前置條件

1.2 圖機器學(xué)習(xí)(GML)&圖神經(jīng)網(wǎng)絡(luò)(GNN)原理和代碼實現(xiàn)(前置學(xué)習(xí)系列二) https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1

現(xiàn)在已經(jīng)覆蓋了圖的介紹,圖的主要類型,不同的圖算法,在Python中使用Networkx來實現(xiàn)它們,以及用于節(jié)點標(biāo)記,鏈接預(yù)測和圖嵌入的圖學(xué)習(xí)技術(shù),最后講了GNN分類應(yīng)用以及未來發(fā)展方向!

1.3 圖學(xué)習(xí)初探Paddle Graph Learning 構(gòu)建屬于自己的圖【系列三】 https://aistudio.baidu.com/aistudio/projectdetail/5000517?contributionType=1

本項目主要講解了圖學(xué)習(xí)的基本概念、圖的應(yīng)用場景、以及圖算法,最后介紹了PGL圖學(xué)習(xí)框架并給出demo實踐,過程中把老項目demo修正版本兼容問題等小坑,并在最新版本運行便于后續(xù)同學(xué)更有體驗感

1.4 PGL圖學(xué)習(xí)之圖游走類node2vec、deepwalk模型[系列四] https://aistudio.baidu.com/aistudio/projectdetail/5002782?contributionType=1

介紹了圖嵌入原理以及了圖嵌入中的DeepWalk、node2vec算法,利用pgl對DeepWalk、node2vec進(jìn)行了實現(xiàn),并給出了多個框架版本的demo滿足個性化需求。

  • 圖學(xué)習(xí)【參考資料1】詞向量word2vec https://aistudio.baidu.com/aistudio/projectdetail/5009409?contributionType=1

介紹詞向量word2evc概念,及CBOW和Skip-gram的算法實現(xiàn)。

  • 圖學(xué)習(xí)【參考資料2】-知識補充與node2vec代碼注解https://aistudio.baidu.com/aistudio/projectdetail/5012408?contributionType=1

主要引入基本的同構(gòu)圖、異構(gòu)圖知識以及基本概念;同時對deepWalk代碼的注解以及node2vec、word2vec的說明總結(jié);(以及作業(yè)代碼注解)

1.5 PGL圖學(xué)習(xí)之圖游走類metapath2vec模型[系列五] https://aistudio.baidu.com/aistudio/projectdetail/5009827?contributionType=1

介紹了異質(zhì)圖,利用pgl對metapath2vec以及metapath2vec變種算法進(jìn)行了實現(xiàn),同時講解實現(xiàn)圖分布式引擎訓(xùn)練,并給出了多個框架版本的demo滿足個性化需求。

1.6 PGL圖學(xué)習(xí)之圖神經(jīng)網(wǎng)絡(luò)GNN模型GCN、GAT[系列六] [https://aistudio.baidu.com/aistudio/projectdetail/5054122?contributionType=1](https://aistudio.baidu.com/aistudio/projectdetail/5054122?c ontributionType=1)

本次項目講解了圖神經(jīng)網(wǎng)絡(luò)的原理并對GCN、GAT實現(xiàn)方式進(jìn)行講解,最后基于PGL實現(xiàn)了兩個算法在數(shù)據(jù)集Cora、Pubmed、Citeseer的表現(xiàn),在引文網(wǎng)絡(luò)基準(zhǔn)測試中達(dá)到了與論文同等水平的指標(biāo)。

**1.7 PGL圖學(xué)習(xí)之圖神經(jīng)網(wǎng)絡(luò)GraphSAGE、GIN圖采樣算法系列七]** [https://aistudio.baidu.com/aistudio/projectdetail/5061984?contributionType=1

本項目主要講解了GraphSage、PinSage、GIN算法的原理和實踐, 并在多個數(shù)據(jù)集上進(jìn)行仿真實驗,基于PGl實現(xiàn)原論文復(fù)現(xiàn)和對比,也從多個角度探討當(dāng)前算法的異同以及在工業(yè)落地的技巧等。

1.8 PGL圖學(xué)習(xí)之圖神經(jīng)網(wǎng)絡(luò)ERNIESage、UniMP進(jìn)階模型[系列八] https://aistudio.baidu.com/aistudio/projectdetail/5096910?contributionType=1

ErnieSage 可以同時建模文本語義與圖結(jié)構(gòu)信息,有效提升 Text Graph 的應(yīng)用效果;UniMP 在概念上統(tǒng)一了特征傳播和標(biāo)簽傳播, 在OGB取得了優(yōu)異的半監(jiān)督分類結(jié)果。

  • PGL圖學(xué)習(xí)之ERNIESage算法實現(xiàn)(1.8x版本)【系列八】 https://aistudio.baidu.com/aistudio/projectdetail/5097085?contributionType=1

ERNIESage運行實例介紹(1.8x版本),提供多個版本pgl代碼實現(xiàn)

1.9 PGL圖學(xué)習(xí)之項目實踐(UniMP算法實現(xiàn)論文節(jié)點分類、新冠疫苗項目)[系列九] https://aistudio.baidu.com/aistudio/projectdetail/5100049?contributionType=1

本項目借鑒了百度高研黃正杰大佬對圖神經(jīng)網(wǎng)絡(luò)技術(shù)分析以及圖算法在業(yè)務(wù)側(cè)應(yīng)用落地;實現(xiàn)了論文節(jié)點分類和新冠疫苗項目的實踐幫助大家更好理解學(xué)習(xí)圖的魅力。

  • PGL圖學(xué)習(xí)之基于GNN模型新冠疫苗任務(wù)[系列九] https://aistudio.baidu.com/aistudio/projectdetail/5123296?contributionType=1

圖神經(jīng)網(wǎng)絡(luò)7日打卡營的新冠疫苗項目拔高實戰(zhàn)

  • PGL圖學(xué)習(xí)之基于UniMP算法的論文引用網(wǎng)絡(luò)節(jié)點分類任務(wù)[系列九] https://aistudio.baidu.com/aistudio/projectdetail/5116458?contributionType=1

基于UniMP算法的論文引用網(wǎng)絡(luò)節(jié)點分類,在調(diào)通UniMP之后,后續(xù)嘗試的技巧對于其精度的提升效力微乎其微,所以不得不再次感嘆百度PGL團隊的強大!

??持續(xù)更新中???

2.圖網(wǎng)絡(luò)開放數(shù)據(jù)集

按照任務(wù)分類,可以把數(shù)據(jù)集分成以下幾類:

  • 引文網(wǎng)絡(luò)

  • 生物化學(xué)圖

  • 社交網(wǎng)絡(luò)

  • 知識圖譜

  • 開源數(shù)據(jù)集倉庫

2.1 引文網(wǎng)絡(luò)

1. Pubmed/Cora/Citeseer|

這三個數(shù)據(jù)集均來自于:《Collective classification in network data》

引文網(wǎng)絡(luò),節(jié)點為論文、邊為論文間的引用關(guān)系。這三個數(shù)據(jù)集通常用于鏈路預(yù)測或節(jié)點分類。

數(shù)據(jù)下載鏈接:

https://aistudio.baidu.com/aistudio/datasetdetail/177587

https://aistudio.baidu.com/aistudio/datasetdetail/177589

https://aistudio.baidu.com/aistudio/datasetdetail/177591

INQS 實驗室使用的數(shù)據(jù)集和所有展示的關(guān)系結(jié)構(gòu),數(shù)據(jù)集鏈接:https://linqs.org/datasets/

2. DBLP

DBLP是大型的計算機類文獻(xiàn)索引庫。原始的DBLP只是XML格式,清華唐杰教授的一篇論文將其進(jìn)行處理并獲得引文網(wǎng)絡(luò)數(shù)據(jù)集。到目前為止已經(jīng)發(fā)展到了第13個版本。

DBLP引用網(wǎng)絡(luò)論文: 《ArnetMiner: Extraction and Mining of Academic Social Networks》

原始數(shù)據(jù)可以從這里獲得: https://dblp.uni-trier.de/xml/

如果是想找處理過的DBLP引文網(wǎng)絡(luò)數(shù)據(jù)集,可以從這里獲得: https://www.aminer.cn/citation

2.2 生物化學(xué)圖

1. PPI

蛋白質(zhì)-蛋白質(zhì)相互作用(protein-protein interaction, PPI)是指兩個或兩個以上的蛋白質(zhì)分子通過非共價鍵形成 蛋白質(zhì)復(fù)合體(protein complex)的過程。

PPI數(shù)據(jù)集中共有24張圖,其中訓(xùn)練用20張,驗證/測試分別2張。

節(jié)點最多可以有121種標(biāo)簽(比如蛋白質(zhì)的一些性質(zhì)、所處位置等)。每個節(jié)點有50個特征,包含定位基因集合、特征基因集合以及免疫特征。

PPI論文: 《Predicting multicellular function through multi-layer tissue networks》 PPI下載鏈接: http://snap.stanford.edu/graph

2. NCI-1

NCI-1是關(guān)于化學(xué)分子和化合物的數(shù)據(jù)集,節(jié)點代表原子,邊代表化學(xué)鍵。NCI-1包含4100個化合物,任務(wù)是判斷該化合物是否有阻礙癌細(xì)胞增長的性質(zhì)。

NCI-1論文: 《Comparison of descriptor spaces for chemical compound retrieval and classi?cation》

Graph Kernel Datasets提供下載

3. MUTAG

MUTAG數(shù)據(jù)集包含188個硝基化合物,標(biāo)簽是判斷化合物是芳香族還是雜芳族。

MUTAG論文: 《Structure-activity relationship of mutagenic aromatic and heteroaromatic nitro compounds. correlation with molecular orbital energies and hydrophobicity》

https://aistudio.baidu.com/aistudio/datasetdetail/177591

4. D&D/PROTEIN

D&D在蛋白質(zhì)數(shù)據(jù)庫的非冗余子集中抽取了了1178個高分辨率蛋白質(zhì),使用簡單的特征,如二次結(jié)構(gòu)含量、氨基酸傾向、表面性質(zhì)和配體;其中節(jié)點是氨基酸,如果兩個節(jié)點之間的距離少于6埃(Angstroms),則用一條邊連接。

PROTEIN則是另一個蛋白質(zhì)網(wǎng)絡(luò)。任務(wù)是判斷這類分子是否酶類。

D&D論文: 《Distinguishing enzyme structures from non-enzymes without alignments》 D&D下載鏈接: https://github.com/snap-stanford/GraphRNN/tree/master/dataset/DD

PROTEIN論文: 《Protein function prediction via graph kernels》

Graph Kernel Datasets提供下載

5. PTC

PTC全稱是預(yù)測毒理學(xué)挑戰(zhàn),用來發(fā)展先進(jìn)的SAR技術(shù)預(yù)測毒理學(xué)模型。這個數(shù)據(jù)集包含了針對嚙齒動物的致癌性標(biāo)記的化合物。

根據(jù)實驗的嚙齒動物種類,一共有4個數(shù)據(jù)集:

PTCFM(雌性小鼠) PTCFR(雌性大鼠) PTCMM(雄性小鼠) PTCMR(雄性大鼠)

PTC論文: 《Statistical evaluation of the predictive toxicology challenge 2000-2001》

Graph Kernel Datasets提供下載

6. QM9

這個數(shù)據(jù)集有133,885個有機分子,包含幾何、能量、電子等13個特征,最多有9個非氫原子(重原子)。來自GDB-17數(shù)據(jù)庫。

QM9論文: 《Quantum chemistry structures and properties of 134 kilo molecules》 QM9下載鏈接: http://quantum-machine.org/datasets/

7. Alchemy

Alchemy包含119,487個有機分子,其有12個量子力學(xué)特征(quantum mechanical properties),最多14個重原子(heavy atoms),從GDB MedChem數(shù)據(jù)庫中取樣。擴展了現(xiàn)有分子數(shù)據(jù)集多樣性和容量。

Alchemy論文: 《Alchemy: A quantum chemistry dataset for benchmarking ai models》 Alchemy下載鏈接: https://alchemy.tencent.com/

2.3 社交網(wǎng)絡(luò)

1. Reddit

Reddit數(shù)據(jù)集是由來自Reddit論壇的帖子組成,如果兩個帖子被同一人評論,那么在構(gòu)圖的時候,就認(rèn)為這兩個帖子是相關(guān)聯(lián)的,標(biāo)簽是每個帖子對應(yīng)的社區(qū)分類。

Reddit論文:《Inductive representation learning on large graphs》

Reddit下載鏈接:

https://aistudio.baidu.com/aistudio/datasetdetail/177810

https://github.com/linanqiu/reddit-dataset

BlogCatalog BlogCatalog數(shù)據(jù)集是一個社會關(guān)系網(wǎng)絡(luò),圖是由博主及其社會關(guān)系(比如好友)組成,標(biāo)簽是博主的興趣愛好。

2.BlogCatalog論文:

《Relational learning via latent social dimensions》BlogCatalog下載鏈接: http://socialcomputing.asu.edu

2.4 知識圖譜

1.FB13/FB15K/FB15K237

這三個數(shù)據(jù)集是Freebase的子集。其中:

FB13:包含13種關(guān)系、75043個實體。 FB15K:包含1345種關(guān)系、14951個實體 FB15K237:包含237種關(guān)系、14951個實體

如果希望找到entity id對應(yīng)的實體數(shù)據(jù),可以通過以下渠道(并不是所有的實體都能找到):

https://developers.google.com/freebase/#freebase-wikidata-mappings http://sameas.org/

2.WN11/WN18/WN18RR

這三個是WordNet的子集:

WN11:包含11種關(guān)系、38696個實體 WN18:包含18種關(guān)系、40943個實體 WN18RR:包含11種關(guān)系、40943個實體

為了避免在評估模型時出現(xiàn)inverse relation test leakage,建議使用FB15K237/WN18RR來替代FB15K/WN18。更多建議閱讀《Convolutional 2D Knowledge Graph Embeddings》

FB15K/WN8論文: 《Translating Embeddings for Modeling Multi-relational Data》 FB13/WN11論文: 《Reasoning With Neural Tensor Networks for Knowledge Base Completion》 WN18RR論文: 《Convolutional 2D Knowledge Graph Embeddings》

以上6個知識圖譜數(shù)據(jù)集均可從這里下載: https://github.com/thunlp/OpenKE/tree/master/benchmarks

2.5 開源數(shù)據(jù)倉庫

1. Network Repository

具有交互式可視化和挖掘工具的圖數(shù)據(jù)倉庫。具有以下特點:

  • 用表格的形式展示每一個圖數(shù)據(jù)集的節(jié)點數(shù)、遍數(shù)、平均度數(shù)、最大度數(shù)等。

  • 可視化對比圖數(shù)據(jù)集之間的參數(shù)。

  • 在線GraphVis,可視化圖結(jié)構(gòu)和詳細(xì)參數(shù)。

2. Graph Kernel Datasets

圖核的基準(zhǔn)數(shù)據(jù)集。提供了一個表格,可以快速得到每個數(shù)據(jù)集的節(jié)點數(shù)量、類別數(shù)量、是否有節(jié)點/邊標(biāo)簽、節(jié)點/邊特征。

https://ls11-www.cs.tu-dortmund.de/staff/morris/graphkerneldatasets

https://chrsmrrs.github.io/datasets/

3. Relational Dataset Repository

關(guān)系機器學(xué)習(xí)的數(shù)據(jù)集集合。能夠以數(shù)據(jù)集大小、領(lǐng)域、數(shù)據(jù)類型等條件來檢索數(shù)據(jù)集。

https://relational.fit.cvut.cz

https://relational.fit.cvut.cz/search?domain%5B%5D=Industry

4. Stanford Large Network Dataset Collection

SNAP庫用于大型社交、信息網(wǎng)絡(luò)。包括:圖分類數(shù)據(jù)庫、社交網(wǎng)絡(luò)、引用網(wǎng)絡(luò)、亞馬遜網(wǎng)絡(luò)等等,非常豐富。

https://snap.stanford.edu/data/

5.Open Graph Benchmark

OGB是真實基準(zhǔn)數(shù)據(jù)集的集合,同時提供數(shù)據(jù)加載器和評估器(PyTorch)??梢宰詣酉螺d、處理和切割;完全兼容PyG和DGL。

https://ogb.stanford.edu/

這個大家就比較熟悉了,基本最先進(jìn)的圖算法都是依賴OGB的數(shù)據(jù)集驗證的。

?持續(xù)更新敬請期待~???

3.圖學(xué)習(xí)相關(guān)技術(shù)歸納

3.1 GraphSAGE為例技術(shù)歸納

  • 1. GCN和GraphSAGE區(qū)別

GCN靈活性差、為新節(jié)點產(chǎn)生embedding要求 額外的操作 ,比如“對齊”:

GCN是 直推式(transductive) 學(xué)習(xí),無法直接泛化到新加入(未見過)的節(jié)點; GraphSAGE是 歸納式(inductive) 學(xué)習(xí),可以為新節(jié)點輸出節(jié)點特征。

GCN輸出固定:

GCN輸出的是節(jié)點 唯一確定 的embedding; GraphSAGE學(xué)習(xí)的是節(jié)點和鄰接節(jié)點之間的關(guān)系,學(xué)習(xí)到的是一種映射關(guān)系 ,節(jié)點的embedding可以隨著其鄰接節(jié)點的變化而變化。

GCN很難應(yīng)用在超大圖上:

無論是拉普拉斯計算還是圖卷積過程,因為GCN其需要對 整張圖 進(jìn)行計算,所以計算量會隨著節(jié)點數(shù)的增加而遞增。 GraphSAGE通過采樣,能夠形成 minibatch 來進(jìn)行批訓(xùn)練,能用在超大圖上。

2.GraphSAGE等模型優(yōu)點:

  • 采用 歸納學(xué)習(xí) 的方式,學(xué)習(xí)鄰居節(jié)點特征關(guān)系,得到泛化性更強的embedding;

  • 采樣技術(shù),降低空間復(fù)雜度,便于構(gòu)建minibatch用于 批訓(xùn)練 ,還讓模型具有更好的泛化性;

  • 多樣的聚合函數(shù) ,對于不同的數(shù)據(jù)集/場景可以選用不同的聚合方式,使得模型更加靈活。

GraphSAGE的基本思路是:利用一個 聚合函數(shù) ,通過 采樣 和學(xué)習(xí)聚合節(jié)點的局部鄰居特征,來為節(jié)點產(chǎn)生embedding。

  • 3.跳數(shù)(hops)、搜索深度(search depth)、階數(shù)(order)有啥區(qū)別?

我們經(jīng)常聽到一階鄰居、二階鄰居,1-hops、2-hops等等,其實他們都是一個概念,就是該節(jié)點和目標(biāo)節(jié)點的路徑長度,如果路徑長度是1,那就是一階鄰接節(jié)點、1-hops node。 搜索深度其實和深度搜索的深度的概念相似,也是用路徑長度來衡量。 簡單來說,這幾個概念某種程度上是等價。 在GraphSAGE中,還有聚合層數(shù)\迭代次數(shù),比如說只考慮了一階鄰接節(jié)點,那就只有一層聚合(迭代了一次),以此類推。

  • 4.采樣有什么好處

于對計算效率的考慮,對每個節(jié)點采樣一定數(shù)量的鄰接節(jié)點作為待聚合信息的節(jié)點。

從訓(xùn)練效率考慮:通過采樣,可以得到一個 固定大小 的領(lǐng)域集,可以拼成一個batch,送到GPU中進(jìn)行批訓(xùn)練。

從復(fù)雜度角度考慮:如果沒有采樣,單個batch的內(nèi)存使用和預(yù)期運行時間是 不可預(yù)測 的;最壞的情況是,即所有的節(jié)點都是目標(biāo)節(jié)點的鄰接節(jié)點。而GraphSAGE的每個batch的空間和時間復(fù)雜度都是 固定 的其中K是指層數(shù),也就是要考慮多少階的鄰接節(jié)點,是在第i層采樣的數(shù)量。

  • 5.采樣數(shù)大于鄰接節(jié)點數(shù)怎么辦?

設(shè)采樣數(shù)量為K:若節(jié)點鄰居數(shù)少于K,則采用 有放回 的抽樣方法,直到采樣出K個節(jié)點。 若節(jié)點鄰居數(shù)大于K,則采用 無放回 的抽樣。

關(guān)于鄰居的個數(shù),文中提到,即兩次擴展的鄰居數(shù)之積小于500,大約每次只需要擴展20來個鄰居時獲得較高的性能。

實驗中也有關(guān)于鄰居采樣數(shù)量的對比,如下圖,隨著鄰居抽樣數(shù)量的遞增,邊際效益遞減,而且計算時間也會增大。

  • 6.每一跳采樣需要一樣嗎?

不需要,可以分別設(shè)置每一跳的采樣數(shù)量,來進(jìn)一步緩解因 階數(shù)越高涉及到的節(jié)點越多 的問題。

原文中,一階采樣數(shù)是25,二階采樣數(shù)是10。這時候二階的節(jié)點總數(shù)是250個節(jié)點,計算量大大增加。

  • 7.聚合函數(shù)的選取有什么要求?

由于在圖中節(jié)點的鄰居是 天然無序 的,所以我們希望構(gòu)造出的聚合函數(shù)是 對稱 的(即改變輸入的順序,函數(shù)的輸出結(jié)果不變),同時具有 較強的表達(dá)能力 (比如可以參數(shù)學(xué)習(xí))。

  • 8.GraphSAGE論文中提供多少種聚合函數(shù)?

原文中提供三種聚合函數(shù):

  • 均值聚合

  • pooling聚合(max-pooling/mean-pooling)

  • LSTM聚合

均值聚合的操作:

把目標(biāo)節(jié)點和鄰居節(jié)點的特征 縱向拼接 起來 ;對拼接起來的向量進(jìn)行 縱向均值化 操作 將得到的結(jié)果做一次 非線性變換 產(chǎn)生目標(biāo)節(jié)點的向量表征。

pooling聚合的操作:先對鄰接節(jié)點的特征向量進(jìn)行一次非線性變換;之后進(jìn)行一次pooling操作(max-pooling or mean-pooling) ;將得到結(jié)果與第k-1層的目標(biāo)節(jié)點的表示向量拼接 ;最后再經(jīng)過一次非線性變換得到目標(biāo)節(jié)點的第k層表示向量。

使用LSTM聚合時需要注意什么?

復(fù)雜結(jié)構(gòu)的LSTM相比簡單的均值操作具有更強的表達(dá)能力,然而由于LSTM函數(shù) 不是關(guān)于輸入對稱 的,所以在使用時需要對節(jié)點的鄰居進(jìn)行 亂序操作 。

  • 9.均值聚合和其他聚合函數(shù)有啥區(qū)別?

除了聚合方式,最大的區(qū)別在于均值聚合 沒有拼接操作 (算法1的第五行),也就是均值聚合不需要把 當(dāng)前節(jié)點上一層的表征 拼接到 已聚合的鄰居表征上。

這一拼接操作可以簡單看成不同“搜索深度”之間的“ skip connection ”(殘差結(jié)構(gòu)),并且能夠提供顯著的性能提升。

  • 10 這三種聚合方法,哪種比較好?

如果按照其學(xué)習(xí)參數(shù)數(shù)量來看,LSTM > Pooling > 均值聚合。

而在實驗中也發(fā)現(xiàn),在Reddit數(shù)據(jù)集中,LSTM和max-pooling的效果確實比均值聚合要好一些。

  • 11.一般聚合多少層?層數(shù)越多越好嗎?

和GCN一樣,一般只需要 1~2層 就能獲得比較好的結(jié)果;如果聚合3層及以上,其時間復(fù)雜度也會隨著層數(shù)的增加而大幅提升,而且效果并沒有什么變化。

在GraphSAGE,兩層比一層有10-15%的提升;但將層數(shù)設(shè)置超過2,邊際效果上只有0-5%的提升,但是計算時間卻變大了10-100倍。

  • 12.什么時候和GCN的聚合形式“等價”?

聚合函數(shù)為 均值聚合 時,其聚合形式與GCN“近似等價”,也就是論文中提到的GraphSAGE-GCN。

  • 13.GraphSAGE怎樣進(jìn)行無監(jiān)督學(xué)習(xí)?

基本思想是:希望 鄰近 的節(jié)點具有相似的向量表征,同時讓 遠(yuǎn)處 的節(jié)點的表示盡可能區(qū)分。

通過負(fù)采樣的方法,把鄰近節(jié)點作為正樣本,把遠(yuǎn)處節(jié)點作為負(fù)樣本,使用類似word2vec的方法進(jìn)行無監(jiān)督訓(xùn)練。

GraphSAGE遠(yuǎn)近節(jié)點定義: 從 節(jié)點u 出發(fā),能夠通過 隨機游走 到達(dá)的節(jié)點,則是鄰近節(jié)點v;其他則是遠(yuǎn)處節(jié)點 。

  • 13.GraphSAGE是怎么隨機游走的?

在原文中,為每個節(jié)點進(jìn)行50次步長為5的隨機游走,隨機游走的實現(xiàn)方式是直接使用DeepWalk的Python代碼。

至于具體的實現(xiàn),可以針對數(shù)據(jù)集來設(shè)計你的隨機游走算法,比如考慮了權(quán)重的有偏游走。

GraphSAGE在采樣的時候和(帶權(quán))隨機游走進(jìn)行負(fù)采樣的時候,考慮邊的權(quán)重了。

  • 14.如果只有圖、沒有節(jié)點特征,能否使用GraphSAGE?

原文里有一段描述:our approach can also make use of structural features that are present in all graphs (e.g., node degrees). Thus, our algorithm can also be applied to graphs without node features.

所以就節(jié)點沒有特征,但也可以根據(jù)其結(jié)構(gòu)信息為其構(gòu)建特征,比如說節(jié)點的度數(shù)等等

  • 15.訓(xùn)練好的GraphSAGE如何得到節(jié)點Embedding?

假設(shè)GraphSAGE已經(jīng)訓(xùn)練好,我們可以通過以下步驟來獲得節(jié)點embedding

訓(xùn)練過程則只需要將其產(chǎn)生的embedding扔進(jìn)損失函數(shù)計算并反向梯度傳播即可。

  • 對圖中每個節(jié)點的鄰接節(jié)點進(jìn)行 采樣 ,輸入節(jié)點及其n階鄰接節(jié)點的特征向量

  • 根據(jù)K層的 聚合函數(shù) 聚合鄰接節(jié)點的信息

  • 就產(chǎn)生了各節(jié)點的embedding

  • 16.minibatch的子圖是怎么得到的?

其實這部分看一下源碼就容易理解了。下圖的偽代碼,就是在其前向傳播之前,多了個minibatch的操作。

  • 先對所有需要計算的節(jié)點進(jìn)行采樣(算法2中的2~7行)。用一個字典來保存節(jié)點及其對應(yīng)的鄰接節(jié)點。

  • 然后訓(xùn)練時隨機挑選n個節(jié)點作為一個batch,然后通過字典找到對應(yīng)的一階節(jié)點,進(jìn)而找到二階甚至更高階的節(jié)點。這樣一階節(jié)點就形成一個batch,K=2時就有三個batch。

  • 抽樣時的順序是:k-->k-1--->k-2;訓(xùn)練時,使用迭代的方式來聚合,其順序是:k-2-->k-1--->k。簡單來說,從上到下采樣,形成每一層的batch;每一次迭代都從下到上,計算k-1層batch來獲得k層的節(jié)點embedding,如此類推。

  • 每一個minibatch只考慮batch里的節(jié)點的計算,不在的不考慮,所以這也是節(jié)省計算方法。

  • 在算法2的第3行中,k-1<----k,也就是說采樣鄰居節(jié)點時,也考慮了自身節(jié)點的信息。相當(dāng)于GCN中鄰接矩陣增加單位矩陣。

增加了新的節(jié)點來訓(xùn)練,需要為所有“舊”節(jié)點重新輸出embeding嗎?

需要。因為GraphSAGE學(xué)習(xí)到的是節(jié)點間的關(guān)系,而增加了新節(jié)點的訓(xùn)練,這會使得關(guān)系參數(shù)發(fā)生變化,所以舊節(jié)點也需要重新輸出embedding。

GraphSAGE有監(jiān)督學(xué)習(xí)有什么不一樣的地方嗎?

沒有。監(jiān)督學(xué)習(xí)形式根據(jù)任務(wù)的不同,直接設(shè)置目標(biāo)函數(shù)即可,如最常用的節(jié)點分類任務(wù)使用交叉熵?fù)p失函數(shù)。

  • 17.那和DeepWalk、Node2vec這些有什么不一樣?

DeepWalk、Node2Vec這些embedding算法直接訓(xùn)練每個節(jié)點的embedding,本質(zhì)上依然是直推式學(xué)習(xí),而且需要大量的額外訓(xùn)練才能使他們能預(yù)測新的節(jié)點。同時,對于embedding的正交變換(orthogonal transformations),這些方法的目標(biāo)函數(shù)是不變的,這意味著生成的向量空間在不同的圖之間不是天然泛化的,在再次訓(xùn)練(re-training)時會產(chǎn)生漂移(drift)。

與DeepWalk不同的是,GraphSAGE是通過聚合節(jié)點的鄰接節(jié)點特征產(chǎn)生embedding的,而不是簡單的進(jìn)行一個embedding lookup操作得到。

3.2 PinSAGE為例技術(shù)歸納

  • 1.PinSAGE論文中的數(shù)據(jù)集有多大?

論文中涉及到的數(shù)據(jù)為20億圖片(pins),10億畫板(boards),180億邊(pins與boards連接關(guān)系)。

用于訓(xùn)練、評估的完整數(shù)據(jù)集大概有18TB,而完整的輸出embedding有4TB。

  • 2.PinSAGE使用的是什么圖?

在論文中,pins集合(用I表示)和boards集合(用C表示)構(gòu)成了 二分圖 ,即pins僅與boards相連接,pins或boards內(nèi)部無連接。

同時,這二分圖可以更加通用:

I 可以表示為 樣本集 (a set of items), C 可以表示為 用戶定義的上下文或集合 (a set of user-defined contexts or collections)。

  • 3.PinSAGE的任務(wù)是什么?

利用pin-board 二分圖的結(jié)構(gòu)與節(jié)點特征 ,為pin生成高質(zhì)量的embedding用于下游任務(wù),比如pins推薦。

  • 4.和GraphSAGE相比,PinSAGE改進(jìn)了什么?

  • 采樣 :使用重要性采樣替代GraphSAGE的均勻采樣;

  • 聚合函數(shù) :聚合函數(shù)考慮了邊的權(quán)重;

  • 生產(chǎn)者-消費者模式的minibatch構(gòu)建 :在CPU端采樣節(jié)點和構(gòu)建特征,構(gòu)建計算圖;在GPU端在這些子圖上進(jìn)行卷積運算;從而可以低延遲地隨機游走構(gòu)建子圖,而不需要把整個圖存在顯存中。

  • 高效的MapReduce推理 :可以分布式地為百萬以上的節(jié)點生成embedding,最大化地減少重復(fù)計算。

這里的計算圖,指的是用于卷積運算的局部圖(或者叫子圖),通過采樣來形成;與TensorFlow等框架的計算圖不是一個概念。

  • 4.PinSAGE使用多大的計算資源?

訓(xùn)練時,PinSAGE使用32核CPU、16張Tesla K80顯卡、500GB內(nèi)存;

推理時,MapReduce運行在378個d2.8xlarge Amazon AWS節(jié)點的Hadoop2集群。

落地業(yè)務(wù)真的可怕:

  • 5. PinSAGE和node2vec、DeepWalk這些有啥區(qū)別?

node2vec,DeepWalk是無監(jiān)督訓(xùn)練;PinSAGE是有監(jiān)督訓(xùn)練;

node2vec,DeepWalk不能利用節(jié)點特征;PinSAGE可以;

node2vec,DeepWalk這些模型的參數(shù)和節(jié)點數(shù)呈線性關(guān)系,很難應(yīng)用在超大型的圖上;

  • 6.PinSAGE的單層聚合過程是怎樣的?

和GraphSAGE一樣,PinSAGE的核心就是一個 局部卷積算子 ,用來學(xué)習(xí)如何聚合鄰居節(jié)點信息。PinSAGE的聚合函數(shù)叫做CONVOLVE。

主要分為3部分:

  • 聚合 (第1行):k-1層鄰居節(jié)點的表征經(jīng)過一層DNN,然后聚合(可以考慮邊的權(quán)重),是聚合函數(shù)符號,聚合函數(shù)可以是max/mean-pooling、加權(quán)求和、求平均;

  • 更新 (第2行): 拼接 第k-1層目標(biāo)節(jié)點的embedding,然后再經(jīng)過另一層DNN,形成目標(biāo)節(jié)點新的embedding;

  • 歸一化 (第3行): 歸一化 目標(biāo)節(jié)點新的embedding,使得訓(xùn)練更加穩(wěn)定;而且歸一化后,使用近似最近鄰居搜索的效率更高。

  • 為什么要將鄰居節(jié)點的聚合embedding和當(dāng)前節(jié)點的拼接?

因為根據(jù)T.N Kipf的GCN論文,concat的效果要比直接取平均更好。

  • 7.PinSAGE是如何采樣的?

如何采樣這個問題從另一個角度來看就是:如何為目標(biāo)節(jié)點構(gòu)建鄰居節(jié)點。和GraphSAGE的均勻采樣不一樣的是,PinSAGE使用的是重要性采樣。PinSAGE對鄰居節(jié)點的定義是:對目標(biāo)節(jié)點 影響力最大 的T個節(jié)點。

PinSAGE的鄰居節(jié)點的重要性其影響力的計算方法有以下步驟:

  • 從目標(biāo)節(jié)點開始隨機游走;

  • 使用 正則 來計算節(jié)點的“訪問次數(shù)”,得到重要性分?jǐn)?shù);

  • 目標(biāo)節(jié)點的鄰居節(jié)點,則是重要性分?jǐn)?shù)最高的前T個節(jié)點。

這個重要性分?jǐn)?shù),其實可以近似看成Personalized PageRank分?jǐn)?shù)。

  • 8.重要性采樣的好處是什么?

和GraphSAGE一樣,可以使得 鄰居節(jié)點的數(shù)量固定 ,便于控制內(nèi)存/顯存的使用。 在聚合鄰居節(jié)點時,可以考慮節(jié)點的重要性;在PinSAGE實踐中,使用的就是 加權(quán)平均 (weighted-mean),原文把它稱作 importance pooling 。

  • 9.采樣的大小是多少比較好?

從PinSAGE的實驗可以看出,隨著鄰居節(jié)點的增加,而收益會遞減;

并且兩層GCN在 鄰居數(shù)為50 時能夠更好的抓取節(jié)點的鄰居信息,同時保持運算效率。

  • 10.PinSAGE的minibatch和GraphSAGE區(qū)別:

基本一致,但細(xì)節(jié)上有所區(qū)別。比如說:GraphSAGE聚合時就更新了embedding;PinSAGE則在聚合后需要再經(jīng)過一層DNN才更新目標(biāo)embedding。

batch應(yīng)該選多大

畢竟要在大量的樣本上進(jìn)行訓(xùn)練(有上億個節(jié)點),所以原文里使用的batch比較大,大小為512~4096。

從下面表格可以看到, batch的大小為2048 時,能夠在每次迭代時間、迭代次數(shù)和總訓(xùn)練時間上取得一個不錯的綜合性能。

更多的就不展開了

4.業(yè)務(wù)落地技巧

  • 負(fù)樣本生成 首先是簡單采樣:在每個minibatch包含節(jié)點的范圍之外隨機采樣500個item作為minibatch所有正樣本共享的負(fù)樣本集合。但考慮到實際場景中模型需要從20億的物品item集合中識別出最相似的1000個,即要從2百萬中識別出最相似的那一個,只是簡單采樣會導(dǎo)致模型分辨的粒度過粗,分辨率只到500分之一,因此增加一種“hard”負(fù)樣本,即對于每個 對,和物品q有些相似但和物品i不相關(guān)的物品集合。這種樣本的生成方式是將圖中節(jié)點根據(jù)相對節(jié)點q的個性化PageRank分值排序,隨機選取排序位置在2000~5000的物品作為“hard”負(fù)樣本,以此提高模型分辨正負(fù)樣本的難度。

  • 漸進(jìn)式訓(xùn)練(Curriculum training):如果訓(xùn)練全程都使用hard負(fù)樣本,會導(dǎo)致模型收斂速度減半,訓(xùn)練時長加倍,因此PinSage采用了一種Curriculum訓(xùn)練的方式,這里我理解是一種漸進(jìn)式訓(xùn)練方法,即第一輪訓(xùn)練只使用簡單負(fù)樣本,幫助模型參數(shù)快速收斂到一個loss比較低的范圍;后續(xù)訓(xùn)練中逐步加入hard負(fù)樣本,讓模型學(xué)會將很相似的物品與些微相似的區(qū)分開,方式是第n輪訓(xùn)練時給每個物品的負(fù)樣本集合中增加n-1個hard負(fù)樣本。

  • 樣本的特征信息:Pinterest的業(yè)務(wù)場景中每個pin通常有一張圖片和一系列的文字標(biāo)注(標(biāo)題,描述等),因此原始圖中每個節(jié)點的特征表示由圖片Embedding(4096維),文字標(biāo)注Embedding(256維),以及節(jié)點在圖中的度的log值拼接而成。其中圖片Embedding由6層全連接的VGG-16生成,文字標(biāo)注Embedding由Word2Vec訓(xùn)練得到。

  • 基于random walk的重要性采樣:用于鄰居節(jié)點采樣,這一技巧在上面的算法理解部分已經(jīng)講解過,此處不再贅述。

  • 基于重要性的池化操作:這一技巧用于上一節(jié)Convolve算法中的 函數(shù)中,聚合經(jīng)過一層dense層之后的鄰居節(jié)點Embedding時,基于random walk計算出的節(jié)點權(quán)重做聚合操作。據(jù)論文描述,這一技巧在離線評估指標(biāo)中提升了46%。

  • on-the-fly convolutions:快速卷積操作,這個技巧主要是相對原始GCN中的卷積操作:特征矩陣與全圖拉普拉斯矩陣的冪相乘。涉及到全圖的都是計算量超高,這里GraphSage和PinSage都是一致地使用采樣鄰居節(jié)點動態(tài)構(gòu)建局部計算圖的方法提升訓(xùn)練效率,只是二者采樣的方式不同。

  • 生產(chǎn)者消費者模式構(gòu)建minibatch:這個點主要是為了提高模型訓(xùn)練時GPU的利用率。保存原始圖結(jié)構(gòu)的鄰居表和數(shù)十億節(jié)點的特征矩陣只能放在CPU內(nèi)存中,GPU執(zhí)行convolve卷積操作時每次從CPU取數(shù)據(jù)是很耗時的。為了解決這個問題,PinSage使用re-index技術(shù)創(chuàng)建當(dāng)前minibatch內(nèi)節(jié)點及其鄰居組成的子圖,同時從數(shù)十億節(jié)點的特征矩陣中提取出該子圖節(jié)點對應(yīng)的特征矩陣,注意提取后的特征矩陣中的節(jié)點索引要與前面子圖中的索引保持一致。這個子圖的鄰接列表和特征矩陣作為一個minibatch送入GPU訓(xùn)練,這樣一來,convolve操作過程中就沒有GPU與CPU的通信需求了。訓(xùn)練過程中CPU使用OpenMP并設(shè)計了一個producer-consumer模式,CPU負(fù)責(zé)提取特征,re-index,負(fù)采樣等計算,GPU只負(fù)責(zé)模型計算。這個技巧降低了一半的訓(xùn)練耗時。

  • 多GPU訓(xùn)練超大batch:前向傳播過程中,各個GPU等分minibatch,共享一套參數(shù),反向傳播時,將每個GPU中的參數(shù)梯度都聚合到一起,執(zhí)行同步SGD。為了適應(yīng)海量訓(xùn)練數(shù)據(jù)的需要,增大batchsize從512到4096。為了在超大batchsize下快速收斂保證泛化精度,采用warmup過程:在第一個epoch中將學(xué)習(xí)率線性提升到最高,后面的epoch中再逐步指數(shù)下降。

  • 使用MapReduce高效推斷:模型訓(xùn)練完成后生成圖中各個節(jié)點的Embedding過程中,如果直接使用上述PinSage的minibatch算法生成Embedding,會有大量的重復(fù)計算,如計算當(dāng)前target節(jié)點的時候,其相當(dāng)一部分鄰居節(jié)點已經(jīng)計算過Embedding了,而當(dāng)這些鄰居節(jié)點作為target節(jié)點的時候,當(dāng)前target節(jié)點極有可能需要再重新計算一遍,這一部分的重復(fù)計算既耗時又浪費。

5.總結(jié)

本項目對PGL圖學(xué)習(xí)系列項目進(jìn)行整合方便大家后續(xù)學(xué)習(xí),同時對圖學(xué)習(xí)相關(guān)技術(shù)和業(yè)務(wù)落地側(cè)進(jìn)行歸納總結(jié),以及對圖網(wǎng)絡(luò)開放數(shù)據(jù)集很多學(xué)者和機構(gòu)發(fā)布了許多與圖相關(guān)的任務(wù)。

??后續(xù)將持續(xù)更新PGL以及前沿算法和應(yīng)用,敬請期待! ???

個人主頁:https://aistudio.baidu.com/aistudio/usercenter 歡迎關(guān)注



圖學(xué)習(xí)項目合集&數(shù)據(jù)集分享&技術(shù)歸納業(yè)務(wù)落地技巧的評論 (共 條)

分享到微博請遵守國家法律
华池县| 通化县| 彰化市| 凌源市| 濮阳县| 合水县| 阿瓦提县| 桃源县| 舒兰市| 奇台县| 大同市| 贺州市| 吴堡县| 敦化市| 木里| 宜兴市| 甘南县| 文化| 罗源县| 西乌| 峨眉山市| 石渠县| 肇州县| 琼结县| 湘阴县| 高阳县| 大方县| 文化| 莱西市| 大埔区| 许昌县| 长葛市| 金昌市| 博湖县| 永登县| 南开区| 竹山县| 屯门区| 疏勒县| 象州县| 蚌埠市|