學(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是怎么跑出來的?是因為我們發(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可以實現(xiàn)參數(shù)共享发绢。這就是CNN的精髓所在。
再回憶一下RNN系列经柴,它的對象是自然語言這樣的序列信息口锭,是一個一維的結(jié)構(gòu)介杆,RNN就是專門針對這些序列的結(jié)構(gòu)而設(shè)計的春哨,通過各種門的操作,使得序列前后的信息互相影響椰拒,從而很好地捕捉序列的特征燃观。
上面講的圖片或者語言便瑟,都屬于歐式空間的數(shù)據(jù)到涂,因此才有維度的概念,歐式空間的數(shù)據(jù)的特點就是結(jié)構(gòu)很規(guī)則浇雹。但是現(xiàn)實生活中昭灵,其實有很多很多不規(guī)則的數(shù)據(jù)結(jié)構(gòu)伐谈,典型的就是圖結(jié)構(gòu)衩婚,或稱拓?fù)浣Y(jié)構(gòu),如社交網(wǎng)絡(luò)柱徙、化學(xué)分子結(jié)構(gòu)护侮、知識圖譜等等储耐;即使是語言,實際上其內(nèi)部也是復(fù)雜的樹形結(jié)構(gòu)晦攒,也是一種圖結(jié)構(gòu)得哆;而像圖片贩据,在做目標(biāo)識別的時候,我們關(guān)注的實際上只是二維圖片上的部分關(guān)鍵點矾芙,這些點組成的也是一個圖的結(jié)構(gòu)剔宪。
圖的結(jié)構(gòu)一般來說是十分不規(guī)則的戈锻,可以認(rèn)為是無限維的一種數(shù)據(jù)格遭,所以它沒有平移不變性拒迅。每一個節(jié)點的周圍結(jié)構(gòu)可能都是獨一無二的,這種結(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ò)龙巨,實際上跟CNN的作用一樣,就是一個特征提取器诗赌,只不過它的對象是圖數(shù)據(jù)。GCN精妙地設(shè)計了一種從圖數(shù)據(jù)中提取特征的方法秸弛,從而讓我們可以使用這些特征去對圖數(shù)據(jù)進(jìn)行節(jié)點分類(node classification)铭若、圖分類(graph classification)、邊預(yù)測(link prediction)递览,還可以順便得到圖的嵌入表示(graph embedding)叼屠,可見用途廣泛。因此現(xiàn)在人們腦洞大開绞铃,讓GCN到各個領(lǐng)域中發(fā)光發(fā)熱镜雨。
二、GCN長啥樣儿捧,嚇人嗎
GCN的公式看起來還是有點嚇人的,論文里的公式更是嚇破了我的膽兒纯命。但后來才發(fā)現(xiàn)西剥,其實90%的內(nèi)容根本不必理會,只是為了從數(shù)學(xué)上嚴(yán)謹(jǐn)?shù)匕咽虑榻o講清楚亿汞,但是完全不影響我們的理解瞭空,尤其對于我這種“追求直覺,不求甚解”之人。
下面進(jìn)入正題咆畏,我們直接看看GCN的核心部分是什么亞子:
假設(shè)我們手頭有一批圖數(shù)據(jù)南捂,其中有N個節(jié)點(node),每個節(jié)點都有自己的特征旧找,我們設(shè)這些節(jié)點的特征組成一個N×D維的矩陣X溺健,然后各個節(jié)點之間的關(guān)系也會形成一個N×N維的矩陣A,也稱為鄰接矩陣(adjacency matrix)钮蛛。X和A便是我們模型的輸入鞭缭。
GCN也是一個神經(jīng)網(wǎng)絡(luò)層,它的層與層之間的傳播方式是:
我們先不用考慮為什么要這樣去設(shè)計一個公式魏颓。我們現(xiàn)在只用知道:?,這個部分甸饱,是可以事先算好的,因為D波浪由A計算而來叹话,而A是我們的輸入之一。
所以對于不需要去了解數(shù)學(xué)原理驼壶、只想應(yīng)用GCN來解決實際問題的人來說氏豌,你只用知道:哦,這個GCN設(shè)計了一個牛逼的公式箩溃,用這個公式就可以很好地提取圖的特征碌嘀。這就夠了涣旨,畢竟不是什么事情都需要知道內(nèi)部原理,這是根據(jù)需求決定的股冗。
為了直觀理解霹陡,我們用論文中的一幅圖:
上圖中的GCN輸入一個圖止状,通過若干層GCN每個node的特征從X變成了Z,但是浆洗,無論中間有多少層集峦,node之間的連接關(guān)系抠刺,即A,都是共享的速妖。
假設(shè)我們構(gòu)造一個兩層的GCN聪黎,激活函數(shù)分別采用ReLU和Softmax,則整體的正向傳播的公式為:
最后锦秒,我們針對所有帶標(biāo)簽的節(jié)點計算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ò)層嘛廊佩,是不是也可以呢闲昭?
實驗證明,即使就這么簡單的神經(jīng)網(wǎng)絡(luò)層序矩,就已經(jīng)很強(qiáng)大了簸淀。這個簡單模型應(yīng)該大家都能理解吧,這就是正常的神經(jīng)網(wǎng)絡(luò)操作租幕。
四、GCN有多牛
在看了上面的公式以及訓(xùn)練方法之后男窟,我并沒有覺得GCN有多么特別贾富,無非就是一個設(shè)計巧妙的公式嘛,也許我不用這么復(fù)雜的公式颤枪,多加一點訓(xùn)練數(shù)據(jù)或者把模型做深,也可能達(dá)到媲美的效果呢扇住。
但是一直到我讀到了論文的附錄部分盗胀,我才頓時發(fā)現(xiàn):GCN原來這么牛啊簿训!
為啥呢米间?
因為即使不訓(xùn)練,完全使用隨機(jī)初始化的參數(shù)W屈糊,GCN提取出來的特征就以及十分優(yōu)秀了逻锐!這跟CNN不訓(xùn)練是完全不一樣的雕薪,后者不訓(xù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的效果媲美了奠旺。
說的夸張一點,比賽還沒開始鄙信,GCN就已經(jīng)在終點了忿晕。看到這里我不禁猛拍大腿打呼:“NB鸦采!”
還沒訓(xùn)練就已經(jīng)效果這么好咕幻,那給少量的標(biāo)注信息,GCN的效果就會更加出色肄程。
看到這里选浑,我覺得玄叠,以后有機(jī)會读恃,確實得詳細(xì)地吧GCN背后的數(shù)學(xué)琢磨琢磨,其中的玄妙之處究竟為何狐粱,其物理本質(zhì)為何。這個時候互墓,回憶起在知乎上看到的各路大神從各種角度解讀GCN蒋搜,例如從熱量傳播的角度,從一個群體中每個人的工資的角度育谬,生動形象地解釋帮哈。這一刻,歷來痛恨數(shù)學(xué)的我娘侍,我感受到了一絲數(shù)學(xué)之美,于是凌晨兩點的我嚎杨,打開了天貓氧腰,下單了一本正版《數(shù)學(xué)之美》。哦箩帚,數(shù)學(xué)啊斤富,你真如一朵美麗的玫瑰,每次被你的美所吸引满力,都要深深受到刺痛轻纪,我何時才能懂得你刻帚、擁有你涩嚣?
其他關(guān)于GCN的點滴:
對于很多網(wǎng)絡(luò),我們可能沒有節(jié)點的特征航厚,這個時候可以使用GCN嗎幔睬?答案是可以的,如論文中作者對那個俱樂部網(wǎng)絡(luò)麻顶,采用的方法就是用單位矩陣 I 替換特征矩陣 X。
我沒有任何的節(jié)點類別的標(biāo)注队萤,或者什么其他的標(biāo)注信息矫钓,可以使用GCN嗎?當(dāng)然盈电,就如前面講的杯活,不訓(xùn)練的GCN熬词,也可以用來提取graph embedding,而且效果還不錯互拾。
GCN網(wǎng)絡(luò)的層數(shù)多少比較好颜矿?論文的作者做過GCN網(wǎng)絡(luò)深度的對比研究,在他們的實驗中發(fā)現(xiàn)骑疆,GCN層數(shù)不宜多替废,2-3層的效果就很好了椎镣。