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