日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 架構師社區(qū)
[導讀]2017年我以深度學習研究員的身份加入Hulu,研究領域包括了圖神經(jīng)網(wǎng)絡及NLP中的知識圖譜推理。

分享嘉賓:徐瀟然 Hulu 研究員

編輯整理:莫高鼎

出品平臺:DataFunTalk

導讀:2017年我以深度學習研究員的身份加入Hulu,研究領域包括了圖神經(jīng)網(wǎng)絡及NLP中的知識圖譜推理,其中我們在大規(guī)模圖神經(jīng)網(wǎng)絡計算方向的工作發(fā)表在ICLR2020主會上,題目是——Dynamically Pruned Message Passing Networks for Large-Scale Knowledge Graph Reasoning。本次分享的話題會沿著這個方向,重點和大家探討一下并列出一些可以降低大規(guī)模圖計算復雜度的思路。

01
圖神經(jīng)網(wǎng)絡簡單介紹

實現(xiàn)大規(guī)模圖計算的算法思路

1. 圖神經(jīng)網(wǎng)絡使用的圖

圖神經(jīng)網(wǎng)絡這幾年特別火爆,無論學術界還是業(yè)界,大家都在考慮用圖神經(jīng)網(wǎng)絡。正因為圖神經(jīng)網(wǎng)絡的應用面很廣,所用的圖各種各樣都有,簡單分類如下:

① 根據(jù)圖與樣本的關系

  • 全局圖:所有樣本共用一個大圖

比如有一個大而全的知識圖譜,所做任務的每一個樣本都共用這個知識圖譜,使用來自這個知識圖譜的一部分信息。

  • 實例圖:以每個樣本為中心構建的圖

每個輸入的樣本自帶一個圖,比如要考慮一張圖片中所有物體之間的關系,這可以構成一個物體間關系圖。換一張圖片后,就是另一張關系圖。

② 根據(jù)邊的連接密度

  • 完全圖

  • 稀疏圖

2. 圖神經(jīng)網(wǎng)絡與傳統(tǒng)神經(jīng)網(wǎng)絡的聯(lián)系

神經(jīng)網(wǎng)絡原本就是圖,我們大多只是提到“權重”和“層”,再細粒度一點,會講到“單元”(即units)。但是,有圖就有節(jié)點和邊的概念,就看你怎么定義這個節(jié)點。在BERT網(wǎng)絡結構中,輸入是一個文本序列, 預處理成一串代表word或sub-word的tokens,我們可以把這些tokens看成是圖中的nodes,這樣BERT變成了一個完全圖上的圖神經(jīng)網(wǎng)絡,而且BERT網(wǎng)絡結構的每層可以對應到圖神經(jīng)網(wǎng)絡的一次message passing迭代。

3. 圖神經(jīng)網(wǎng)絡與傳統(tǒng)神經(jīng)網(wǎng)絡的區(qū)別

傳統(tǒng)神經(jīng)網(wǎng)絡有多個層的概念,每一層用的都是不同的參數(shù);圖神經(jīng)網(wǎng)絡只有一個圖,圖中計算通過多步迭代完成節(jié)點間的消息傳遞和節(jié)點狀態(tài)更新。這種迭代式的計算,有點類似神經(jīng)網(wǎng)絡的多個層,但是迭代中使用的是同一套權重參數(shù),這點又像單層的RNN。當然,如果不嫌復雜,你可以堆疊多個圖,下層圖向上層圖提供輸入,讓圖神經(jīng)網(wǎng)絡有“層”的概念。

另外,圖神經(jīng)網(wǎng)絡中的nodes與傳統(tǒng)神經(jīng)網(wǎng)絡中的units不同。圖神經(jīng)網(wǎng)絡中的nodes是有狀態(tài)的(stateful),不像傳統(tǒng)神經(jīng)網(wǎng)絡中的units,當一層計算完輸出給下一層后,這層units的生命就結束了。Nodes的狀態(tài)表示為一個向量,在下次迭代時會更新。此外,你也可以考慮為edges和global定義它們的狀態(tài)。

4. 圖神經(jīng)網(wǎng)絡的計算框架

① 初始步

  • 初始化每個節(jié)點的狀態(tài)向量(可以包括各條邊和全局的狀態(tài))

② 消息傳遞(message-passing)迭代步:

  • 計算節(jié)點到節(jié)點的消息向量

  • 計算節(jié)點到節(jié)點的(多頭)注意力分布

  • 對節(jié)點收到的消息進行匯總計算

  • 更新每個節(jié)點的狀態(tài)向量(可以包括各條邊和全局的狀態(tài))

5. 圖神經(jīng)網(wǎng)絡的計算復雜度

實現(xiàn)大規(guī)模圖計算的算法思路

計算復雜度主要分為空間復雜度和時間復雜度。我們使用PyTorch或者TensorFlow進行神經(jīng)網(wǎng)絡訓練或預測時,會遇到各種具體的復雜度,比如會有模型參數(shù)規(guī)模的復雜度,還有計算中產(chǎn)生中間tensors大小的復雜度,以及一次前向計算中需保存tensors個數(shù)的復雜度。我們訓練神經(jīng)網(wǎng)絡時,它做前向計算的過程中,由于梯度反向傳播的需要,前面層計算出的中間tensors要保留。但在預測階段,不需要梯度反向傳播,可以不保留中間產(chǎn)生的tensors,這會大大降低空間上的開銷。物理層面,我們現(xiàn)在用的GPU,一張卡的顯存頂?shù)教煲簿?4G,這個尺寸還是有限的,但是實際中遇到的很多圖都非常之大。另外,就是時間復雜度了。下面,我們用T表示一次圖計算中的迭代個數(shù),B表示輸入樣本的批大小(batch size),|V|表示節(jié)點個數(shù),|E|表示邊個數(shù),D,D1,D2表示表征向量的維數(shù)。

空間復雜度

  • 模型參數(shù)規(guī)模

  • 計算中間產(chǎn)生tensors規(guī)模(此時有B>=1, T=1)

  • 計算中間保留tensors規(guī)模(此時有B>=1, T>=1)

時間復雜度

  • 計算所需浮點數(shù)規(guī)模(此時考慮D1, D2)

總結復雜度的計算公式,不外乎如下的形式:

02
降低圖神經(jīng)網(wǎng)絡計算復雜度的幾點思路

思路一:避開|E|

通常情況下,圖中邊的個數(shù)遠大于節(jié)點的數(shù)量。極端情況下,當邊的密度很高直至完全圖時,圖的復雜度可以達到|V|(|V|-1)/2。如果考慮兩個節(jié)點間雙向的邊,以及節(jié)點到自身的特殊邊,那么這個復雜度就是|V|2。為了降低計算的復雜度,一個思路就是盡量避開圍繞邊的計算。具體來說,為了讓計算復雜度從|E|級別降低為|V|級別,在計算消息向量(message vectors)時,我們僅計算 destination-independent messages。也就是說,從節(jié)點u發(fā)出的所有消息使用同一個向量,這樣復雜度從邊數(shù)級別降為了節(jié)點數(shù)級別。值得注意的是,這里會存在一個問題,消息向量里不區(qū)分不同的destination節(jié)點。那么,能否把不同的destination節(jié)點考慮進來呢?當然可以,不過需要引入multi-head attention機制。下面針對這種情況來介紹一下優(yōu)化方案。

適合情形

當|E|>>|V|時,即邊密度高的圖,尤其是完全圖

優(yōu)化方案

實現(xiàn)大規(guī)模圖計算的算法思路

思路二:減少D

順著思路一,我們在計算attention時,每個attention分數(shù)都是一個標量。我們可以減小計算attention所用的向量維數(shù),因為輸出是一個標量,信息被壓縮到一維空間,所以計算時沒必要使用大向量來提高capacity。如果需要multi-head的話,可以把每個計算channel的向量維數(shù)變小,讓它們加起來還等于原來的總維數(shù)。這個思路很像BERT,BERT雖然不是GNN,但是這種機制可以運用到GNN中。還有一篇論文,提出了Graph Attention Networks,也用到了類似的思路。

適合情形

引入attention mechanism的multi-head channels設計

優(yōu)化方案

每個head channel 的消息計算使用較小的hidden dimensions, 通過增加head的數(shù)量來保證模型的capacity,而每個head的attention 分數(shù)在一個節(jié)點上僅僅是一個標量。

實現(xiàn)大規(guī)模圖計算的算法思路

思路三:部分迭代更新(選擇性減少T)

前面的思路是減少邊數(shù)量以及計算維度數(shù),我們還可以減少迭代次數(shù)T,這樣中間需保留tensors的規(guī)模就會變小,適合非常大的網(wǎng)絡,尤其當網(wǎng)絡節(jié)點刻畫的時間跨度很大,或者異構網(wǎng)絡的不同節(jié)點需要不同頻次或不同階段下的更新。有些節(jié)點不需要迭代更新那么多次,迭代兩、三次就夠了,有些節(jié)點要更新好多次才行。下圖的右側部分,每步迭代節(jié)點都更新;左側部分,節(jié)點只更新一次,即使這樣,它的計算依賴鏈條還是有四層。至于更新策略,可以人為設定,比如說,采取隨機抽樣方式,或者通過學習得到哪些節(jié)點需更新的更新策略。更新策略的數(shù)學實現(xiàn),可以采取hard gate的方式(注意不是soft),也可以采取sparse attention即選擇top-K節(jié)點的方式。有paper基于損失函數(shù)設計criteria去選擇更新的節(jié)點,如果某個節(jié)點的當前輸出對最終損失函數(shù)的貢獻已經(jīng)很好了,就不再更新。需要注意的是,在hard gate和sparse attention的代碼實現(xiàn)中,不能簡單地把要略過的節(jié)點的權重置零,雖然數(shù)學上等價,但是CPU或GPU還是要計算的,所以代碼中需要實現(xiàn)稀疏性計算,來減少每次更新所載入的tensor規(guī)模。更新的粒度可以是逐點的,也可以是逐塊的。

實現(xiàn)大規(guī)模圖計算的算法思路

適合情形

具有大時間跨度或異構的網(wǎng)絡,其節(jié)點需不同頻次或不同階段下的更新

優(yōu)化方案

更新策略一:預先設定每步更新節(jié)點

更新策略二:隨機抽樣每步更新節(jié)點

更新策略三:每步每節(jié)點通過hard gate的開關決定是否更新

更新策略四:每步通過sparse attention機制選擇top-K節(jié)點進行更新

更新策略五:根據(jù)設定的criteria選擇更新節(jié)點(如:非shortcut支路上梯度趨零)

實現(xiàn)大規(guī)模圖計算的算法思路

思路四:Baking(“烘焙”,即使用臨時memory存放某些計算結果)

Baking這個名字,是我引用計算機3D游戲設計中的一個名詞,來對深度學習中一種常見的技巧起的名字。當某些數(shù)據(jù)的計算復雜度很高時,我們可以提前算好它,后面需要時就直接拿來。這些數(shù)據(jù)通常需要一個臨時的記憶模塊來存儲。大時間跨度的早期計算節(jié)點,或者異構網(wǎng)絡的一些非重要節(jié)點,我們假定它們對當前計算的作用只是參考性的、非決定性的,并設計它們只參與前向計算,不參與梯度的反向傳播,此時我們可以使用記憶模塊保存這些算好的數(shù)據(jù)。記憶模塊的設計,最簡單的就是一組向量,每個向量為一個記憶槽(slot),訪問過程可以是嚴格的索引匹配,或者采用soft attention機制。

適合情形

大時間跨度的早期計算節(jié)點或者異構網(wǎng)絡的一些非重要節(jié)點(只參與前向計算,不參與梯度的反向傳播)。

優(yōu)化方案

維護一個記憶緩存,保存歷史計算的某些節(jié)點狀態(tài)向量,對緩存的訪問可以是嚴格索引匹配,也可以使用soft attention機制。

實現(xiàn)大規(guī)模圖計算的算法思路

思路五:Distillation(蒸餾技術)

蒸餾技術的應用非常普遍。蒸餾的思想就是用層數(shù)更小的網(wǎng)絡來代替較重的大型網(wǎng)絡。實際上,所有神經(jīng)網(wǎng)絡的蒸餾思路都類似,只不過在圖神經(jīng)網(wǎng)絡里,要考慮如何把一個重型網(wǎng)絡壓縮成小網(wǎng)絡的具體細節(jié),包括要增加什么樣的loss來訓練。這里,要明白蒸餾的目的不是僅僅為了學習到一個小網(wǎng)絡,而是要讓學習出的小網(wǎng)絡可以很好地反映所給的重型網(wǎng)絡。小網(wǎng)絡相當于重型網(wǎng)絡在低維空間的一個投影。實際上,用一個小的參數(shù)空間去錨定重型網(wǎng)絡的中間層features,基于hidden層或者attention層做對齊,盡量讓小網(wǎng)絡在某些中間層上產(chǎn)生與重型網(wǎng)絡相對接近的features。

適合情形

對已訓練好的重型網(wǎng)絡進行維度壓縮、層壓縮或稀疏性壓縮,讓中間層的feature space表達更緊湊。

優(yōu)化方案

Distillation Loss的設計方案:

  • Hidden-based loss

  • Attention-based loss

實現(xiàn)大規(guī)模圖計算的算法思路

思路六:Partition (or clustering)

如果圖非常非常大,那該怎么辦?只能采取圖分割(graph partition)的方法了。我們可以借用傳統(tǒng)的圖分割或節(jié)點聚類算法,但是這些算法大多很耗時,故不能采取過于復雜的圖分割或節(jié)點聚類算法。分割過程要注意執(zhí)行分割算法所用的節(jié)點數(shù)據(jù),最好不要直接在節(jié)點hidden features上做分割或聚類計算,這是因為只有hidden features相似的nodes才會聚到一起,可能存在某些相關但hidden features不接近的節(jié)點需要放在一個組里。我們可以將hidden features做非線性轉換到某個分割語義下的空間,這個非線性轉換是帶參的,需要訓練,即分割或聚類過程是學習得到的。每個分割后的組,組內(nèi)直接進行節(jié)點到節(jié)點的消息傳遞,組間消息傳遞時先對一組節(jié)點做池化(pooling)計算,得到一個反映整個組的狀態(tài)向量,再通過這個向量與其他組的節(jié)點做消息傳遞。另外的關鍵一點是如何通過最終的損失函數(shù)來訓練分割或聚類計算中的可訓參數(shù)。我們可以把節(jié)點對組的成員關系(membership)引入到計算流程中,使得反向傳播時可以獲得相應的梯度信息。當然,如果不想這么復雜,你可以提前對圖做分割, 然后進行消息傳遞。

適合情形

針對非常大的圖(尤其是完全圖)

優(yōu)化方案

對圖做快速分割處理,劃分節(jié)點成組,然后在組內(nèi)進行節(jié)點到節(jié)點的消息傳遞,在組間進行組到節(jié)點、或組到組的消息傳遞。

Transformation step

  • Project hidden features onto the partition-oriented space

Partitioning step

Group-pooling step

  • Compute group node states

Message-passing step

  • Compute messages from within-group neighbors

  • Compute messages from the current group node

  • Compute messages from other group nodes

實現(xiàn)大規(guī)模圖計算的算法思路

思路七:稀疏圖計算

如何利用好稀疏圖把復雜度降下來?你不能把稀疏圖當作dense矩陣來處理,并用Tensorflow或PyTorch做普通tensors間的計算,這是沒有效果的。你必須維護一個索引列表,而且這個索引列表支持快速的sort、unique、join等操作。舉個例子,你需要維護一份索引列表如下圖,第一列代表batch中每個sample的index,第二列代表source node的id。當用節(jié)點狀態(tài)向量計算消息向量時, 需要此索引列表與邊列表edgelist做join,把destination node的id引進來,完成節(jié)點狀態(tài)向量到邊向量的轉換,然后你可以在邊向量上做一些計算,如經(jīng)過一兩層的小神經(jīng)網(wǎng)絡,得到邊上的消息向量。得到消息向量后,對destination node做sort和unique操作。聯(lián)想稀疏矩陣的乘法計算,類似上述的過程,可以分成兩步,第一步是在非零元素上進行element-wise乘操作,第二步是在列上做加操作。

實現(xiàn)大規(guī)模圖計算的算法思路

適合情形

當|E|<<|v|*|v|時

優(yōu)化方案

稀疏計算的關鍵在于維護一個索引列表,能快速進行sort、unique、join操作并調(diào)用如下深度學習庫函數(shù):

TensorFlow:

-  gather, gather_ndm

-  scatter_nd, segment_sum,

-  segment_max, unsored_segment_sum|max

Pytorch:

-  gather, scatter, scatter_add

思路八:稀疏routing

稀疏routing與partition不同,partition需要將整個圖都考慮進來,而稀疏routing只需考慮大圖中所用到的局部子圖。單個樣本每次計算時,只需要用到大圖的一個局部子圖,剛開始的子圖可能僅是一個節(jié)點或幾個節(jié)點,即聚焦在一個很小的區(qū)域,計算過程中聚焦區(qū)域逐漸擴大。這種routing的方式也是一種attention機制,與傳統(tǒng)的attention機制有所不同。傳統(tǒng)的attention用于匯總各方來的消息向量,采用加權平均的方式,讓incoming消息的權重相加等于1;對于routing的話,剛好相反,讓outgoing的邊權重和為1,這個有點類似PageRank算法。這樣做的好處,可以在計算過程中通過選取top-K的outgoing邊來構建一個動態(tài)剪枝的子圖。

適合情形

全圖雖大,但每次僅用到局部子圖

優(yōu)化方案

Attention機制是“拉”的模式,routing機制是“推”的模式。

實現(xiàn)大規(guī)模圖計算的算法思路

思路九:跨樣本共享的圖特征

當你計算的圖特征(如節(jié)點向量)不依賴具體樣本時,這些特征可以作為輸入喂給每個樣本,但是它們的大小不隨batch size的大小而增加。我們稱這些是input-agnostic features,由于跨樣本共享,它們相當于batch size為1的輸入。

適合情形

提供input-agnostic features

優(yōu)化方案

跨樣本共享,相當于batch size為1。

實現(xiàn)大規(guī)模圖計算的算法思路

思路十:組合使用以上九種方法

組合使用以上九種方法,根據(jù)自己的實際情況設計適當?shù)乃惴ā?/span>


免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉