導航:首頁 > 蒸餾問題 > 圖神經網路知識蒸餾

圖神經網路知識蒸餾

發布時間:2022-09-04 09:15:58

① 模型壓縮:剪枝演算法

過參數化主要是指在訓練階段,在數學上需要進行大量的微分求解,去捕抓數據中的微小變化信息,一旦完成迭代式的訓練之後,網路模型推理的時候就不需要這么多參數。而剪枝演算法正是基於過參數化的理論基礎而提出的。

剪枝演算法核心思想就是減少網路模型中參數量和計算量,同時盡量保證模型的性能不受影響。

那在AI框架中,實際上剪枝主要作用在右下角的端側模型推理應用場景中,為的就是讓端側模型更小,無論是平板、手機、手錶、耳機等小型IOT設備都可以輕松使用AI模型。而實際在訓練過程更多體現在剪枝演算法和框架提供的剪枝API上面。

實際上大部分剛接觸剪枝演算法的時候,都會從從宏觀層面去劃分剪枝技術,主要是分為Drop Out和Drop Connect兩種經典的剪枝演算法,如下圖所示。

1)Drop Out:隨機的將一些神經元的輸出置零,稱之為神經元剪枝。

2)Drop Connect:隨機將部分神經元間的連接Connect置零,使得權重連接矩陣變得稀疏。

下面會把剪枝的更多種方式呈現出來,可能會稍微復雜哈。從剪枝的粒度來劃分,可以分為結構化剪枝和非結構化剪枝,2個剪枝結構方法。下面來看看具體的剪枝方法有4種:

細粒度剪枝、向量剪枝、核剪枝在參數量與模型性能之間取得了一定的平衡,但是網路模型單層的神經元之間的組合結構發生了變化,需要專門的演算法或者硬體結構來支持稀疏的運算,這種叫做 結構化剪枝(Unstructured Pruning)

其中,非結構化剪枝能夠實現更高的壓縮率,同時保持較高的模型性能,然而會帶來網路模型稀疏化,其稀疏結構對於硬體加速計算並不友好,除非底層硬體和計算加速庫對稀疏計算有比較好的支持,否則剪枝後很難獲得實質的性能提升。

濾波器剪枝(Filter-level)主要改變網路中的濾波器組和特徵通道數目,所獲得的模型不需要專門的演算法和硬體就能夠運行,被稱為 結構化剪枝(Structured Pruning) 。結構化剪枝又可進一步細分:可以是channel-wise,也可以是filter-wise,還可以是在shape-wise。

結構化剪枝與非結構化剪枝恰恰相反,可以方便改變網路模型的結構特徵,從而達到壓縮模型的效果,例如知識蒸餾中的student網路模型、NAS搜索或者如VGG19和VGG16這種裁剪模型,也可以看做變相的結構化剪枝行為。

雖然剪枝演算法的分類看上去很多,但是核心思想還是對神經網路模型進行剪枝,目前剪枝演算法的總體流程大同小異,可以歸結為三種:標准剪枝、基於子模型采樣的剪枝、以及基於搜索的剪枝,如下圖所示。

標准剪枝是目前最流行的剪枝流程,在Tensorflow、Pytroch都有標準的介面。主要包含三個部分:訓練、剪枝、以及微調。

1) 訓練 :首先是對網路模型進行訓練。在剪枝流程中,訓練部分主要指預訓練,訓練的目的是為剪枝演算法獲得在特定基礎SOTA任務上訓練好的原始模型。

3) 微調 :微調是恢復被剪枝操作影響的模型表達能力的必要步驟。結構化模型剪枝會對原始模型結構進行調整,因此剪枝後的模型參數雖然保留了原始的模型參數,但是由於模型結構的改變,剪枝後模型的表達能力會受到一定程度的影響。實現上,微調網路模型,參數在計算的時候先乘以該Mask,Mask為1的參數值將繼續訓練通過BP調整梯度,而Mask為0的部分因為輸出始終為0則不對後續部分產生影響。

4) 再剪枝 :再剪枝過程將微調之後的網路模型再送到剪枝模塊中,再次進行模型結構評估和執行剪枝演算法。目的是使得每次剪枝都在性能更優的模型上面進行,不斷迭代式地進行優化剪枝模型,直到模型能夠滿足剪枝目標需求。

最後輸出模型參數儲存的時候,因為有大量的稀疏,所以可以重新定義儲存的數據結構, 僅儲存非零值以及其矩陣位置。重新讀取模型參數的時候,就可以還原矩陣。

除標准剪枝之外,基於子模型采樣的剪枝《EagleEye: Fast sub-net evaluation for efficient neural network pruning》最近也表現出比較好的剪枝效果。得到訓練好的模型之後,進行子模型采樣過程。一次子模型采樣過程為:

1)對訓練好的原模型中可修剪的網路結構,按照剪枝目標進行采樣,采樣過程可以是隨機的,也可以按照網路結構的重要性或者通過KL散度計算進行概率采樣。

2)對采樣後的網路結構進行剪枝,得到采樣子模型。子模型采樣過程通常進行 次,得到 個子模型( ≥1), 之後對每一個子模型進行性能評估。子模型評估結束之後,選取最優的子模型進行微調以得倒最後的剪枝模型。

基於搜索的剪枝主要依靠強化學習等一系列無監督學習或者半監督學習演算法,也可以是神經網路結構搜索相關理論。

給定剪枝目標之後,基於搜索的剪枝在網路結構中搜索較優的子結構,這個搜索過程往往伴隨著網路參數的學習過程,因此一些基於搜索的剪枝演算法在剪枝結束後不需要再進行微調。

這幾年神經網路剪枝pruning作為模型壓縮技術的四小龍之一,正在受到越來越多的關注。當然,各種更好的pruning參數選取方法一定還會層出不窮。另外,從趨勢來看,以下幾個方向值得關註:

打破固定假設 :挑戰已有的固有的假設,例如ICLR2019會議的best paper彩票假說《The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks 》的出現。還有一開始提到的對於over-parameterization,與重用已有參數是否有有益的反思非常有意思。這樣的工作會給剪枝演算法非常大的啟發,從而根本改變解決問題的思路。

自動化剪枝 :隨著AutoML的大潮,越來越多的演算法開始走向自動化。模型壓縮能拉下嗎?當然不能。經過前面的介紹我們知道,像ADC,RNP,N2N Learning這些工作都是試圖將剪枝中部分工作自動化。如量化中的《HAQ: Hardware-Aware Automated Quantization》考慮網路中不同層信息的冗餘程度不一樣,所以自動化使用混合量化比特進行壓縮。

與NAS融合 :如前面模型剪枝流程中提到,剪枝演算法與神經網路搜索NAS的界限已經模糊了。NAS有針對結構化剪枝進行搜索方法,如One-Shot Architecture Search是先有一個大網路,然後做減法。NAS與模型壓縮兩個一開始看似關系不是那麼大的分支,在近幾年的發展過程中因為下游任務和部署場景的需求,最後似乎會走到一塊去。這兩個分支今天有了更多的交集,也必將擦出更多的火花。

與GAN融合 :這幾年機器學習最火熱的分支之一GAN,正在不斷滲透到已有領域,在pruning中也開始有它的身影。如2019年《Towards Optimal Structured CNN Pruning via Generative Adversarial Learning》讓generator生成裁剪後網路,discrimintor來判別是否屬於原網路還是裁剪後網路,從而進行更有效的網路結構化裁剪。

硬體稀疏性支持 :剪枝會給神經網路模型帶來稀疏性特徵,參數稀疏性在計算中會有大量的索引,所以並不能加速。現在雖然有像cuSPARSE這樣的計算庫,但底層硬體AI晶元本身設計並不是專門為稀疏數據處理打造的。如果能將稀疏計算和處理能力做進晶元那必將極大提高計算效率。僅2021年中國就推出了10+款基於ASIC的AI加速晶元,相信針對稀疏性場景的支持在未來會有所突破。

模型壓縮演算法中針對已有的模型,有:張量分解,模型剪枝,模型量化。針對新構建的網路,有:知識蒸餾,緊湊網路設計等方法。

剪枝只是模型壓縮方法中的一種,它與其它模型壓縮方法並不沖突,因此會與量化、蒸餾、NAS、強化學習等方法慢慢融合,這些都是很值得研究的方向。另外在上面的發展來看,打破固有的假設定義,與NAS、GAN、AutoML、RL等技術進行相互的融合,可能到最後會模糊purning方式,出現新的範式或者壓縮模式也是很吸引的。

② 知識蒸餾綜述:網路結構搜索應用

【GiantPandaCV導語】知識蒸餾將教師網路中的知識遷移到學生網路,而NAS中天然的存在大量的網路,使用KD有助於提升超網整體性能。兩者結合出現了許多工作,本文收集了部分代表性工作,並進行總結。

知識蒸餾可以看做教師網路通過提供soft label的方式將知識傳遞到學生網路中,可以被視為一種更高級的label smooth方法。soft label與hard label相比具有以下優點:

那麼知識蒸餾在網路結構搜索中有什麼作用呢?總結如下:

知識蒸餾在很多工作中作為訓練技巧來使用,比如OFA中使用漸進收縮訓練策略,使用最大的網路指導小網路的學習,採用inplace distillation進行蒸餾。BigNAS中則使用三明治法則,讓最大的網路指導剩下網路的蒸餾。

目標:解決教師網路和學生網路的匹配問題(知識蒸餾中教師網路和學生網路匹配的情況下效果更好)。

在知識蒸餾中,選擇不同的教師網路、不同的學生網路的情況下,最終學生網路的性能千差萬別。如果學生網路和教師網路的容量相差過多,會導致學生難以學習的情況。Cream這篇文章就是為了解決兩者匹配問題。

普通的SPOS方法如左圖所示,通過采樣單路徑子網路進行訓練。右圖則是結合了知識蒸餾的方法,Cream提出了兩個模塊:

Cream中心思想是,子網路可以在整個訓練過程中協作學習並相互教導,目的是提高單個模型的收斂性。

消融實驗如下:

目標:通過教師引導各個block特徵層的學習,根據loss大小評判各子網的性能。

這是一篇將NAS和KD融合的非常深的一個工作,被CVPR20接收。之前寫過一篇文章進行講解,這里簡單回顧一下。

DNA是兩階段的one-shot NAS方法,因此其引入蒸餾也是為了取代普通的acc指標,提出了使用子網路與教師網路接近程度作為衡量子網性能的指標。

在訓練的過程中,進行了分塊蒸餾,學生網路某一層的輸入來自教師網路上一層的輸出,並強制學生網路這一層的輸出與教師網路輸出一致(使用MSELoss)。在搜索過程結束後,通過計算各子網路與教師網路的接近程度來衡量子網路。

目標:通過改進KL divergence防止學生over estimate或者under estimate教師網路。

上圖展示了OFA,BigNAS等搜索演算法中常用到的蒸餾方法,子網使用的是KL divergence進行衡量,文中分析了KL 散度存在的局限性:即避零性以及零強制性。如下公式所示,p是教師的邏輯層輸出,q是學生邏輯層輸出。

AlphaNet提出了一個新的散度衡量損失函數,防止出現過估計或者低估的問題。如下所示,引入了 。

其中 不為0或者1,這樣如下圖所示:

藍色線對應example 2表示,當 為負值,如果q過估計了p中的不確定性, 的值會變大。

紫色線對應example 1表示,當 為正數,如果q低估了p中的不確定性, 的值會變大

同時考慮兩種情況,取兩者中最大值作為散度:

目標:提出了衡量學生網路和教師網路 內部激活相似度 衡量指標,通過表徵匹配可以用來加速網路結構搜索。

這部分其實是屬於知識蒸餾分類中基於關系的知識,構建的知識由不同樣本之間的互作用構成。

具體的指標構成如上圖所示,是一個bsxbs大小的矩陣,這個在文中被稱為Representational Dissmilarity Matrix,其功能是構建了激活層內部的表徵,可以通過評估RDM的相似度通過計算上三角矩陣的關系系數,比如皮爾遜系數。

該文章實際上也是構建了一個指標P+TG來衡量子網的性能,挑選出最優子網路。

如上圖所示,RDM的計算是通過衡量教師網路的feature以及學生網路的feature的相似度,並選擇選取其中最高的RDM相似度。通過構建了一組指標,隨著epoch的進行,排序一致性很快就可以提高。

目標:固定教師網路,搜索最合適的學生網路。

對於相同的教師網路來說,不同的架構的學生網路,即便具有相同的flops或者參數,其泛化能力也有所區別。在這個工作中選擇固定教師網路,通過網路搜索的方法找到最優的學生網路,使用L1 Norm優化基礎上,選擇出與教師網路KL散度差距最小的學生網路。

目標:在給定教師網路情況下,搜索最合適的學生網路。

神經網路中的知識不僅蘊含於參數,還受到網路結構影響。KD普遍方法是將教師網路知識提煉到學生網路中,本文提出了一種架構感知的知識蒸餾方法Architecture-Aware KD (AKD),能夠找到最合適提煉給特定教師模型的學生網路。

Motivation: 先做了一組實驗,發現不同的教師網路會傾向於不同的學生網路,因此在NAS中,使用不同的教師網路會導致模型傾向於選擇不同的網路結構。

AKD做法是選擇使用強化學習的方法指導搜索過程, 使用的是ENAS那種通過RNN采樣的方法。

目標:從集成的教師網路中學習,並使用NAS調整學生網路模型的容量。NAS+KD+集成。

這篇文章之前也進行了講解,是網路結構搜索,知識蒸餾,模型集成的大雜燴。

詳見: https://blog.csdn.net/DD_PP_JJ/article/details/121268840

這篇文章比較有意思,使用上一步中得到的多個子網路進行集成,可以得到教師網路,然後使用知識蒸餾的方法來引導新的子網路的學習。關注重點在於:

AdaNAS受Born Again Network(BAN)啟發, 提出Adaptive Knowledge Distillation(AKD)的方法以輔助子網路的訓練。

集成模型選擇

從左到右代表四次迭代,每個迭代中從搜索空間中選擇三個模型。綠色線框出的模型代表每個迭代中最優的模型,AdaNAS選擇將每個迭代中最優subnet作為集成的對象。

最終集成的時候還添加了額外的weight參數w1-w4:

最終輸出邏輯層如下所示:(這個w權重也會被訓練,此時各個集成網路的權重是固定的,只優化w)

Knowledge Distillation

目標:解決知識蒸餾的效率和有效性,通過使用特徵聚合來引導教師網路與學生網路的學習,網路結構搜索則是體現在特徵聚合的過程,使用了類似darts的方法進行自適應調整放縮系數。ECCV20

文章總結了幾種蒸餾範式:

最後一種是本文提出的方法,普通的特徵蒸餾都是每個block的最後feature map進行互相蒸餾,本文認為可以讓教師網路的整個block都引導學生網路。

具體如何將教師網路整個block中所有feature map進行聚合,本文使用的是darts的方法進行動態聚合信息。(a) 圖展示的是對group i進行的可微分搜索過程。(b)表示從教師到學生的路徑loss構建,使用的是CE loss。(c)表示從學生到教師網路的路徑loss構建,使用的是L2 Loss。其中connector實際上是一個1x1 卷積層。

(ps: connector讓人想到VID這個工作)

③ 神經網路演算法的局限性

神經網路演算法的局限性是:可以使用均值函數但是這個函數將獲取嵌入的平均值,並將其分配為新的嵌入。但是,很容易看出,對於某些不同的圖,它們會給出相同的嵌入,所以,均值函數並不是單射的。

即使圖不同,節點 v 和 v』 的平均嵌入聚合(此處嵌入對應於不同的顏色)將給出相同的嵌入。

這里真正重要的是,你可以先用某個函數 f(x) 將每個嵌入映射到一個新的嵌入,然後進行求和,得到一個單射函數。在證明中,它們實際上顯式地聲明了這個函數 f,這需要兩個額外條件,即 X 是可數的,且任何多重集都是有界的。

並且事實上,在訓練中並沒有任何東西可以保證這種單射性,而且可能還會有一些圖是 GIN 無法區分的,但WL可以。所以這是對 GIN 的一個很強的假設,如果違反了這一假設,那麼 GIN 的性能將受到限制。

神經網路演算法的普適性是:

研究模型的局限性通常更容易獲得對模型的洞察。畢竟,網路所不能學到的關於特定特徵的知識在應用時獨立於訓練過程。

此外,通過幫助我們理解與模型相關的任務的難度,不可能性結果(impossibility result)有助於得出關於如何選擇模型超參數的實用建議。

以圖分類問題為例。訓練一個圖分類器需要識別是什麼構成了一個類,即在同一個類而非其他類中找到圖共享的屬性,然後決定新的圖是否遵守所學習到的屬性。

然而,如果可以通過一定深度的圖神經網路(且測試集足夠多樣化)證明上述決策問題是不可能的,那麼我們可以確定,同一個網路將不會學習如何正確地對測試集進行分類,這與使用了什麼學習演算法無關。因此,在進行實驗時,我們應該把重點放在比下限更深的網路上。

④ 超大規模圖神經網路系統真的可以實現賦予機器常識嗎

機器學習是人工智慧的一個分支。

人工智慧的研究歷史有著一條從以「推理」為重點,到以「知識」為重點,再到以「學習」為重點的自然、清晰的脈絡。

機器學習是實現人工智慧的一個途徑,即以機器學習為手段解決人工智慧中的問題。

隨著越來越多的這類技術變得成熟,機器將會在各種各樣的任務上超越人類。

那麼,機器是否可以理解自己呢?甚至機器是否可以設計和編碼自己本身呢?

可以想像一下,一旦機器做到這一步,那將會帶來什麼樣的顛覆。

Google Brain團隊在探索這個領域,他們稱之為「自動機器學習」方向。

頂尖的人工智慧專家們發現,設計機器學習系統本身這樣一個他們最困難的工作之一,也有可能通過AI系統自動完成。

甚至在一些場景下,AI系統自己開發的AI系統已經趕上甚至超過了人類專家。

國外著名科技記者 Steven Levy 在他刊於 BackChannel 的文章《谷歌如何將自己重塑為一家「機器學習為先」的公司》中提到,谷歌大腦負責人 Jeff Dean 表示,如果現在讓他改寫谷歌的基礎設施,大部分代碼都不會由人編碼,而將由機器學習自動生成。

學術界也有相關研究,伯克利的 Ke Li 和 Jitendra Malik 在他們日前提交的論文《Learning to Optimize》中提出了讓演算法自我優化的方法。

他們在論文摘要中寫道,「演算法設計是一個費力的過程,通常需要許多迭代的思想和驗證。 在本文中,我們探討自動化演算法設計,並提出了一種方法學習自動優化演算法」。

從強化學習的角度入手,Ke Li 和 Jitendra Malik 使用指導性策略搜索來讓 AI 學習優化演算法,並且證明了他們所設計的演算法在收斂速度和/或最終目標值方面優於現有的手工編程開發的演算法。

⑤ 圖神經網路是什麼

圖神經網路是一種直接作用於圖結構上的神經網路。GNN的一個典型應用是節點分類。本質上,圖中的每個節點都與一個標簽相關聯,我們希望預測未標記節點的標簽。

⑥ 為什麼有圖卷積神經網路

本質上說,世界上所有的數據都是拓撲結構,也就是網路結構,如果能夠把這些網路數據真正的收集、融合起來,這確實是實現了AI智能的第一步。所以,如何利用深度學習處理這些復雜的拓撲數據,如何開創新的處理圖數據以及知識圖譜的智能演算法是AI的一個重要方向。
深度學習在多個領域的成功主要歸功於計算資源的快速發展(如 GPU)、大量訓練數據的收集,還有深度學習從歐幾里得數據(如圖像、文本和視頻)中提取潛在表徵的有效性。但是,盡管深度學習已經在歐幾里得數據中取得了很大的成功,但從非歐幾里得域生成的數據已經取得更廣泛的應用,它們需要有效分析。如在電子商務領域,一個基於圖的學習系統能夠利用用戶和產品之間的交互以實現高度精準的推薦。在化學領域,分子被建模為圖,新葯研發需要測定其生物活性。在論文引用網路中,論文之間通過引用關系互相連接,需要將它們分成不同的類別。自2012年以來,深度學習在計算機視覺以及自然語言處理兩個領域取得了巨大的成功。假設有一張圖,要做分類,傳統方法需要手動提取一些特徵,比如紋理,顏色,或者一些更高級的特徵。然後再把這些特徵放到像隨機森林等分類器,給到一個輸出標簽,告訴它是哪個類別。而深度學習是輸入一張圖,經過神經網路,直接輸出一個標簽。特徵提取和分類一步到位,避免了手工提取特徵或者人工規則,從原始數據中自動化地去提取特徵,是一種端到端(end-to-end)的學習。相較於傳統的方法,深度學習能夠學習到更高效的特徵與模式。
圖數據的復雜性對現有機器學習演算法提出了重大挑戰,因為圖數據是不規則的。每張圖大小不同、節點無序,一張圖中的每個節點都有不同數目的鄰近節點,使得一些在圖像中容易計算的重要運算(如卷積)不能再直接應用於圖。此外,現有機器學習演算法的核心假設是實例彼此獨立。然而,圖數據中的每個實例都與周圍的其它實例相關,含有一些復雜的連接信息,用於捕獲數據之間的依賴關系,包括引用、朋友關系和相互作用。
最近,越來越多的研究開始將深度學習方法應用到圖數據領域。受到深度學習領域進展的驅動,研究人員在設計圖神經網路的架構時借鑒了卷積網路、循環網路和深度自編碼器的思想。為了應對圖數據的復雜性,重要運算的泛化和定義在過去幾年中迅速發展。

⑦ 圖神經網路是怎麼煉成的:GNN基本原理簡介

此文算是對Google Research這篇 A Gentle Introction to Graph Neural Networks 神作的閱讀筆記.

十多年來,研究人員開發了一種稱之為圖神經網路(Graph Neural Networks,GNNs)的技術,旨在將如今在深度學習的諸多任務中摧枯拉朽的神經網路,應用到圖結構之上,從而讓神經網路捕捉到更錯綜復雜的交叉特徵,以期待在一些任務上取得更佳的效果。鑒於操作圖數據結構的復雜性,盡管已經發展了十幾年,它在實際應用中卻剛剛起步,即時是google也才開始研究將其被應用到葯品研發、物理模擬、假新聞檢測、交通預測和推薦系統等領域。

盡管GNN是一個新興的研究領域,但圖結構的數據其實在我們身邊無處不在。那麼什麼是圖呢?

這個理科生應該都清楚,圖有點(Vertex)和邊(Edge)兩部分組成,一個圖就代表了各個實體節點(node)之間的關系(edge):

每個節點或者邊都可以包含它的一些屬性信息,比如如果一個節點表示一個人,那麼就可以包含這個人的姓名、性別、身高、體重之類的..我們研究需要的信息。
而這些信息,都可以用通用的向量的形式存入其中:

還有別忘了一點,邊是可以有方向的,按此我們還能分為有向圖或是無向圖。邊的方向代表了信息的傳遞方向,例如a是b的微信好友,那b也是a的微信好友,好友關系自然是沒方向的,而比如a是b的爹,那顯然b就不是a的爹,此時叫爹的關系就是有有方向的。

圖結構的構建是非常靈活的,可以根據個人的設計構建出各種不一樣的圖。而作為開發者顯然要結合實際解決的問題來構建合適的圖。

正如前面所提到的,圖無處不在。你可能已經熟悉例如知識圖譜、社交網路之類的圖數據。當時顯然,圖是一種極其強大的通用數據表示,傳統神經網路中用到的歐式空間的數據,同樣可以用圖來表示,例如可以將圖像和文本建模為圖結構數據。

比如,我們可以將一張圖片的每個像素作為圖的節點,再將相鄰的像素用邊連接起來,就構造了一個該圖像的圖。

如上圖展示了一個5*5的圖片的鄰接矩陣表示和圖表示。

我們將每個單詞作為節點,並將每個節點連接到下一個節點,就得到了一個文本的圖:

當然,在實踐中我們並不會這樣來編碼文本和圖像,因為所有的圖和文本都是非常規則的結構,表示成圖就多此一舉了。
我們再來看一些例子,這些數據的結構更加復雜,除了圖之外很難用其他方式來表達。

分子是構成物質的基石,我們可以用節點來表示它的原子和電子,用邊來表示共價鍵,這樣便將一個分子表示成了一個圖:

不同的圖可以表示出不同的分子結構:

都說社會是一個大熔爐,身處其中的人和事物之間會發生極其復雜的關系。這種關系的表示用普通的表格數據是很難表示的,而圖卻能很好的展現。

下圖是將莎士比亞歌劇《奧賽羅》中的任務關系表示成圖:

怎麼樣,如果沒看過歌劇能推測出那些是主角嗎?

下面是將一個空手道競標賽的對戰關系構建為圖:

類似的可以表示為圖的數據還有很多很多,比如論文的引用之類統統都可以表示為圖,下面是現實世界中不同規模的數據圖表示的統計數據:

可見,各種各樣規模的數據都可以輕松的用圖來表示。

在上面我們列舉了這么多的圖,那麼我們該對這些圖數據執行什麼任務呢?

圖上的預測任務一般分為三類:

下面我們通過具體的示例來說明GNN怎麼來解決上述的三個級別的預測問題。

在圖級別的任務中,我們的目標是預測整個圖的屬性。例如我們通過分子圖,來預測該分子的氣味或是者它是否是與某些疾病有關的受體。
它的輸入是完整的圖:

輸出是圖的分類:

節點級任務一般就是預測每個節點的類型。
一個經典的例子就是Zach的空手道俱樂部。該數據集市一個單一的社交網路圖,猶豫政治分歧,講師Hi先生和管理員John之間不和導致空手道俱樂部分裂,其中的學員一部分效忠於Hi先生,一部分效忠於John。每個節點代表空手道聯系著,邊代表空手道之外這些成員的互動,預測問題就是判斷這些節點是效忠於誰的。

邊級任務其實就是預測每個邊的屬性.
在目標檢測的語義分割任務中,我們也許不止要識別每個目標的類型,還需要預測各個目標之間的關系.我們可以將其描述為邊級別的分類任務:給定表示圖像中的對象的節點,我們希望預測哪些節點共享一條邊,或者該邊的值是多少。如果我們希望發現實體之間的連接,我們可以考慮圖是完全連通的,並根據它們的預測值修剪邊來得到一個稀疏圖。

用圖表示就是這樣的過程:

那麼我們要如何使用神經網路來處理上述各種類型的任務呢?

首先要考慮的是如何將圖結構數據適配到神經網路.
回想一下啊,傳統的神經網路輸入的往往是矩陣形式的數據,那麼要如何把圖作為輸入呢?
圖表示有四種類型的信息:節點(nodes),邊(edges),全局上下文(global-context),聯通性(connectivity).對於前三種信息,有一個非常簡單的方案,比如將節點排序,然後每個節點表示為一個向量,所有節點就得到了一個節點的矩陣,同理,邊和上下文也可以這么搞.
但是要標識連通性就沒有這么簡單了,也許你會想到用臨街矩陣來表示,但是這樣表示會有明顯的缺陷,因為節點數的規模往往是巨大的,對於一個數百萬節點的圖,那將耗費大量的空間,而且得到的矩陣往往也十分的稀疏,可以說空間利用率會很低.
當然,你也許會想,可以用稀疏矩陣來存儲,這樣就只需要存儲連通的情況,空間利用率將大大提升,但是我們還要考慮到一點,就是稀疏矩陣的高性能計算一直是個艱難的,尤其是在用到GPU的情況.
並且,使用鄰接矩陣還有一個問題就是各種不同的鄰接矩陣可以標識相同的連通性,而這些矩陣並不能保證在神經網路中取的相同的效果.比如,同樣的連通性,通過調換列的順序,就能得到不同的鄰接矩陣:

現在,我們成功的將圖結構成功表示成了置換不變的矩陣格式,終於可以使用圖形神經網路(GNN)來做圖形預測任務了。
GNN是對保持圖對稱性(置換不變性)的圖的所有屬性(節點、邊、全局上下文)的可優化變換。
我們將使用Gilmer等人提出的「消息傳遞神經網路」框架構建GNN,並使用Battaglia等人介紹的圖網路網路架構示意圖。GNNS採用「圖輸入,圖輸出」架構,這意味著這些模型類型接受圖作為輸入,其中包含節點,邊和全局上下文的信息,並逐步地轉換這些圖嵌入,而不會更改輸入的連接圖結構。

我們使用最開始提到的那個圖來構建一個最簡單的GNN,輸入的圖是相應節點,邊,全局信息的向量,我們針對每個向量使用一個MLP層來作變換,於是得到一個新的圖.

針對上述構建的最簡單的GNN,我們如何在上面描述的任何任務中進行預測呢?這里我們僅僅考慮二進制分類的情況,但這個框架可以很容易地擴展到多類或回歸的情況。
如果是對節點分類,我們只要在最後一層接一個線性類器就可以了:

但是上面的預測過程有點過於簡單了,完全沒有用到圖的結構信息,我們在此基礎上增加一個pooling操作,以增加它的邊緣信息:

具體操作是把待預測節點的鄰居節點以及全局的信息進行聚合再做預測,即將這些embedding向量加到一起得到一個新的向量,再輸入到最後的線性分類器.

同理,如果我們只有節點相應邊的信息的話,也可以用類似的方式pooling,然後得到節點的向量表示再輸入分類器:

反之,如果我們只有節點的信息,那麼也可以用邊所連接的兩個節點來pooling出邊的向量,然後將器輸入到分類器預測邊的類型:

顯然,不管是哪種任務,整個GNN的推理過程都是一樣的,可以表示為這樣一個端到端的過程:

不過,顯而易見的,這個簡單的GNN在分類前只是對每個向量進行了一個變換,而沒有用到圖結構的任何信息,雖然在最後做預測的時候做了一些pooling的聚合,但也始終沒有用到adjacency的信息,因此這個GNN的作用相當有限,但是它為我們提供了一個圖結構層變換和堆疊的基本思路.

針對上面最簡單GNN的不足,我們可以在其中根據連通性增加更加復雜的變換從而引入整個圖結構的信息,我們將這個過程稱之為信息傳遞.
信息傳遞包含三個步驟:

這個過程有點類似於卷積操作,每個節點匯聚了其鄰居的節點,經過多個層的變換,它將涵蓋全圖的信息.
於是我們可以將這個節點信息傳遞應用到上述的圖變換過程中:

然後,我們發現它並沒用用上邊的信息,於是可以把邊信息也加上,變成這樣:

既然把邊的信息加上了,那怎麼可以漏掉全局信息呢,於是完整的信息傳遞就可以表示成這樣:

以上,我們梳理了最簡單的GNNs是怎麼完成的,你應該已經對GNN有了一個基本的了解,就像學會了傳統神經網路中最簡單的全連接網路類似,關於GNN還有更多不同種類的更復雜的圖需要取了解和學習,但你只要掌握了以上的思想,學習起來也是十分容易的.

閱讀全文

與圖神經網路知識蒸餾相關的資料

熱點內容
深度過濾器廠家 瀏覽:381
米家空氣凈化器2怎麼拆開 瀏覽:917
工業潤滑油過濾市場 瀏覽:495
醫院污水池除臭排放標准 瀏覽:166
陰離子陽離子交換膜 瀏覽:123
戴森空氣凈化器濾芯怎麼拆 瀏覽:928
凈化器上面顯示復位什麼意思 瀏覽:999
凈水器里有什麼水可以做霧化 瀏覽:396
蒸餾石油的分餾 瀏覽:744
飲水機水桶為什麼會變綠 瀏覽:803
飲水機熱水往上出是什麼意思 瀏覽:627
如何當好污水處理廠的班長 瀏覽:327
微動力污水處理器 瀏覽:729
四氯化碳如何蒸餾水 瀏覽:950
廢水資源化問題與出路 瀏覽:705
樹脂補牙還要打磨 瀏覽:189
什麼叫做雨污水陰陽管 瀏覽:438
廢水處理ph是什麼意思 瀏覽:17
反滲透凈水器有廢水比是什麼意思 瀏覽:507
凈化器過濾芯怎麼取出 瀏覽:837