學(xué)號:20021110085 ? ? ? ? ? ? ?姓名:鄭佳?
轉(zhuǎn)載:https://zhuanlan.zhihu.com/p/71200936
【嵌牛導(dǎo)讀】圖卷積神經(jīng)網(wǎng)絡(luò)掺逼,顧名思義就是在圖上使用卷積運(yùn)算,然而圖上的卷積運(yùn)算是什么東西豆励?為了解決這個問題題临梗,我們可以利用圖上的傅里葉變換辆影,再使用卷積定理爽篷,這樣就可以通過兩個傅里葉變換的乘積來表示這個卷積的操作掺逼。
【嵌牛鼻子】圖卷積神經(jīng)網(wǎng)絡(luò)(GCN)
【嵌牛正文】
GCN的概念首次提出于ICLR2017(成文于2016年):
一览祖、GCN是做什么的
在扎進(jìn)GCN的汪洋大海前,我們先搞清楚這個玩意兒是做什么的扭仁,有什么用垮衷。
深度學(xué)習(xí)一直都是被幾大經(jīng)典模型給統(tǒng)治著,如CNN乖坠、RNN等等搀突,它們無論再CV還是NLP領(lǐng)域都取得了優(yōu)異的效果,那這個GCN是怎么跑出來的熊泵?是因?yàn)槲覀儼l(fā)現(xiàn)了很多CNN仰迁、RNN無法解決或者效果不好的問題——圖結(jié)構(gòu)的數(shù)據(jù)。
回憶一下顽分,我們做圖像識別,對象是圖片卒蘸,是一個二維的結(jié)構(gòu)雌隅,于是人們發(fā)明了CNN這種神奇的模型來提取圖片的特征。CNN的核心在于它的kernel缸沃,kernel是一個個小窗口恰起,在圖片上平移,通過卷積的方式來提取特征趾牧。這里的關(guān)鍵在于圖片結(jié)構(gòu)上的平移不變性:一個小窗口無論移動到圖片的哪一個位置检盼,其內(nèi)部的結(jié)構(gòu)都是一模一樣的,因此CNN可以實(shí)現(xiàn)參數(shù)共享翘单。這就是CNN的精髓所在吨枉。
再回憶一下RNN系列,它的對象是自然語言這樣的序列信息哄芜,是一個一維的結(jié)構(gòu)貌亭,RNN就是專門針對這些序列的結(jié)構(gòu)而設(shè)計(jì)的,通過各種門的操作忠烛,使得序列前后的信息互相影響属提,從而很好地捕捉序列的特征。
上面講的圖片或者語言美尸,都屬于歐式空間的數(shù)據(jù)冤议,因此才有維度的概念,歐式空間的數(shù)據(jù)的特點(diǎn)就是結(jié)構(gòu)很規(guī)則师坎。但是現(xiàn)實(shí)生活中恕酸,其實(shí)有很多很多不規(guī)則的數(shù)據(jù)結(jié)構(gòu),典型的就是圖結(jié)構(gòu)胯陋,或稱拓?fù)浣Y(jié)構(gòu)蕊温,如社交網(wǎng)絡(luò)、化學(xué)分子結(jié)構(gòu)遏乔、知識圖譜等等义矛;即使是語言,實(shí)際上其內(nèi)部也是復(fù)雜的樹形結(jié)構(gòu)盟萨,也是一種圖結(jié)構(gòu);而像圖片捻激,在做目標(biāo)識別的時候制轰,我們關(guān)注的實(shí)際上只是二維圖片上的部分關(guān)鍵點(diǎn),這些點(diǎn)組成的也是一個圖的結(jié)構(gòu)胞谭。
圖的結(jié)構(gòu)一般來說是十分不規(guī)則的垃杖,可以認(rèn)為是無限維的一種數(shù)據(jù),所以它沒有平移不變性丈屹。每一個節(jié)點(diǎn)的周圍結(jié)構(gòu)可能都是獨(dú)一無二的调俘,這種結(jié)構(gòu)的數(shù)據(jù),就讓傳統(tǒng)的CNN旺垒、RNN瞬間失效彩库。所以很多學(xué)者從上個世紀(jì)就開始研究怎么處理這類數(shù)據(jù)了。這里涌現(xiàn)出了很多方法袖牙,例如GNN侧巨、DeepWalk、node2vec等等鞭达,GCN只是其中一種司忱,這里只講GCN,其他的后面有空再討論畴蹭。
GCN坦仍,圖卷積神經(jīng)網(wǎng)絡(luò),實(shí)際上跟CNN的作用一樣叨襟,就是一個特征提取器繁扎,只不過它的對象是圖數(shù)據(jù)。GCN精妙地設(shè)計(jì)了一種從圖數(shù)據(jù)中提取特征的方法,從而讓我們可以使用這些特征去對圖數(shù)據(jù)進(jìn)行節(jié)點(diǎn)分類(node classification)梳玫、圖分類(graph classification)爹梁、邊預(yù)測(link prediction),還可以順便得到圖的嵌入表示(graph embedding)提澎,可見用途廣泛姚垃。因此現(xiàn)在人們腦洞大開,讓GCN到各個領(lǐng)域中發(fā)光發(fā)熱盼忌。
二积糯、GCN長啥樣,嚇人嗎
GCN的公式看起來還是有點(diǎn)嚇人的谦纱,論文里的公式更是嚇破了我的膽兒看成。但后來才發(fā)現(xiàn),其實(shí)90%的內(nèi)容根本不必理會跨嘉,只是為了從數(shù)學(xué)上嚴(yán)謹(jǐn)?shù)匕咽虑榻o講清楚川慌,但是完全不影響我們的理解,尤其對于我這種“追求直覺偿荷,不求甚解”之人窘游。
下面進(jìn)入正題,我們直接看看GCN的核心部分是什么亞子:
假設(shè)我們手頭有一批圖數(shù)據(jù)跳纳,其中有N個節(jié)點(diǎn)(node)忍饰,每個節(jié)點(diǎn)都有自己的特征,我們設(shè)這些節(jié)點(diǎn)的特征組成一個N×D維的矩陣X寺庄,然后各個節(jié)點(diǎn)之間的關(guān)系也會形成一個N×N維的矩陣A艾蓝,也稱為鄰接矩陣(adjacency matrix)。X和A便是我們模型的輸入斗塘。
GCN也是一個神經(jīng)網(wǎng)絡(luò)層赢织,它的層與層之間的傳播方式是:
我們先不用考慮為什么要這樣去設(shè)計(jì)一個公式。我們現(xiàn)在只用知道:馍盟,這個部分于置,是可以事先算好的,因?yàn)镈波浪由A計(jì)算而來贞岭,而A是我們的輸入之一八毯。
所以對于不需要去了解數(shù)學(xué)原理、只想應(yīng)用GCN來解決實(shí)際問題的人來說瞄桨,你只用知道:哦话速,這個GCN設(shè)計(jì)了一個牛逼的公式,用這個公式就可以很好地提取圖的特征芯侥。這就夠了泊交,畢竟不是什么事情都需要知道內(nèi)部原理乳讥,這是根據(jù)需求決定的。
為了直觀理解廓俭,我們用論文中的一幅圖:
上圖中的GCN輸入一個圖云石,通過若干層GCN每個node的特征從X變成了Z,但是白指,無論中間有多少層留晚,node之間的連接關(guān)系酵紫,即A告嘲,都是共享的。
假設(shè)我們構(gòu)造一個兩層的GCN奖地,激活函數(shù)分別采用ReLU和Softmax橄唬,則整體的正向傳播的公式為:
最后,我們針對所有帶標(biāo)簽的節(jié)點(diǎn)計(jì)算cross entropy損失函數(shù):
就可以訓(xùn)練一個node classification的模型了参歹。由于即使只有很少的node有標(biāo)簽也能訓(xùn)練仰楚,作者稱他們的方法為半監(jiān)督分類。
當(dāng)然犬庇,你也可以用這個方法去做graph classification僧界、link prediction,只是把損失函數(shù)給變化一下即可臭挽。
三捂襟、GCN為什么是這個亞子
我前后翻看了很多人的解讀,但是讀了一圈欢峰,最讓我清楚明白為什么GCN的公式是這樣子的居然是作者Kipf自己的博客:http://tkipf.github.io/graph-convolutional-networks/推薦大家一讀葬荷。
作者給出了一個由簡入繁的過程來解釋:
我們的每一層GCN的輸入都是鄰接矩陣A和node的特征H,那么我們直接做一個內(nèi)積纽帖,再乘一個參數(shù)矩陣W宠漩,然后激活一下,就相當(dāng)于一個簡單的神經(jīng)網(wǎng)絡(luò)層嘛懊直,是不是也可以呢扒吁?
實(shí)驗(yàn)證明,即使就這么簡單的神經(jīng)網(wǎng)絡(luò)層室囊,就已經(jīng)很強(qiáng)大了雕崩。這個簡單模型應(yīng)該大家都能理解吧,這就是正常的神經(jīng)網(wǎng)絡(luò)操作波俄。
四晨逝、GCN有多牛
在看了上面的公式以及訓(xùn)練方法之后,我并沒有覺得GCN有多么特別懦铺,無非就是一個設(shè)計(jì)巧妙的公式嘛捉貌,也許我不用這么復(fù)雜的公式,多加一點(diǎn)訓(xùn)練數(shù)據(jù)或者把模型做深,也可能達(dá)到媲美的效果呢趁窃。
但是一直到我讀到了論文的附錄部分牧挣,我才頓時發(fā)現(xiàn):GCN原來這么牛啊醒陆!
為啥呢瀑构?
因?yàn)榧词共挥?xùn)練,完全使用隨機(jī)初始化的參數(shù)W刨摩,GCN提取出來的特征就以及十分優(yōu)秀了寺晌!這跟CNN不訓(xùn)練是完全不一樣的,后者不訓(xùn)練是根本得不到什么有效特征的澡刹。
然后作者做了一個實(shí)驗(yàn)呻征,使用一個俱樂部會員的關(guān)系網(wǎng)絡(luò),使用隨機(jī)初始化的GCN進(jìn)行特征提取罢浇,得到各個node的embedding陆赋,然后可視化:
可以發(fā)現(xiàn),在原數(shù)據(jù)中同類別的node嚷闭,經(jīng)過GCN的提取出的embedding攒岛,已經(jīng)在空間上自動聚類了。
而這種聚類結(jié)果胞锰,可以和DeepWalk灾锯、node2vec這種經(jīng)過復(fù)雜訓(xùn)練得到的node embedding的效果媲美了。
說的夸張一點(diǎn)胜蛉,比賽還沒開始挠进,GCN就已經(jīng)在終點(diǎn)了√懿幔看到這里我不禁猛拍大腿打呼:“NB领突!”
還沒訓(xùn)練就已經(jīng)效果這么好,那給少量的標(biāo)注信息案怯,GCN的效果就會更加出色君旦。
看到這里,我覺得嘲碱,以后有機(jī)會金砍,確實(shí)得詳細(xì)地吧GCN背后的數(shù)學(xué)琢磨琢磨,其中的玄妙之處究竟為何麦锯,其物理本質(zhì)為何恕稠。這個時候,回憶起在知乎上看到的各路大神從各種角度解讀GCN扶欣,例如從熱量傳播的角度鹅巍,從一個群體中每個人的工資的角度千扶,生動形象地解釋。這一刻骆捧,歷來痛恨數(shù)學(xué)的我澎羞,我感受到了一絲數(shù)學(xué)之美,于是凌晨兩點(diǎn)的我敛苇,打開了天貓妆绞,下單了一本正版《數(shù)學(xué)之美》。哦枫攀,數(shù)學(xué)啊括饶,你真如一朵美麗的玫瑰,每次被你的美所吸引脓豪,都要深深受到刺痛巷帝,我何時才能懂得你、擁有你扫夜?
其他關(guān)于GCN的點(diǎn)滴:
對于很多網(wǎng)絡(luò),我們可能沒有節(jié)點(diǎn)的特征驰徊,這個時候可以使用GCN嗎笤闯?答案是可以的,如論文中作者對那個俱樂部網(wǎng)絡(luò)棍厂,采用的方法就是用單位矩陣 I 替換特征矩陣 X颗味。
我沒有任何的節(jié)點(diǎn)類別的標(biāo)注,或者什么其他的標(biāo)注信息牺弹,可以使用GCN嗎浦马?當(dāng)然,就如前面講的张漂,不訓(xùn)練的GCN晶默,也可以用來提取graph embedding,而且效果還不錯航攒。
GCN網(wǎng)絡(luò)的層數(shù)多少比較好磺陡?論文的作者做過GCN網(wǎng)絡(luò)深度的對比研究,在他們的實(shí)驗(yàn)中發(fā)現(xiàn)漠畜,GCN層數(shù)不宜多币他,2-3層的效果就很好了。