在 《Spectral Networks and Deep Locally Connected Networks on Graphs》的基礎上,
《Convolutional Neural Networks on Graphs
with Fast Localized Spectral Filtering》作出了改進:
作者提出,泛化卷積網絡到圖上需要以下3個基本的步驟:
(1)在圖上設計出局部的卷積核
(2)將的相似節點聚類的圖粗化過程
(3)將空間分辨率轉化爲更高的濾波器分辨率的圖池化操作
1.在圖上設計出局部的卷積核
定義無向圖G=(V,E,W),其中V是節點的集合,∣V∣=n,E是邊的集合,W是由節點之間的連接權重得到的鄰接矩陣,D是度矩陣,並且Dii=∑jWij,L是圖的拉普拉斯矩陣,L=D−W。U=[u0,...,un−1]∈Rn×n是L的特徵向量矩陣,Λ=diag([λ0,...λn−1])∈Rn×n,“∗g”表示圖上的卷積算子,所以
y=x∗gg=U((UTx)⨀(UTg))=UgθUTx(1)
其中,gθ=diag[(u0Tg,...,un−1Tg)],
因爲對於L來說,特徵值和特徵向量一一對應,當λi確定時,uiT就確定了,所以可以寫成g(λi)=uiTg,那麼
gθ=diag[(g(λ0),...,g(λn−1))]=g(diag([λ0,...λn−1]))=g(Λ)=diag(θ)(2)
其中,θ∈Rn,所以gθ是個關於Λ的函數,所以
y=Ugθ(Λ)UTx(3)
由於gθ(Λ)是一個關於Λ的函數,由K階矩陣級數展開得到:
gθ(Λ)≈k=0∑K−1θkΛk(4)
將式(4)帶入式(1),得到:
y≈Uk=0∑K−1θkΛkUTx=k=0∑K−1θkLkx=gθ(L)x(5)
其中(gθ(L))i,j表示卷積核gθ當中心在節點i上時對節點j的權值,dg(i,j)表示節點i,j之間的最短路徑的邊的數目,當dg(i,j)>K−1時,(gθ(L))i,j的值爲0,這意味這在計算節點i的鄰域節點時,只計算dg(i,j)≤K−1的節點作爲鄰域進行卷積。
在這裏的多項式展開可以利用切比雪夫多項式展開,切比雪夫多項式滿足:
Tk(x)=2xTk−1(x)−Tk−2(x)(6)
其中,T0=1,T1=x。
而且切比雪夫多項式{Tn(x)}在L2([−1,1],dy/1−y2)爲正交基,即∫−11Tn(x)Tm(x)1−x21dx=0(當n!=m),π(當n=m=0),π/2(當n=m!=0)。所以
gθ(Λ)=k=0∑K−1θkTk(Λ~)(7)
其中,Λ~=2Λ/λmax−In。將Λ這個對角矩陣規範到[−1,1]之間。所以L~=2L/λmax−In。
令xk=Tk(L~)x,由式(6)可知:xk=2L~xk−1−xk−1,x0=x,x1=L~x(8)
將式(8)帶入式(7)推出:
y=gθ(L)x=[x0,...xK−1]θ(9)
到此,其實已經構造完了局部卷積核,原來的卷積公式:y=Ugθ(Λ)UTx,新的卷積公式y=[x0,...xK−1]θ,將求解gθ(Λ)部分變爲求解θ(即爲卷積核的訓練參數),複雜度降低爲O(K),並且計算了求解特徵矩陣U,變爲計算[x0,...xK−1],其複雜度爲O(K∣E∣),∣E∣表示圖中邊的數目。而且這個部分在訓練的時候只需要計算一次,只於x,L有關,也就是隻與輸入有關,沒有訓練參數在其中。
當輸入爲多通道樣本的時候:
ys,j=i=1∑Fingθi,j(L)xs,i=i=1∑Fin[xs,i,0,...xs,i,K−1]θi,j∈Rn(10)
其中,s表示某個樣本s,xs,i表示樣本的第i個特徵,θi,j∈RK表示第j個濾波器對樣本s的第i個特徵的切比雪夫係數,θ∈RFout×Fin×K=RJ×I×K
2.將的相似節點聚類的圖粗化過程
在池化操作的時候,需要在圖像找到有意義的鄰域節點,它們需要有一定的相似性。這裏作者使用了Graclus分層聚類算法,首先選擇了一個未標記的節點i,然後從其他未標記的節點中找出最大的局部歸一化切割Wi,j(1/di+1/dj)的節點j,將這兩個節點進行標記,粗化後的權值等於這兩個節點的權值之和,然後重複這個過程直到所有的節點都被標記。這個過程將節點的數量大約減少了一半,並且這個過程中會存在一些孤立節點以及未匹配點。
3.將空間分辨率轉化爲更高的濾波器分辨率的圖池化操作
在池化操作中,需要完成兩個步驟:
①:建立一個二叉樹
②:重新排列節點變成一維信號
在粗化後,每個節點都將有兩個子節點,即前一層粗化中是子節點,求和後得到後一個粗化中的節點。通過粗化創建的二叉樹有以下特點:(綠色是常規節點,橙色是孤立節點,藍色是假節點)
1):常規的節點和孤立節點有兩個常規的子節點;圖中g1的0節點,它是個孤立節點,g1中沒有和它匹配的點,但是它的子節點在g0中是一對配對的節點0,1;
2):孤立節點可以通過添加假節點(未連接的節點,其權值爲0)進行配對,成爲子節點;圖中g2的節點0,它的子節點是g1中的孤立節點0以及假節點1;
3):假節點對應的子節點總都是假節點;
圖中g1的節點1,它是由於孤立節點0添加的,所以在g0中的子節點爲假節點2,3;
在圖中左邊部分是粗化過程,初始的圖g0有8個節點,並且希望經過第一次粗化得到g1有5個點,所以需要在g0中找到3對匹配的點,剩下的節點作爲孤立節點於假節點匹配,得到g1;之後第二次粗化希望g2有3個點,那麼需要找到2對匹配的點,然後剩下的孤立點與假節點匹配,在g1中的假節點對應到g0中需要添加兩個假節點。到此,完成了粗化的過程。
圖的右邊是池化的過程,它的過程相當於將g0中的12個節點按照粗化過程中的節點關係排列成爲一維信號(將g2節點排成一維信號後,反推出g0中節點的順序,即建立二叉樹的過程),按照傳統的池化窗口的形式進行池化操作即可