通俗易懂:圖卷積神經網絡入門詳解

2021-01-08 AI科技大本營

作者 | 蟈蟈

來源 | 轉載自知乎用戶蟈蟈

【導讀】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 embedding),可見用途廣泛。因此現在人們腦洞大開,讓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的embedding,然後可視化:

可以發現,在原數據中同類別的node,經過GCN的提取出的embedding,已經在空間上自動聚類了。

而這種聚類結果,可以和DeepWalk、node2vec這種經過複雜訓練得到的node embedding的效果媲美了。

說的誇張一點,比賽還沒開始,GCN就已經在終點了。看到這裡我不禁猛拍大腿打呼:「NB!」

還沒訓練就已經效果這麼好,那給少量的標註信息,GCN的效果就會更加出色。

作者接著給每一類的node,提供僅僅一個標註樣本,然後去訓練,得到的可視化效果如下:

這是整片論文讓我印象最深刻的地方。

看到這裡,我覺得,以後有機會,確實得詳細地吧GCN背後的數學琢磨琢磨,其中的玄妙之處究竟為何,其物理本質為何。這個時候,回憶起在知乎上看到的各路大神從各種角度解讀GCN,例如從熱量傳播的角度,從一個群體中每個人的工資的角度,生動形象地解釋。這一刻,歷來痛恨數學的我,我感受到了一絲數學之美,於是凌晨兩點的我,打開了天貓,下單了一本正版《數學之美》。哦,數學啊,你真如一朵美麗的玫瑰,每次被你的美所吸引,都要深深受到刺痛,我何時才能懂得你、擁有你?

其他關於GCN的點滴:

對於很多網絡,我們可能沒有節點的特徵,這個時候可以使用GCN嗎?答案是可以的,如論文中作者對那個俱樂部網絡,採用的方法就是用單位矩陣 I 替換特徵矩陣 X。我沒有任何的節點類別的標註,或者什麼其他的標註信息,可以使用GCN嗎?當然,就如前面講的,不訓練的GCN,也可以用來提取graph embedding,而且效果還不錯。GCN網絡的層數多少比較好?論文的作者做過GCN網絡深度的對比研究,在他們的實驗中發現,GCN層數不宜多,2-3層的效果就很好了。這麼強大的玩意兒,趕緊去試試吧!

原文連結:https://zhuanlan.zhihu.com/p/71200936

相關焦點

  • 卷積神經網絡小白入門手冊
    學習深度學習,最常接觸到的就是各式各樣的神經網絡了,其中卷積神經網絡是諸多神經網絡中最典型最常用的神經網絡了。本文原始素材來源於freecodecamp博客,經本人翻譯首發於此。希望能幫助到大家!覺得不錯就點個讚,或者關注下我吧,後續我還會分享更多相關的精彩內容。
  • 深度學習入門:淺析卷積神經網絡
    至今已有數種深度學習方法,如卷積神經網絡(CNN)、自編碼神經網絡(包括Auto encoder和Sparse Coding)和深度置信網絡(DBN),並在各個領域中取得了極好的效果。預測類別圖8 邏輯回歸混淆矩陣(縱軸為真實類別)03卷積神經網絡一卷積神經網絡概述
  • GCN圖卷積網絡入門詳解
    字幕組雙語原文:【GCN】圖卷積網絡(GCN)入門詳解英語原文:Graph Convolutional Networks (GCN)翻譯:聽風1996、大表哥在這篇文章中,我們將仔細研究一個名為GCN的著名圖神經網絡。首先,我們先直觀的了解一下它的工作原理,然後再深入了解它背後的數學原理。為什麼要用Graph?
  • 圖像識別技術——卷積神經網絡CNN詳解
    前言卷積神經網絡不同於神經網絡,在圖片處理這方面有更好的表現。本文主要對神經網絡和卷積神經網絡做了簡要的對比,著重介紹了卷積神經網絡的層次基礎,同時也簡要介紹了卷積神經網絡參數更新方式和其優缺點,並結合具體實例對卷積神經網絡的工作方式做了介紹。
  • 網絡編程入門(六):什麼是公網IP和內網IP?NAT轉換又是什麼鬼?
    另外,以下是與本文內相關知識點有關聯的文章,可詳細閱讀之:《P2P 技術詳解(一):NAT詳解——詳細原理、P2P簡介》《P2P 技術詳解(二):P2P中的NAT穿越(打洞)方案詳解》《通俗易懂:快速理解P2P技術中的NAT穿透原理》《網絡編程懶人入門(六):史上最通俗的集線器、交換機、路由器功能原理入門》《網絡編程懶人入門(九):通俗講解,有了IP位址,為何還要用MAC
  • 網絡編程懶人入門(十一):一文讀懂什麼是IPv6
    (一):快速理解網絡通信協議(上篇)》《網絡編程懶人入門(二):快速理解網絡通信協議(下篇)》《網絡編程懶人入門(三):快速理解TCP協議一篇就夠》《網絡編程懶人入門(四):快速理解TCP和UDP的差異》《網絡編程懶人入門(五):快速理解為什麼說UDP有時比TCP更有優勢》《網絡編程懶人入門(六):史上最通俗的集線器、交換機、路由器功能原理入門
  • 深度學習入門教程:手把手帶你用Numpy實現卷積神經網絡(一)
    後面我們將通過一系列文章介紹如何用Numpy從零實現一個可以訓練的CNN簡易網絡,同時對深度學習(CNN)的相關基礎知識進行一些複習,也希望能夠給正在入門的同學一些簡單的歸納。在這一系列的文章中,我們主要需要做以下一些工作:Numpy實現如下圖中所示的基本的CNN網絡組件:conv, pooling, relu, fullyconnect, softmax用實現的基本組件搭建可以訓練的網絡,完成mnist的訓練與測試,畫出一個下圖的訓練曲線從貫序連接的層模型到計算圖模型的引入,完成自動求值,求導等功能常見的初始化方法,激活函數,優化方法
  • 卷積神經網絡VGG16詳解
    在看懂VGG16網絡之前,先補一下卷積神經網絡的知識,然後用代碼實例來更好說明VGG16網絡VGG網絡卷積核相當於卷積操作中的一個過濾器,用於提取我們圖像的特徵,特徵提取完後會得到一個特徵圖。卷積核的大小一般選擇3x3和5x5,比較常用的是3x3,訓練效果會更好。
  • 卷積神經網絡理解(一):濾波器的意義
    卷積神經網絡的發展二. 卷積神經網絡的重要性三. 卷積神經網絡與圖像識別四. 濾波器一.卷積神經網絡的發展卷積神經網絡受到視覺細胞研究的啟發,1962年,Hubel和Wiesel發現初級視覺皮層中的神經元會響應視覺環境中特定的簡單特徵(比如有向的邊等)。
  • 深度學習入門之第五章:經典卷積神經網絡
    5.1 LeNet-5LeNet-5是由有著卷積神經網絡之父美譽的Yann LeCun(中文翻譯為楊立昆)於1998年提出的一種經典的卷積網絡結構。它是第一個成功應用於數字識別問題的卷積神經網絡。在MNIST數據集上,LeNet-5模型可以達到大約99.2%的正確率。
  • 一文讀懂卷積神經網絡工作原理
    卷積神經網絡(Convolutional Neural Network, CNN)是人工神經網絡的一種,是當下語音分析和圖像識別領域的研究熱點。這篇文章用最簡明的語言和最直觀的圖像,帶你入門CNN。準備好了嗎?
  • 卷積神經網絡(CNN)新手指南
    以類似的方式計算機能夠進行圖像分類任務,通過尋找低層次的特徵如邊緣和曲線,然後運用一系列的卷積層建立一個更抽象的概念。這是卷積神經網絡應用的一個總體概述,接下來我們來探討下細節。生物聯繫首先要稍微普及下一點背景知識,當你第一次聽到卷積神經網絡這個詞時,你也許會想這是是不與神經科學或者生物學有關?恭喜你,猜對了一部分。卷
  • 使用Keras構建具有自定義結構和層次圖卷積神經網絡
    :Keras中的圖卷積神經網絡(GCNN)。如何構建具有自定義結構和層次的神經網絡:Keras中的圖卷積神經網絡(GCNN)我們想要建立一個具有創造性結構的自定義神經網絡!幸運的是,通過定義自定義層和模型,我們可以在Keras中輕鬆地執行此任務。在這個循序漸進的教程中,我們將構建一個包含並行層的神經網絡,其中包括一個圖卷積層。那麼什麼是圖上的卷積呢?
  • 深度學習的卷積神經網絡、循環神經網絡,更看好哪個?
    深度學習、卷積神經網絡、循環神經網絡席捲每個角落,甚至學術性最強的國際會議都有幾萬人參見,將高大上、專業、枯燥的頂級專業會議變成了明星粉絲見面會。當然市場也一片紅火,過去的一年幾個網際網路、人工智慧公司上市,吹皺一池春水,和網際網路、人工智慧相關的公司,不管規模效益如何,都喊出近期上市的口號。學術和市場雙火熱,帶動了更多的年輕人投身其中。
  • 這本CNN入門材料《解析卷積神經網絡》想不想要?
    這是一本系統完整的 CNN 入門材料,是面向中文讀者的輕量級、實用深度學習工具書,內容側重深度卷積神經網絡的基礎知識和實踐應用。2018 年 11 月,這本書由電子工業出版社出版,由南京大學周志華教授作序。
  • 揭秘卷積神經網絡熱力圖:類激活映射
    本文將介紹在卷積神經網絡(CNN)中,針對圖像的某些部位可視化從而做出判斷的不同技術。類激活映射(CAM)是一種生成熱力圖的技術,用於突出圖像的類的特定區域。視覺化神經網絡正在查看的位置大有用處,因為它幫助我們理解神經網絡是否在查看圖像的適當部位,或者神經網絡是否在進行誤導。下列是一些神經網絡在做分類決判斷時可能進行誤導和錯誤查看位置的例子:· 卷積神經網絡將一張圖片分類為「火車」,而實際上它是在尋找「火車軌道」(這意味著它會錯誤地將一張火車軌道圖片單獨分類為「火車」)。
  • 大話卷積神經網絡CNN,小白也能看懂的深度學習算法教程,全程乾貨...
    如下圖所示:人工神經網絡可以映射任意複雜的非線性關係,具有很強的魯棒性、記憶能力、自學習等能力,在分類、預測、模式識別等方面有著廣泛的應用。四、卷積神經網絡4.1、CNN定義主角登場,其他人退讓!!!如下圖所示:重點來了,什麼是卷積神經網絡?
  • 人工智慧TensorFlow(十三)讀懂CNN卷積神經網絡
    ,一般分為輸入層,隱藏層,輸出層    TensorFlow神經網絡  那什麼是卷積神經網絡呢,這就要我們追溯一下人類識別圖像的原理  CNN卷積神經網絡就是來源於此識別過程來實現。  卷積神經網絡  卷積神經網絡依舊是層級網絡,只是層的功能和形式做了變化,可以說是傳統神經網絡的一個改進。比如下圖中就多了許多傳統神經網絡沒有的層次。
  • 卷積神經網絡的卷積到底是什麼
    打開APP 卷積神經網絡的卷積到底是什麼 人工智慧遇見磐創 發表於 2020-05-05 08:40:00 卷積神經網絡是一種特殊的神經網絡結構,是自動駕駛汽車、人臉識別系統等計算機視覺應用的基礎,其中基本的矩陣乘法運算被卷積運算取代。
  • 給你一個卷積神經網絡工作原理最直觀的解釋
    卷積神經網絡(Convolutional Neural Network, CNN)是人工神經網絡的一種,是當下語音分析和圖像識別領域的研究熱點。這篇文章用最簡明的語言和最直觀的圖像,帶你入門CNN。準備好了嗎?Let’s go——我們先從最基礎的內容說起。對二維數位訊號(圖像)的操作,可以寫成矩陣形式。