原文地址:https://zhuanlan.zhihu.com/p/27216346node
本文要介紹的這一篇paper是ICML2016上一篇關於 CNN 在圖(graph)上的應用。ICML 是機器學習方面的頂級會議,這篇文章--<< Learning CNNs for Graphs>>--所研究的內容也具備很是好的理論和實用的價值。若是您對於圖的數據結構並非很熟悉建議您先參考本文末的相關基礎知識的介紹。算法
CNN已經在計算機視覺(CV)以及天然語言處理等領域取得了state-of-art 的水平,其中的數據能夠被稱做是一種Euclidean Data,CNN正好可以高效的處理這種數據結構,探索出其中所存在的特徵表示。網絡
&amp;lt;img src="https://pic2.zhimg.com/v2-3a226517f52a83f3edbeb019c8ad0109_b.png" data-rawwidth="410" data-rawheight="256" class="content_image" width="410"&amp;gt;圖1 歐氏(歐幾里德)數據(Euclidean Data)舉例數據結構
所謂的歐氏(歐幾里德)數據指的是相似於grids, sequences… 這樣的數據,例如圖像就能夠看做是2D的grid數據,語音信號就能夠看做是1D的grid數據。可是現實的處理問題當中還存在大量的 Non-Euclidean Data,如社交多媒體網絡(Social Network)數據,化學成分(Chemical Compound)結構數據,生物基因蛋白(Protein)數據以及知識圖譜(Knowledge Graphs)數據等等,這類的數據屬於圖結構的數據(Graph-structured Data)。CNN等神經網絡結構則並不能有效的處理這樣的數據。所以,這篇paper要解決的問題就是如何使用CNN高效的處理圖結構的數據。機器學習
&amp;lt;img src="https://pic3.zhimg.com/v2-122afdad899925fcd6d19015d5824ace_b.png" data-rawwidth="567" data-rawheight="221" class="origin_image zh-lightbox-thumb" width="567" data-original="https://pic3.zhimg.com/v2-122afdad899925fcd6d19015d5824ace_r.jpg"&amp;gt;圖2 Graph 數據舉例ide
本文所提出算法思想很簡單,將一個圖結構的數據轉化爲CNN可以高效處理的結構。處理的過程主要分爲兩個步驟:1.從圖結構當中選出具備表明性的nodes序列;2.對於選出的每個node求出一個卷積的鄰域(neighborhood field)。接下來咱們詳細的介紹算法相關的細節。學習
本paper將圖像(image)看做是一種特殊的圖(graph),即一種的grid graph,每個像素就是graph當中的一個node。那麼我猜測文章的motivation主要來自於想將CNN在圖像上的應用generalize 到通常的graph上面。idea
那麼咱們首先來看一下CNN在Image當中的應用。如圖3所示,左圖表示的是一張圖像在一個神經網絡層當中的卷機操做過程。最底部的那一層是輸入的特徵圖(或原圖),經過一個卷積(這裏表示的是一個3*3的卷積核,也就是文章當中的receptive filed=9)操做,輸出一張卷積後的特徵圖。如圖3 的卷積操做,底層的9個像素被加權映射到上層的一個像素;再看圖3中的右圖,表示從graph的角度來看左圖底層的輸入數據。其中任意一個帶卷積的區域均可以看做是一箇中心點的node以及它的領域的nodes集合,最終加權映射爲一個值。所以,底部的輸入特徵圖能夠看做是:在一個方形的grid 圖當中肯定一些列的nodes來表示這個圖像而且構建一個正則化的鄰域圖(而這個鄰域圖就是卷積核的區域,也就是感知野)。spa
&amp;lt;img src="https://pic4.zhimg.com/v2-c309bc72bcbe1d3fcf3e77b62481c367_b.png" data-rawwidth="475" data-rawheight="236" class="origin_image zh-lightbox-thumb" width="475" data-original="https://pic4.zhimg.com/v2-c309bc72bcbe1d3fcf3e77b62481c367_r.jpg"&amp;gt;圖3 圖像的卷積操做3d
按照這樣的方式來解釋,那麼如paper中Figure1所示,一張4*4大小的圖像,實際上能夠表示爲一個具備4個nodes(圖中的1,2,3,4)的圖(graph),其中每個node還包括一個和卷積核同樣大小的鄰域(neighborhood filed)。那麼,由此獲得對於這種圖像(image)的卷積實際上就是對於這4個node組成的圖(graph)的領域的卷積。那麼,對於一個通常性的graph數據,一樣的只須要選出其中的nodes,而且求解獲得其相關的固定大小(和卷積核同樣大小)領域即可以使用CNN卷積獲得圖的特徵表示。
&amp;lt;img src="https://pic2.zhimg.com/v2-3e36b0fa70e01c72a0dc98ad613a3dd5_b.png" data-rawwidth="484" data-rawheight="277" class="origin_image zh-lightbox-thumb" width="484" data-original="https://pic2.zhimg.com/v2-3e36b0fa70e01c72a0dc98ad613a3dd5_r.jpg"&amp;gt;圖4 paper中的Figure1.
須要注意的是,圖4(b)當中表示的是(a)當中的一個node的鄰域,這個感知野按照空間位置從左到右,從上到下的順序映射爲一個和卷積核同樣大小的vector,而後再進行卷積。可是在通常的圖集當中,不存在圖像當中空間位置信息。這也是處理圖數據過程中要解決的一個問題。
基於以上的描述paper當中主要作了三個事情:1. 選出合適的nodes;2. 爲每個node創建一個鄰域;3. 創建graph表示到 vector表示的單一映射,保證具備類似的結構特徵的node能夠被映射到vector當中相近的位置。算法具體分爲4個步驟:
1. 圖當中頂點的選擇Node Sequence Selection
首先對於輸入的一個Graph,須要肯定一個寬度w(定義於Algorithm 1),它表示也就是要選擇的nodes的個數。其實也就是感知野的個數(其實這裏也就是代表,每次卷積一個node的感知野,卷積的stride= kernel size的)。那麼具體如何進行nodes的選擇勒?
實際上,paper當中說根據graph當中的node的排序label進行選擇,可是本文並無對如何排序有更多的介紹。主要採起的方法是:centrality,也就是中心化的方法,我的的理解爲越處於中心位置的點越重要。這裏的中心位置不是空間上的概念,應該是度量一個點的關係中的重要性的概念,簡單的舉例說明。如圖5當中的兩個圖實際上表示的是同一個圖,對其中紅色標明的兩個不一樣的nodes咱們來比較他們的中心位置關係。比較的過程中,咱們計算該node和其他全部nodes的距離關係。咱們假設相鄰的兩個node之間的距離都是1。
&amp;lt;img src="https://pic4.zhimg.com/v2-a6139481fa6581d2b6eca899bc24baa3_b.png" data-rawwidth="817" data-rawheight="163" class="origin_image zh-lightbox-thumb" width="817" data-original="https://pic4.zhimg.com/v2-a6139481fa6581d2b6eca899bc24baa3_r.jpg"&amp;gt;圖5 圖當中的兩個nodes
那麼對於圖5當中的左圖的紅色node,和它直接相連的node有4個,所以距離+4;再稍微遠一點的也就是和它相鄰點相鄰的有3個,距離+6;依次再相鄰的有3個+9;最後還剩下一個最遠的+4;所以咱們知道該node的總的距離爲23。同理咱們獲得右邊的node的距離爲3+8+6+8=25。那麼很明顯node的選擇的時候左邊的node會被先選出來。
固然,這只是一種node的排序和選擇的方法,其存在的問題也是很是明顯的。Paper並無在此次的工做當中作詳細的說明。
2. 找到Node的領域Neighborhood Assembly
接下來對選出來的每個node肯定一個感知野receptive filed以便進行卷積操做。可是,在這以前,首先找到每個node的鄰域區域(neighborhood filed),而後再從當中肯定感知野當中的nodes。假設感知野的大小爲k,那麼對於每個Node很明顯都會存在兩種狀況:鄰域nodes不夠k個,或者是鄰域點多了。這個將在下面的章節進行講解。
&amp;lt;img src="https://pic3.zhimg.com/v2-84669297de00e2b5e77170997f71e0d6_b.png" data-rawwidth="632" data-rawheight="303" class="origin_image zh-lightbox-thumb" width="632" data-original="https://pic3.zhimg.com/v2-84669297de00e2b5e77170997f71e0d6_r.jpg"&amp;gt;圖6 Neighborhood Assemble結果
如圖選出的是6個nodes,對於每個node,首先找到其直接相鄰的nodes(被稱做是1-neighborhood),若是還不夠再增長間接相鄰的nodes。那麼對於1-neighborhood就已經足夠的狀況,先所有放在候選的區域當中,在下一步當中經過規範化來作最終的選擇。
3. 圖規範化過程Graph Normalization
假設上一步Neighborhood Assemble過程中一個node獲得一個領域nodes總共有N個。那麼N的個數可能和k不相等的。所以,normalize的過程就是要對他們打上排序標籤進行選擇,而且按照該順序映射到向量當中。
&amp;lt;img src="https://pic1.zhimg.com/v2-771287779ad086e6c23eb3351152f4cc_b.png" data-rawwidth="781" data-rawheight="120" class="origin_image zh-lightbox-thumb" width="781" data-original="https://pic1.zhimg.com/v2-771287779ad086e6c23eb3351152f4cc_r.jpg"&amp;gt;圖7 求解node的receptive filed
若是這個node的鄰域nodes的個數不足的話,直接所有選上,不夠補上啞節點(dummy nodes),但仍是須要排序;若是數目N超過則須要按着排序截斷後面的節點。如圖7所示表示從選node到求解出receptive filed的整個過程。Normalize進行排序以後就可以映射到一個vector當中了。所以,這一步最重要的是對nodes進行排序。
&amp;lt;img src="https://pic1.zhimg.com/v2-6afbfd2936c380b4d7e3d0703065abb8_b.png" data-rawwidth="194" data-rawheight="269" class="content_image" width="194"&amp;gt;
圖8 Normalize 過程
如圖8所示,表示對任意一個node求解它的receptive filed的過程。這裏的卷積核的大小爲4,所以最終要選出來4個node,包括這個node自己。所以,須要給這些nodes打上標籤(labeling)。固然存在不少的方式,那麼怎樣的打標籤方式纔是最好的呢?如圖7所示,其實從這7個nodes當中選出4個nodes會造成一個含有4個nodes的graph的集合。做者認爲:在某種標籤下,隨機從集合當中選擇兩個圖,計算他們在vector空間的圖的距離和在graph空間圖的距離的差別的指望,若是這個指望越小那麼就代表這個標籤越好!具體的表示以下:
&amp;lt;img src="https://pic2.zhimg.com/v2-b0583558079a4d93167d2acb3a546535_b.png" data-rawwidth="634" data-rawheight="280" class="origin_image zh-lightbox-thumb" width="634" data-original="https://pic2.zhimg.com/v2-b0583558079a4d93167d2acb3a546535_r.jpg"&amp;gt;
獲得最好的標籤以後,就可以按着順序將node映射到一個有序的vector當中,也就獲得了這個node的receptive field,如圖6最右邊所示。
4. 卷積網絡結構Convolutional Architecture
文章使用的是一個2層的卷積神經網絡,將輸入轉化爲一個向量vector以後即可以用來進行卷積操做了。具體的操做如圖9所示。
&amp;lt;img src="https://pic4.zhimg.com/v2-b400a7ddc72bca42b6fcbb6ad7c70f8f_b.png" data-rawwidth="887" data-rawheight="320" class="origin_image zh-lightbox-thumb" width="887" data-original="https://pic4.zhimg.com/v2-b400a7ddc72bca42b6fcbb6ad7c70f8f_r.jpg"&amp;gt; 圖9 卷積操做過程
首先最底層的灰色塊爲網絡的輸入,每個塊表示的是一個node的感知野(receptive field)區域,也是前面求解獲得的4個nodes。其中an表示的是每個node的數據中的一個維度(node若是是彩色圖像那就是3維;若是是文字,多是一個詞向量……這裏代表數據的維度爲n)。粉色的表示卷積核,核的大小爲4,可是寬度要和數據維度同樣。所以,和每個node卷季後獲得一個值。卷積的步長(stride)爲4,代表每一次卷積1個node,stride=4下一次恰好跨到下一個node。(備註:paper 中Figure1 當中,(a)當中的stride=1,可是轉化爲(b)當中的結構後stride=9)。卷積核的個數爲M,代表卷積後獲得的特徵圖的通道數爲M,所以最終獲得的結果爲V1……VM,也就是圖的特徵表示。有了它即可以進行分類或者是迴歸的任務了。
基礎問題:
圖的基本概念:主要有頂點和邊構成,存在一個鄰接矩陣A,若是對其中的nodes進行特徵表示(Feat)的話以下右圖。
&amp;lt;img src="https://pic4.zhimg.com/v2-634e92ce5d033a4a5ac7089b4d399267_b.png" data-rawwidth="873" data-rawheight="200" class="origin_image zh-lightbox-thumb" width="873" data-original="https://pic4.zhimg.com/v2-634e92ce5d033a4a5ac7089b4d399267_r.jpg"&amp;gt;