通俗易懂:圖卷積神經網路入門詳解
作者 | 蟈蟈
來源 | 轉載自知乎使用者蟈蟈
【導讀】GCN問世已經有幾年了(2016年就誕生了),但是這兩年尤為火爆。本人愚鈍,一直沒能搞懂這個GCN為何物,最開始是看清華寫的一篇 三四十頁的綜述,讀了幾頁就沒讀了;後來直接拜讀GCN的開山之作,也是讀到中間的數學部分就跪了;再後來在知乎上看大神們的講解,直接被排山倒海般的公式——什麼傅立葉變換、什麼拉普拉斯運算元等等,給搞蒙了,越讀越覺得:“哇這些大佬好厲害,哎我怎麼這麼菜!”。
就這麼反反覆覆,嘗試一次放棄一次,終於慢慢有點理解了,慢慢從那些公式的裡跳了出來,看到了全域性,也就慢慢明白了GCN的原理。今天,我就記錄一下我對GCN“階段性”的理解。
GCN的概念首次提出於ICLR2017(成文於2016年):
一、GCN是做什麼的
在扎進GCN的 汪洋大海前,我們先搞清楚這個玩意兒是做什麼的,有什麼用。
深度學習一直都是被幾大經典模型給統治著,如CNN、RNN等等,它們無論再CV還是NLP領域都取得了優異的效果,那這個GCN是怎麼跑出來的?是因為我們發現了很多CNN、RNN無法解決或者效果不好的問題——圖結構的資料。
回憶一下,我們做影像識別,物件是圖片,是一個二維的結構,於是人們發明了CNN這種神奇的模型來提取圖片的特徵。CNN的核心在於它的kernel,kernel是一個個小視窗,在圖片上平移,透過卷積的方式來提取特徵。這裡的關鍵在於圖片結構上的 平移不變性:一個小視窗無論移動到圖片的哪一個位置,其內部的結構都是一模一樣的,因此CNN可以實現 引數共享。這就是CNN的精髓所在。
再回憶一下RNN系列,它的物件是自然語言這樣的序列資訊,是一個一維的結構,RNN就是專門針對這些序列的結構而設計的,透過各種門的操作,使得序列前後的資訊互相影響,從而很好地捕捉序列的特徵。
上面講的圖片或者語言,都屬於 歐式空間的資料,因此才有維度的概念,歐式空間的資料的特點就是結構很規則。但是現實生活中,其實有很多很多不規則的資料結構,典型的就是圖結構,或稱拓撲結構,如社交網路、化學分子結構、知識圖譜等等;即使是語言,實際上其內部也是複雜的樹形結構,也是一種圖結構;而像圖片,在做目標識別的時候,我們 關注的實際上只是二維圖片上的部分關鍵點,這些點組成的也是一個圖的結構。
圖的結構一般來說是十分不規則的,可以認為是 無限維的一種資料,所以它沒有 平移不變性。每一個節點的周圍結構可能都是獨一無二的,這種結構的資料,就讓傳統的CNN、RNN瞬間失效。所以很多學者從上個世紀就開始研究怎麼處理這類資料了。這裡湧現出了很多方法,例如GNN、DeepWalk、node2vec等等,GCN只是其中一種,這裡只講GCN,其他的後面有空再討論。
GCN,圖卷積神經網路,實際上跟CNN的作用一樣,就是一個特徵提取器,只不過它的物件是圖資料。GCN精妙地設計了一種從圖資料中提取特徵的方法,從而讓我們可以使用這些特徵去對圖資料進行 節點分類(node classification)、圖分類(graph classification)、邊預測(link prediction),還可以順便得到 圖的嵌入表示(graph embe dding),可見用途廣泛。因此現在人們腦洞大開,讓GCN到各個領域中發光發熱。
二、GCN長啥樣,嚇人嗎
GCN的公式看起來還是有點嚇人的,論文裡的公式更是嚇破了我的膽兒。但後來才發現,其實90%的內容根本不必理會,只是為了從數學上嚴謹地把事情給講清楚,但是完全不影響我們的理解,尤其對於我這種“追求直覺,不求甚解”之人。
下面進入正題,我們直接看看GCN的核心部分是什麼亞子:
假設我們手頭有一批圖資料,其中有N個節點(node),每個節點都有自己的特徵,我們設這些節點的特徵組成一個N×D維的矩陣X,然後各個節點之間的關係也會形成一個N×N維的矩陣A,也稱為鄰接矩陣(adjacency matrix)。X和A便是我們模型的輸入。
GCN也是一個神經網路層,它的層與層之間的傳播方式是:
這個公式中:
A波浪=A+I,I是單位矩陣
D波浪是A波浪的度矩陣(degree matrix),公式為
H是每一層的特徵,對於輸入層的話,H就是X
σ是非線性啟用函式
我們先不用考慮為什麼要這樣去設計一個公式。我們現在只用知道: 這個部分,是 可以事先算好的,因為D波浪由A計算而來,而A是我們的輸入之一。
所以對於不需要去了解數學原理、只想應用GCN來解決實際問題的人來說,你只用知道:哦,這個GCN設計了一個牛逼的公式,用這個公式就可以很好地提取圖的特徵。這就夠了,畢竟不是什麼事情都需要知道內部原理,這是根據需求決定的。
為了直觀理解,我們用論文中的一幅圖:
上圖中的GCN輸入一個圖,透過若干層GCN每個node的特徵從X變成了Z,但是,無論中間有多少層, node之間的連線關係,即A,都是共享的。
假設我們構造一個兩層的GCN,啟用函式分別採用ReLU和Softmax,則整體的正向傳播的公式為:
最後,我們針對所有帶標籤的節點計算cross entropy損失函式:
就可以訓練一個node classification的模型了。由於即使只有很少的node有標籤也能訓練,作者稱他們的方法為 半監督分類。
當然,你也可以用這個方法去做graph classification、link prediction,只是把損失函式給變化一下即可。
三、GCN為什麼是這個亞子
我前後翻看了很多人的解讀,但是讀了一圈,最讓我清楚明白為什麼GCN的公式是這樣子的居然是作者Kipf自己的部落格:tkipf.github.io/graph-c 推薦大家一讀。
作者給出了一個由簡入繁的過程來解釋:
我們的每一層GCN的輸入都是鄰接矩陣A和node的特徵H,那麼我們直接做一個內積,再乘一個引數矩陣W,然後啟用一下,就相當於一個簡單的神經網路層嘛,是不是也可以呢?
實驗證明,即使就這麼簡單的神經網路層,就已經很強大了。這個簡單模型應該大家都能理解吧,這就是正常的神經網路操作。
但是這個簡單模型有幾個侷限性:
只使用A的話,由於A的對角線上都是0,所以在和特徵矩陣H相乘的時候,只會計算一個node的所有鄰居的特徵的加權和,該node自己的特徵卻被忽略了。因此,我們 可以做一個小小的改動,給A加上一個單位矩陣I,這樣就讓對角線元素變成1了。
A是沒有經過歸一化的矩陣,這樣與特徵矩陣相乘會改變特徵原本的分佈,產生一些不可預測的問題。所以我們對A做一個標準化處理。首先讓A的每一行加起來為1,我們可以乘以一個 ,D就是度矩陣。我們可以進一步把 拆開與A相乘,得到一個對稱且歸一化的矩陣: 。
透過對上面兩個侷限的改進,我們便得到了最終的層特徵傳播公式:
其中 ,
為 的degree matrix。
公式中的 與對稱歸一化拉普拉斯矩陣十分類似,而在譜圖卷積的核心就是使用對稱歸一化拉普拉斯矩陣,這也是GCN的卷積叫法的來歷。原論文中給出了完整的從譜卷積到GCN的一步步推導,我是看不下去的,大家有興趣可以自行閱讀。
四、GCN有多牛
在看了上面的公式以及訓練方法之後,我並沒有覺得GCN有多麼特別,無非就是一個設計巧妙的公式嘛,也許我不用這麼複雜的公式,多加一點訓練資料或者把模型做深,也可能達到媲美的效果呢。
但是一直到我讀到了論文的附錄部分,我才頓時發現:GCN原來這麼牛啊!
為啥呢?
因為即使不訓練,完全使用隨機初始化的引數W,GCN提取出來的特徵就以及十分優秀了!這跟CNN不訓練是完全不一樣的,後者不訓練是根本得不到什麼有效特徵的。
我們看論文原文:
然後作者做了一個實驗,使用一個俱樂部會員的關係網路,使用隨機初始化的GCN進行特徵提取,得到各個node的embe dding,然後視覺化:
可以發現,在原資料中同類別的node,經過GCN的提取出的embe dding,已經在空間上自動聚類了。
而這種聚類結果,可以和 DeepWalk、node2vec這種經過複雜訓練得到的node embe dding的效果媲美了。
說的誇張一點,比賽還沒開始,GCN就已經在終點了。看到這裡我不禁猛拍大腿打呼:“NB!”
還沒訓練就已經效果這麼好,那 給少量的標註資訊,GCN的效果就會更加出色。
作者接著給每一類的node,提供僅僅一個標註樣本,然後去訓練,得到的視覺化效果如下:
這是整片論文讓我印象最深刻的地方。
看到這裡,我覺得,以後有機會,確實得詳細地吧GCN背後的數學琢磨琢磨,其中的玄妙之處究竟為何,其物理本質為何。這個時候,回憶起在知乎上看到的各路大神從各種角度解讀GCN,例如從熱量傳播的角度,從一個群體中每個人的工資的角度,生動形象地解釋。這一刻,歷來痛恨數學的我,我感受到了一絲數學之美,於是凌晨兩點的我,開啟了天貓,下單了一本正版《數學之美》。哦,數學啊,你真如一朵美麗的玫瑰,每次被你的美所吸引,都要深深受到刺痛,我何時才能懂得你、擁有你?
其他關於GCN的點滴:
-
對於很多網路,我們可能沒有節點的特徵,這個時候可以使用GCN嗎?答案是可以的,如論文中作者對那個俱樂部網路,採用的方法就是用 單位矩陣 I 替換特徵矩陣 X。
-
我沒有任何的節點類別的標註,或者什麼其他的標註資訊,可以使用GCN嗎?當然,就如前面講的,不訓練的GCN,也可以用來提取graph embe dding,而且效果還不錯。
-
GCN網路的層數多少比較好?論文的作者做過GCN網路深度的對比研究,在他們的實驗中發現,GCN層數不宜多,2-3層的效果就很好了。
這麼強大的玩意兒,趕緊去試試吧!
原文連結: .com/p/71200936
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2662879/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 卷積神經網路(CNN)詳解卷積神經網路CNN
- PyTorch入門-殘差卷積神經網路PyTorch卷積神經網路
- 神經網路之卷積篇:詳解卷積步長(Strided convolutions)神經網路卷積IDE
- 神經網路之卷積篇:詳解經典網路(Classic networks)神經網路卷積
- 卷積神經網路卷積神經網路
- 神經網路之卷積篇:詳解單層卷積網路(One layer of a convolutional network)神經網路卷積
- CNN-卷積神經網路簡單入門(2)CNN卷積神經網路
- 卷積神經網路-AlexNet卷積神經網路
- 5.2.1 卷積神經網路卷積神經網路
- 卷積神經網路CNN卷積神經網路CNN
- 卷積神經網路概述卷積神經網路
- 解密卷積神經網路!解密卷積神經網路
- 卷積神經網路-1卷積神經網路
- 卷積神經網路-2卷積神經網路
- 卷積神經網路-3卷積神經網路
- 神經網路基礎部件-卷積層詳解神經網路卷積
- 深度學習入門筆記(十八):卷積神經網路(一)深度學習筆記卷積神經網路
- 卷積神經網路四種卷積型別卷積神經網路型別
- 全卷積神經網路FCN卷積神經網路
- 深度剖析卷積神經網路卷積神經網路
- 圖神經網路入門神經網路
- 卷積神經網路鼻祖LeNet網路分析卷積神經網路
- 【深度學習原理第4篇】卷積神經網路詳解(CNN)深度學習卷積神經網路CNN
- 何為神經網路卷積層?神經網路卷積
- CNN神經網路之卷積操作CNN神經網路卷積
- 卷積神經網路 part2卷積神經網路
- 14 卷積神經網路(進階)卷積神經網路
- Tensorflow-卷積神經網路CNN卷積神經網路CNN
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積
- 圖卷積神經網路分類的pytorch實現卷積神經網路PyTorch
- 吳恩達《卷積神經網路》課程筆記(1)– 卷積神經網路基礎吳恩達卷積神經網路筆記
- 卷積神經網路-啟用函式卷積神經網路函式
- 深度學習三:卷積神經網路深度學習卷積神經網路
- 一文看懂卷積神經網路卷積神經網路
- 卷積神經網路:Convolutional Neural Networks(CNN)卷積神經網路CNN
- 卷積神經網路(Convolutional Neural Network,CNN)卷積神經網路CNN
- 直白介紹卷積神經網路(CNN)卷積神經網路CNN
- 卷積神經網路—基本部件(2)卷積神經網路