計(jì)算機(jī)視覺及其后的圖神經(jīng)網(wǎng)絡(luò)教程(第一部分)
概述我在本文將回答那些不熟悉圖或圖神經(jīng)網(wǎng)絡(luò)的AI/ML/CV的用戶通常會(huì)問的問題。我提供了Pytorch的例子來(lái)澄清這種相對(duì)新穎和令人興奮的模型背后的思路。
我在本部分教程中提出的問題是:
為什么圖這種數(shù)據(jù)結(jié)構(gòu)有用?
為什么在圖上定義卷積是困難的?
什么使神經(jīng)網(wǎng)絡(luò)成為圖神經(jīng)網(wǎng)絡(luò)?
為了回答這些問題,我將提供激勵(lì)性的示例、論文和python代碼,使其成為圖神經(jīng)網(wǎng)絡(luò)(GNNs)的教程。讀者需要一些基本的機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺知識(shí),但是,我隨著我的講述我也會(huì)提供一些背景和直觀的解釋。
首先,讓我們簡(jiǎn)單回顧一下什么是圖?圖是由有向/無(wú)向邊連接的一組節(jié)點(diǎn)(頂點(diǎn))。節(jié)點(diǎn)和邊通常來(lái)自于關(guān)于問題的一些專家知識(shí)或直覺。因此,它可以是分子中的原子、社交網(wǎng)絡(luò)中的用戶、交通系統(tǒng)中的城市、團(tuán)隊(duì)運(yùn)動(dòng)中的運(yùn)動(dòng)員、大腦中的神經(jīng)元、動(dòng)態(tài)物理系統(tǒng)中的相互作用對(duì)象、圖像中的像素、邊界框或分割遮罩。換言之,在許多實(shí)際情況下,實(shí)際上是您決定了什么是圖中的節(jié)點(diǎn)和邊。
在許多實(shí)際情況下,實(shí)際上是你來(lái)決定圖中的節(jié)點(diǎn)和邊是什么。
這是一個(gè)非常靈活的數(shù)據(jù)結(jié)構(gòu),它概括了許多其他的數(shù)據(jù)結(jié)構(gòu)。例如,如果沒有邊,那么它就成為一個(gè)集合;如果只有“垂直”邊,并且任何兩個(gè)節(jié)點(diǎn)正好由一條路徑連接,那么我們就有一棵樹。這種靈活性是好的和壞的,我將在本教程中討論。
1. 為什么圖這種數(shù)據(jù)結(jié)構(gòu)有用?
在計(jì)算機(jī)視覺(cv)和機(jī)器學(xué)習(xí)(ml)的背景下,研究圖形和從中學(xué)習(xí)的模型至少可以給我們帶來(lái)四個(gè)好處:
1.1 我們可以更接近解決以前太具挑戰(zhàn)性的重要問題,例如:癌癥的藥物發(fā)現(xiàn)(Veselkov等人,Nature,2019);更好地理解人腦連接體(Diez&Sepulcre,Nature Communications,2019);能源和環(huán)境挑戰(zhàn)的材料發(fā)現(xiàn)(Xie等人,自然通訊,2019)。
1.2 在大多數(shù)cv/ml應(yīng)用程序中,數(shù)據(jù)實(shí)際上可以看作是圖,即使您曾經(jīng)將它們表示為另一個(gè)數(shù)據(jù)結(jié)構(gòu)。將你的數(shù)據(jù)表示為圖形可以給你帶來(lái)很多靈活性,并且可以給你一個(gè)非常不同和有趣的視角來(lái)看待你的問題。例如,您可以從“超級(jí)像素”學(xué)習(xí),而不是從圖像像素學(xué)習(xí),如(Liang等人,ECCV2016)和我們即將發(fā)表的BMVC論文中所述。圖還允許您在數(shù)據(jù)中施加一種關(guān)系歸納偏差-一些關(guān)于該問題的先驗(yàn)知識(shí)。例如,如果你想對(duì)人體姿勢(shì)進(jìn)行推理,你的關(guān)系偏差可以是人體骨骼關(guān)節(jié)的圖(Yan等人,AAAI,2018);或者如果你想對(duì)視頻進(jìn)行推理,你的關(guān)系偏差可以是移動(dòng)邊界框的圖(Wang&Gupta,ECCV2018)。另一個(gè)例子是將面部地標(biāo)表示為圖(Antonakos等人,CVPR,2015),以對(duì)面部屬性和身份進(jìn)行推理。
1.3 您最喜歡的神經(jīng)網(wǎng)絡(luò)本身可以看作是一個(gè)圖,其中節(jié)點(diǎn)是神經(jīng)元,邊是權(quán)重,或者節(jié)點(diǎn)是層,邊表示向前/向后傳遞的流(在這種情況下,我們討論的是在tensorflow、pytorch和其他dl框架中使用的計(jì)算圖)。應(yīng)用程序可以是計(jì)算圖的優(yōu)化、神經(jīng)結(jié)構(gòu)搜索、分析訓(xùn)練行為等。
1.4 最后,您可以更有效地解決許多問題,其中數(shù)據(jù)可以更自然地表示為圖形。這包括但不限于分子和社會(huì)網(wǎng)絡(luò)分類(Knyazev et al.,Neurips-W,2018)和生成(Simonovsky&Komodakis,ICANN,2018)、三維網(wǎng)格分類和對(duì)應(yīng)(Fey et al.,CVPR,2018)和生成(Wang et al.,ECCVV,2018)、動(dòng)態(tài)交互對(duì)象的建模行為(Kipf et al.,ICML,2018),視覺場(chǎng)景圖建模(見即將召開的ICcv研討會(huì))和問答(Narasimhan,Neurips,2018),程序合成(Allamanis等人,ICLR,2018),不同的強(qiáng)化學(xué)習(xí)任務(wù)(Bapst等人,ICML,2019)和許多其他令人興奮的問題。
由于我之前的研究是關(guān)于識(shí)別和分析面部和情緒的,所以我特別喜歡下面這個(gè)圖。
2. 為什么在圖上定義卷積是困難的?
為了回答這個(gè)問題,我首先給出了一般使用卷積的一些動(dòng)機(jī),然后用圖的術(shù)語(yǔ)來(lái)描述“圖像上的卷積”,這應(yīng)該使向“圖上的卷積”的過(guò)渡更加平滑。
2.1 為什么卷積有用?
讓我們理解為什么我們?nèi)绱岁P(guān)心卷積,為什么我們想用它來(lái)繪制圖形。與完全連接的神經(jīng)網(wǎng)絡(luò)(a.k.a(chǎn).nns或mlps)相比,卷積網(wǎng)絡(luò)(a.k.a(chǎn).cnns或convnets)具有以下根據(jù)一輛漂亮的老雪佛蘭的圖像解釋的某些優(yōu)點(diǎn)。
首先,ConvNets利用圖像中的自然先驗(yàn),在(Bronstein等人,2016)中對(duì)此進(jìn)行了更正式的描述,例如
1.平移不變性-如果我們將上圖中的汽車向左/向右/向上/向下平移,我們?nèi)匀粦?yīng)該能夠?qū)⑵渥R(shí)別為汽車。通過(guò)在所有位置共享過(guò)濾器,即應(yīng)用卷積,可以利用這一點(diǎn)。
2.位置-附近的像素緊密相關(guān),通常代表某種語(yǔ)義概念,例如滾輪或窗戶。通過(guò)使用相對(duì)較大的濾波器可以利用這一點(diǎn),該濾波器可以捕獲局部空間鄰域中的圖像特征。
3.組成性(或?qū)哟谓Y(jié)構(gòu))-圖像中較大的區(qū)域通常是其包含的較小區(qū)域的語(yǔ)義父級(jí)。例如,汽車是車門、車窗、車輪、駕駛員等的父對(duì)象,而駕駛員是頭部、手臂等的父對(duì)象。這是通過(guò)疊加卷積層和應(yīng)用池隱式利用的。
其次,卷積層中可訓(xùn)練參數(shù)(即濾波器)的數(shù)量不取決于輸入維數(shù),因此從技術(shù)上講,我們可以在28×28和512×512圖像上訓(xùn)練完全相同的模型。換句話說(shuō),模型是參數(shù)化的。
理想情況下,我們的目標(biāo)是開發(fā)一種與Graph Neural Nets一樣靈活的模型,可以從任何數(shù)據(jù)中進(jìn)行摘要和學(xué)習(xí),但是與此同時(shí),我們希望通過(guò)打開/關(guān)閉某些先驗(yàn)條件來(lái)控制(調(diào)節(jié))這種靈活性的因素。
所有這些出色的屬性使ConvNets不太容易過(guò)度擬合(訓(xùn)練集的準(zhǔn)確性較高,而驗(yàn)證/測(cè)試集的準(zhǔn)確性較低),在不同的視覺任務(wù)中更為準(zhǔn)確,并且可以輕松地?cái)U(kuò)展到大型圖像和數(shù)據(jù)集。 因此,當(dāng)我們要解決輸入數(shù)據(jù)采用圖結(jié)構(gòu)的重要任務(wù)時(shí),將所有這些屬性轉(zhuǎn)移到圖神經(jīng)網(wǎng)絡(luò)GNN以規(guī)范其靈活性并使其具有可擴(kuò)展性就很有吸引力。 理想情況下,我們的目標(biāo)是開發(fā)一種與GNN一樣靈活的模型,并且可以從任何數(shù)據(jù)中進(jìn)行摘要和學(xué)習(xí),但是與此同時(shí),我們希望通過(guò)打開/關(guān)閉某些先驗(yàn)條件來(lái)控制(調(diào)節(jié))這種靈活性的因素。 這可以打開許多有趣方向的研究。 然而,控制這種折衷是具有挑戰(zhàn)性的。
2.2 用圖對(duì)圖像進(jìn)行卷積
讓我們考慮一個(gè)具有N個(gè)節(jié)點(diǎn)的無(wú)向圖G。 邊E表示節(jié)點(diǎn)之間的無(wú)向連接。 節(jié)點(diǎn)和邊通常來(lái)自您對(duì)問題的直覺。 對(duì)于圖像,我們的直覺是節(jié)點(diǎn)是像素或超像素(一組怪異形狀的像素),邊緣是它們之間的空間距離。 例如,左下方的MNIST圖像通常表示為28×28尺寸的矩陣。 我們也可以將其表示為一組N = 28 * 28 = 784像素。 因此,我們的圖形G將具有N = 784個(gè)節(jié)點(diǎn),并且邊緣位置較近的像素的邊緣將具有較大的值(下圖中的較厚邊緣),而遠(yuǎn)程像素的邊緣將具有較小的值(較薄的邊緣)。
當(dāng)我們?cè)趫D像上訓(xùn)練神經(jīng)網(wǎng)絡(luò)或ConvNets時(shí),我們?cè)趫D上隱式定義了圖像-下圖是一個(gè)規(guī)則的二維網(wǎng)格。 由于此網(wǎng)格對(duì)于所有訓(xùn)練和測(cè)試圖像都是相同的,并且是規(guī)則的,即,網(wǎng)格的所有像素在所有圖像上都以完全相同的方式彼此連接(即,具有相同的鄰居數(shù),邊長(zhǎng)等)。 則此規(guī)則網(wǎng)格圖沒有任何信息可幫助我們將一個(gè)圖像與另一個(gè)圖像區(qū)分開。 下面,我可視化一些2D和3D規(guī)則網(wǎng)格,其中節(jié)點(diǎn)的順序用顏色編碼。 順便說(shuō)一句,我正在Python中使用NetworkX來(lái)做到這一點(diǎn),e.g. G = networkx.grid_graph([4, 4])。
有了這個(gè)4×4的規(guī)則網(wǎng)格,讓我們簡(jiǎn)要地看一下2D卷積的工作原理,以了解為什么很難將此運(yùn)算符轉(zhuǎn)換為圖形。 規(guī)則網(wǎng)格上的過(guò)濾器具有相同的節(jié)點(diǎn)順序,但是現(xiàn)代卷積網(wǎng)絡(luò)通常具有較小的濾波器,例如下面的示例中的3×3。 該濾波器具有9個(gè)值:W 1,W 2,…,W 3,這是我們?cè)谑褂梅聪騻鞑テ鬟M(jìn)行訓(xùn)練期間正在更新的值,以最大程度地減少損耗并解決下游任務(wù)。 在下面的示例中,我們?cè)囂叫缘貙⒋诉^(guò)濾器初始化為邊緣檢測(cè)器。
當(dāng)我們進(jìn)行卷積時(shí),我們會(huì)在兩個(gè)方向上滑動(dòng)該濾波器:向右和向底部滑動(dòng),但是沒有什么可以阻止我們從底角開始—重要的是要在所有可能的位置滑動(dòng)。 在每個(gè)位置,我們計(jì)算網(wǎng)格上的值(用X表示)與濾鏡值W之間的點(diǎn)積:W:X?W?+ X?W? +…+X?W?,并將結(jié)果存儲(chǔ)在輸出圖像中。 在我們的可視化中,我們?cè)诨瑒?dòng)過(guò)程中更改節(jié)點(diǎn)的顏色以匹配網(wǎng)格中節(jié)點(diǎn)的顏色。 在常規(guī)網(wǎng)格中,我們總是可以將X?W?的節(jié)點(diǎn)與網(wǎng)格的節(jié)點(diǎn)進(jìn)行匹配。 不幸的是,對(duì)于圖而言,情況并非如此,我將在下面進(jìn)行解釋。
上面使用的點(diǎn)積是所謂的“聚合運(yùn)算符”之一。 廣義上講,聚合運(yùn)算符的目標(biāo)是將數(shù)據(jù)匯總為簡(jiǎn)化形式。 在上面的示例中,點(diǎn)積將3×3矩陣匯總為單個(gè)值。 另一個(gè)示例是ConvNets中的池化。 請(qǐng)記住,最大池或總池之類的方法是置換不變的,即,即使您隨機(jī)改組該區(qū)域內(nèi)的所有像素,它們也會(huì)從空間區(qū)域中合并相同的值。 為了明確起見,點(diǎn)積不是排列不變的,僅僅是因?yàn)橥ǔ#篨?W?+X?W? ≠X?W?+X?W?。
現(xiàn)在,讓我們使用我們的MNIST圖像并說(shuō)明常規(guī)網(wǎng)格,濾波器和卷積的含義。 請(qǐng)記住我們的圖形術(shù)語(yǔ),這個(gè)規(guī)則的28×28網(wǎng)格將成為我們的圖形G,因此該網(wǎng)格中的每個(gè)單元都是一個(gè)節(jié)點(diǎn),并且節(jié)點(diǎn)特征是實(shí)際的圖像X,即每個(gè)節(jié)點(diǎn)將只有一個(gè)特征-像素 強(qiáng)度從0(黑色)到1(白色)。
接下來(lái),我們定義一個(gè)濾波器,并使其成為具有一些(幾乎)任意參數(shù)的著名Gabor濾波器。 一旦有了圖像和濾波器,我們就可以通過(guò)在該圖像上滑動(dòng)濾波器(在本例中為7位)并將點(diǎn)積的結(jié)果放置到輸出矩陣上來(lái)執(zhí)行卷積。
這一切都很酷,但是正如我之前提到的,當(dāng)您嘗試將卷積推廣到圖時(shí),這變得很棘手。
節(jié)點(diǎn)是一個(gè)集合,該集合的任何排列都不會(huì)更改它。因此,人們應(yīng)用的聚合運(yùn)算符應(yīng)該是不變排列的
正如我已經(jīng)提到的,上面用于計(jì)算每個(gè)步驟的卷積的點(diǎn)積對(duì)順序很敏感。 這種靈敏度使我們能夠?qū)W習(xí)類似于Gabor濾波器的邊緣檢測(cè)器,這對(duì)于捕獲圖像特征很重要。 問題在于,在圖中沒有明確定義的節(jié)點(diǎn)順序,除非您學(xué)會(huì)對(duì)節(jié)點(diǎn)進(jìn)行排序,或者想出一些啟發(fā)式方法,否則將導(dǎo)致圖與圖之間的順序一致(規(guī)范)。 簡(jiǎn)而言之,節(jié)點(diǎn)是一個(gè)集合,并且此集合的任何排列都不會(huì)更改它。 因此,人們應(yīng)用的聚合運(yùn)算符應(yīng)該是不變排列的。 最受歡迎的選擇是所有鄰居的平均值(GCN,Kipf&Welling,ICLR,2017)和求和(GIN,Xu et al。,ICLR,2019),即求和或均值合并,然后通過(guò)可訓(xùn)練向量W進(jìn)行投影。 有關(guān)其他聚合器,請(qǐng)參見(Hamilton等人,NIPS,2017)。
例如,對(duì)于上面左上方的圖,節(jié)點(diǎn)1的求和聚合器的輸出為X?=(X?+X? +X?+X?)W?,對(duì)于節(jié)點(diǎn)2:X? =(X?+ X? +X?+X?) W?等對(duì)于節(jié)點(diǎn)3、4和5,即我們需要將此聚合器應(yīng)用于所有節(jié)點(diǎn)。結(jié)果,我們將獲得具有相同結(jié)構(gòu)的圖,但是節(jié)點(diǎn)特征現(xiàn)在將包含鄰居特征。我們可以使用相同的想法在右邊處理圖形。
通俗地講,人們稱這種平均或求和為“卷積”,因?yàn)槲覀円矎囊粋(gè)節(jié)點(diǎn)“滑動(dòng)”到另一個(gè)節(jié)點(diǎn),并在每個(gè)步驟中應(yīng)用一個(gè)聚合運(yùn)算符。 但是,請(qǐng)務(wù)必記住,這是一種非常特殊的卷積形式,其中的濾波器沒有方向感。 下面,我將展示這些濾波器的外觀,并給出如何使它們變得更好的想法。
3. 是什么使神經(jīng)網(wǎng)絡(luò)成為圖神經(jīng)網(wǎng)絡(luò)
您知道經(jīng)典神經(jīng)網(wǎng)絡(luò)是如何工作的,對(duì)嗎? 我們有一些C維特征X作為網(wǎng)絡(luò)的輸入。 使用我們正在運(yùn)行的MNIST示例,X將成為我們的C = 784維像素特征(即“展平”的圖像)。 這些特征乘以我們?cè)谟?xùn)練期間更新的C×F維度權(quán)重W,以使輸出更接近我們的期望。 結(jié)果可以直接用于解決任務(wù)(例如,在回歸的情況下),也可以進(jìn)一步饋入某種非線性(激活),如ReLU或其他可微分(或更精確地,可微分)的函數(shù)以形成多層網(wǎng)絡(luò)。 通常,某些層的輸出為:
MNIST中的信號(hào)是如此強(qiáng)大,以至于只要使用上面的公式和交叉熵?fù)p失,就可以得到91%的準(zhǔn)確度,而沒有任何非線性和其他技巧(我使用了經(jīng)過(guò)稍微修改的PyTorch示例來(lái)做到這一點(diǎn))。這種模型稱為多項(xiàng)式(或多類,因?yàn)槲覀冇?0類數(shù)字)邏輯回歸。
現(xiàn)在,我們?nèi)绾伟哑胀ǖ纳窠?jīng)網(wǎng)絡(luò)轉(zhuǎn)換成圖神經(jīng)網(wǎng)絡(luò)呢?正如您已經(jīng)知道的,GNNs背后的核心思想是通過(guò)“鄰居”進(jìn)行聚合。在這里,重要的是要理解,在許多情況下,實(shí)際上是您指定了“鄰居”。
讓我們先考慮一個(gè)簡(jiǎn)單的情況,當(dāng)您得到一些圖形時(shí)。例如,這可以是一個(gè)具有5個(gè)人的社交網(wǎng)絡(luò)的片段(子圖),一對(duì)節(jié)點(diǎn)之間的一條邊表示兩個(gè)人是否是朋友(或者其中至少一個(gè)人是這樣認(rèn)為的)。右下圖中的鄰接矩陣(通常表示為A)是一種以矩陣形式表示這些邊的方法,對(duì)于我們的深度學(xué)習(xí)框架而言非常方便。矩陣中的黃色單元格代表邊緣,而藍(lán)色表示沒有邊緣。
現(xiàn)在,讓我們基于像素坐標(biāo)為我們的MNIST示例創(chuàng)建一個(gè)鄰接矩陣A(文章末尾提供了完整的代碼):
import numpy as np
from scipy.spatial.distance import cdist
img_size = 28 # MNIST 圖片長(zhǎng)寬
col, row = np.meshgrid(np.a(chǎn)range(img_size), np.a(chǎn)range(img_size))
coord = np.stack((col, row), axis=2).reshape(-1, 2) / img_size
dist = cdist(coord, coord) # 見左下圖
sigma = 0.2 * np.pi # 高斯分布寬度
A = np.exp(- dist / sigma ** 2) # 見下圖中間
這是為視覺任務(wù)定義鄰接矩陣的一種典型方法,但并非唯一方法(Defferrard等,NIPS,2016;Bronstein等,2016)。該鄰接矩陣是我們的先驗(yàn)矩陣,也就是我們的歸納偏差,我們根據(jù)直覺將附近的像素連接在一起,而遠(yuǎn)端像素則不應(yīng)該或應(yīng)該具有非常薄的邊緣(較小的邊緣),以此強(qiáng)加給模型。這是由于觀察的結(jié)果,即在自然圖像中,附近的像素通常對(duì)應(yīng)于同一對(duì)象或頻繁交互的對(duì)象(我們?cè)诘?.1節(jié)中提到的局部性原理),因此連接此類像素非常有意義。
因此,現(xiàn)在,不僅有特征X,我們還有一些花哨的矩陣A,其值在[0,1]范圍內(nèi)。重要的是要注意,一旦我們知道輸入是一個(gè)圖,我們就假定沒有規(guī)范的節(jié)點(diǎn)順序在數(shù)據(jù)集中的所有其他圖上都是一致的。就圖像而言,這意味著假定像素是隨機(jī)混洗的。在實(shí)踐中,找到節(jié)點(diǎn)的規(guī)范順序在組合上是無(wú)法解決的。即使從技術(shù)上來(lái)說(shuō),對(duì)于MNIST,我們可以通過(guò)知道此順序來(lái)作弊(因?yàn)閿?shù)據(jù)最初來(lái)自常規(guī)網(wǎng)格),但它不適用于實(shí)際的圖數(shù)據(jù)集。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
3月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
4月30日立即下載>> 【村田汽車】汽車E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
5月15-17日立即預(yù)約>> 【線下巡回】2025年STM32峰會(huì)
-
即日-5.15立即報(bào)名>>> 【在線會(huì)議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評(píng) >> 【評(píng)選啟動(dòng)】維科杯·OFweek 2025(第十屆)人工智能行業(yè)年度評(píng)選
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀(jì)”爆發(fā)至今,五類新物種登上歷史舞臺(tái)
- 5 國(guó)產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計(jì)算迎來(lái)商業(yè)化突破,但落地仍需時(shí)間
- 7 東陽(yáng)光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開成長(zhǎng)空間
- 8 地平線自動(dòng)駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營(yíng)收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機(jī)器人東風(fēng)翻身?