目錄
圖嵌入是一種從圖中生成無監(jiān)督節(jié)點(diǎn)特征(node features)的方法,生成的特征可以應(yīng)用在各類機(jī)器學(xué)習(xí)任務(wù)上。現(xiàn)代的圖網(wǎng)絡(luò),尤其是在工業(yè)應(yīng)用中,通常會(huì)包含數(shù)十億的節(jié)點(diǎn)(node)和數(shù)萬億的邊(edge)。這已經(jīng)超出了已知嵌入系統(tǒng)的處理能力。Facebook開源了一種嵌入系統(tǒng),PyTorch-BigGraph(PBG),系統(tǒng)對傳統(tǒng)的多關(guān)系嵌入系統(tǒng)做了幾處修改讓系統(tǒng)能擴(kuò)展到能處理數(shù)十億節(jié)點(diǎn)和數(shù)萬億條邊的圖形。
本系列為翻譯的pytouch的官方手冊,希望能幫助大家快速入門GNN及其使用,全文十五篇,文中如果有勘誤請隨時(shí)聯(lián)系。
(一)Facebook開源圖神經(jīng)網(wǎng)絡(luò)-Pytorch Biggraph
(二)Facebook:BigGraph 中文文檔-數(shù)據(jù)模型(PyTorch)
(三)Facebook:BigGraph 中文文檔-從實(shí)體嵌入到邊分值(PyTorch)
(四)Facebook:BigGraph 中文文檔-I/O格式化(PyTorch)
(五)Facebook:BigGraph 中文文檔-批預(yù)處理
源鏈接:Batch Preparation - 批預(yù)處理
https://torchbiggraph.readthedocs.io/en/latest/batch_preparation.html
本節(jié)介紹了每一批次數(shù)據(jù)在損失的計(jì)算和優(yōu)化前是如何準(zhǔn)備和組織的。
訓(xùn)練通過循環(huán)嵌套來迭代處理邊。掃描從外層到內(nèi)層叫代(時(shí)期),代際間是相互獨(dú)立并且過程基本一致,這樣的目的是重復(fù)內(nèi)部循環(huán)直到收斂。每代迭代會(huì)訪問到所有的邊,epochs的數(shù)目在num_epochs配置參數(shù)中指定。
譯者注:
(1)batch:?1個(gè)batch代表深度學(xué)習(xí)算法一次參數(shù)的更新,所需要損失函數(shù)并不是由一個(gè)數(shù)據(jù)獲得的,而是由一組數(shù)據(jù)加權(quán)得到的,這一組數(shù)據(jù)的數(shù)量叫batchsize;
(2)iteration:1個(gè)iteration等于使用batchsize個(gè)樣本訓(xùn)練一次;
(3)epoch:1個(gè)epoch等于使用訓(xùn)練集中的全部樣本訓(xùn)練一次,通俗的講epoch的值num_epoch就是整個(gè)數(shù)據(jù)集被輪幾次。
當(dāng)?shù)粋€(gè)邊集合時(shí),每個(gè)分桶首先會(huì)被分割為大小相等的塊:每個(gè)塊由連續(xù)間隔的邊構(gòu)成(和存儲(chǔ)在文件中的順序一致),塊的數(shù)量可以通過設(shè)置num_edge_chunks來調(diào)整。訓(xùn)練從所有桶的第一個(gè)塊開始,然后第二個(gè),以此類推。
然后算法開始迭代桶,訓(xùn)練桶的順序依賴于配置文件中bucket_order這個(gè)配置項(xiàng)。除了隨機(jī)排列之外,有一些方法用于嘗試將訓(xùn)連續(xù)的桶之間共享一個(gè)分區(qū):這讓分區(qū)能夠被重用,從而允許可以允許參數(shù)存儲(chǔ)在內(nèi)存中而不是先注銷然后被另一個(gè)桶加載到自己的空間中(在分布式模式下,不同的訓(xùn)練器進(jìn)程同時(shí)在桶上運(yùn)行,因此迭代的管理方式不同)。
當(dāng)訓(xùn)練器被固定了一個(gè)確定的桶和一個(gè)指定的快,邊會(huì)最終磁盤上加載起來。當(dāng)在訓(xùn)練中評估的時(shí)候,這些邊的一個(gè)子集被保留(這個(gè)子集對所有的代都是一樣的)。被保留的這些邊會(huì)被均勻打散然后分為相等的部分。為了讓訓(xùn)練過程中可以訓(xùn)練過程可以在同一時(shí)間并行進(jìn)行,打散后的分片會(huì)放到一個(gè)分布式的處理池中處理Processes。這些子流程相互間不同步他們的計(jì)算或內(nèi)存,我們叫 “Hogwild”? worker,這些節(jié)點(diǎn)worker的數(shù)據(jù)量通過workers參數(shù)來控制。
每個(gè)worker上訓(xùn)練邊集合的方式取決于動(dòng)態(tài)關(guān)系是否被用了。最簡單的情況是邊被分割到連續(xù)的batches(每個(gè)batch都和batch_size中配置指定的大小一樣,除了最后一個(gè)可以略小一點(diǎn)),這樣便可以對樣本一批接一批順序訓(xùn)練。
當(dāng)動(dòng)態(tài)關(guān)系沒有被使用,也就是說損失的計(jì)算只能對一個(gè)邊的集合中所有具有相同類型的邊計(jì)算。因此,worker首先隨機(jī)一個(gè)關(guān)系類型,選取的數(shù)量應(yīng)該和樣本池中同類型邊的概率占比一致。然后采用手個(gè)batch_size大小的同類關(guān)系(如果剩下的樣本不夠),在訓(xùn)練池中刪除掉這些樣本并開始訓(xùn)練。